Dieser Vortrag beschreibt die Implementierung von curve25519-dalek, einer reinen Rust-Bibliothek für elliptische Kurven-Kryptographie, vorgestellt von Isis Lovecruft (Tor Project) und Henry. Die Vortragenden analysieren die architektonische Schichtung kryptographischer Systeme, die Sicherheitsrisiken herkömmlicher C-Implementierungen (wie fehlerhafte Zeigerarithmetik und undefiniertes Verhalten) sowie die Entwurfsziele von Dalek: Speichersicherheit, Typsicherheit, Vielseitigkeit und Prüfbarkeit. Technische Details umfassen die Implementierung niedriger Feldarithmetik (Modulus $P = 2^{255} - 19$ im Radix-$2^{51}$-Format mit 128-Bit-Erweiterungsmultiplikation), die Gewährleistung konstanter Ausführungszeiten zur Vermeidung von Seitenkanalangriffen über LLVM sowie den Aufbau höherer Protokolle wie Zero-Knowledge-Beweisen (ZKP) und Bereichsbeweisen (Range Proofs) mittels makrobasierter Compiler und Rayon-Parallelisierung.
Wichtigste Punkte & Zeitstempel
0:16 Einführung in Dalek: Vorstellung der reinen Rust-Bibliothek für elliptische Kurven (curve25519-dalek), konzipiert für Entwickler mit Basiskenntnissen in Rust und Algebra, unabhängig von tiefer kryptographischer Expertise.
2:00 Architektonische Schichtung: Trennung zwischen Anwendung, kryptographischem Protokoll (Signaturen, Schlüsselaustausch, Zero-Knowledge-Beweise) und der Gruppenabstraktionsschicht basierend auf endlichen Körpern (Modulo-Primzahl $P$).
3:36 Mängel in C-Bibliotheken: Analyse systemischer Probleme in älteren C-Kryptobibliotheken, darunter fehlerhafte Zeigerarithmetik, undefiniertes Verhalten bei Ganzzahlüberläufen und die Verwendung typenloser Byte-Arrays für mathematisch inkompatible Strukturen (Skalare vs. Kurvenpunkte).
7:40 Entwurfsziele von Dalek: Priorisierung von Speichersicherheit, Typsicherheit, Lesbarkeit, Auditierbarkeit und breiterer Protokollunterstützung jenseits starrer monolithischer Implementierungen.
9:16 Feldarithmetik & Modulo-Optimierung: Implementierung von Modulo-$P$-Operationen ($P = 2^{255} - 19$) unter Verwendung von 64-zu-128-Bit-Erweiterungsmultiplikationen auf x86-64-Architekturen mit einem Radix-$2^{51}$-Zahlensystem (5 Koeffizienten).
20:45 Seitenkanalsicherheit & LLVM: Nutzung von LLVM zur Generierung konstanter Ausführungszeiten (Constant-Time), um zeitbasierte Cache-Angriffe und differentielle Leistungsanalysen zu verhindern; plattformunabhängige Kompilierung inklusive no_std-Unterstützung für eingebettete Systeme.
28:40 Zero-Knowledge-Protokolle (ZKPs): Implementierung eines experimentellen Makro-Compilers für diskrete Logarithmus-Gleichheitsnachweise (DLQ) und Bereichsbeweise (Range Proofs) mittels Borromean Ring Signatures für anonyme Transaktions- und Anti-Zensur-Systeme.
Glossar
Elliptische Kurven-Kryptographie (ECC): Ein asymmetrisches Verschlüsselungsverfahren, das auf der Algebra elliptischer Kurven über endlichen Körpern basiert und hohe Sicherheit bei effizienter Schlüsselgröße bietet.
Curve25519: Eine standardisierte elliptische Kurve, die speziell für hohe Ausführungsgeschwindigkeiten und starke Sicherheit entworfen wurde.
Rust: Eine moderne Systemprogrammiersprache, die auf hohe Leistung und Speichersicherheit (durch einen strikten Kompilierzeit-Prüfer ohne Garbage Collector) ausgelegt ist.
Tor Project: Eine Organisation, die Anonymisierungssoftware und Netzwerke entwickelt, um die Privatsphäre und Zensurresistenz von Nutzern im Internet zu wahren.
Radix ($2^{51}$): Eine mathematische Basisdarstellung von Großzahlen als Summe von Potenzen von $2^{51}$, wodurch Berechnungen effizient in handhabbare Stücke zerlegt werden.
Modulus ($P = 2^{255} - 19$): Eine fundamentale Primzahl, die als mathematische Obergrenze (Modul) für die Arithmetik der Curve25519 dient.
Erweiterungsmultiplikation (Widening Multiplication): Eine Rechenoperation, bei der zwei Zahlen multipliziert werden und ein Ergebnis ausgegeben wird, das doppelt so viele Bits beansprucht wie die Eingangswerte (z. B. zwei 64-Bit-Zahlen erzeugen ein 128-Bit-Ergebnis), um Überläufe abzufangen.
LLVM: Eine weit verbreitete Compiler-Infrastruktur, die Quellcode in optimierten Maschinencode für diverse Computerarchitekturen übersetzt.
Seitenkanalangriff (Side-Channel Attack): Eine Angriffsart auf IT-Systeme, bei der physikalische Nebenwirkungen wie Rechenzeit, Stromverbrauch oder elektromagnetische Abstrahlung gemessen werden, um geheime Schlüssel zu rekonstruieren.
Konstante Ausführungszeit (Constant-Time): Eine Eigenschaft von Programmen, bei der ein Algorithmus unabhängig von den geheimen Eingabedaten immer exakt gleich viele Taktzyklen benötigt, um timing-basierte Angriffe auszuschließen.
no_std: Ein Rust-Kompilierungsattribut, das die Nutzung der Standardbibliothek (std) deaktiviert, sodass Software auf Mikrocontrollern, Betriebssystemkernen oder in isolierten Enklaven ohne Betriebssystemumgebung ausgeführt werden kann.
Zero-Knowledge-Beweis (ZKP): Ein kryptographisches Protokoll, bei dem eine Partei einer anderen beweisen kann, dass eine mathematische Aussage wahr ist, ohne dabei andere Informationen als die bloße Gültigkeit preiszugeben.
Borromean Ring Signatures: Eine spezialisierte Form von Ringsignatur-Kryptographie, bei der mehrere digitale Signaturen über verschränkte Bedingungen miteinander verknüpft sind, um effiziente Bereichs- oder Berechtigungsnachweise zu erbringen.
Rayon: Eine Software-Bibliothek für Rust, die Datenparallelismus bereitstellt, um rechenintensive Aufgaben unkompliziert auf mehrere CPU-Kerne zu verteilen.