Quantenresistente Kryptografie für das Go-Ökosystem
filippo.io/mlkem768 ist eine reine Go-Implementierung von ML-KEM-768, optimiert auf Korrektheit und Lesbarkeit.
- ML-KEM ist ein quantenresistenter Schlüsselaustauschmechanismus, der von NIST standardisiert wird und in weiten Teilen der Industrie übernommen wird.
- Das Paket besteht aus etwa 500 Zeilen Code, 200 Zeilen Kommentaren und 650 Zeilen Tests und hat außer
golang.org/x/crypto/sha3 keine Abhängigkeiten.
- Es soll in die Go-Standardbibliothek integriert werden und ist so konzipiert, dass es durch einfache Reviewbarkeit, Schlichtheit und gründliche Tests ein hohes Maß an Sicherheit vermittelt.
Eine Implementierung zur Validierung der Spezifikation
- Anders als die meisten Implementierungen wurde dieser Code nicht aus der Referenzbibliothek pq-crystals portiert, sondern von Grund auf neu geschrieben, ohne andere Codebasen im Detail zu lesen.
- Das FIPS-203-Dokument ist ein hervorragender Leitfaden für die Implementierung, da es detaillierten Pseudocode, gründliche Definitionen und konsistente Typinformationen liefert.
- Um die Lesbarkeit des Codes und seinen Wert als Lernressource zu erhöhen, wurden Funktions- und Variablennamen sowie die Reihenfolge der Operationen sorgfältig an die FIPS-Spezifikation angepasst.
Genug Polynom- und lineare Algebra für die Implementierung
- Die Spezifikation setzt einen relativ begrenzten mathematischen Hintergrund voraus, aber um Implementierenden die Arbeit zu erleichtern, wurde „Genug Polynom- und lineare Algebra für die Kyber-Implementierung“ geschrieben.
- Der Rest bleibt als Übung für die Lesenden: 1) Modulo-Arithmetik bezüglich der Primzahl 3329, 2) die konkrete Implementierung der Kompressions- und Dekompressionsfunktionen von [0, 3329) nach [0, 2ᵈ), 3) die Gewährleistung von Constant-Time-Operationen.
Lesbarkeit und didaktischer Wert
- Lesbarkeit ist eines der Hauptziele der Implementierung und dient sowohl effektiven Reviews als auch als Lernressource für die nächste Generation von Maintainer:innen und Kryptografie-Ingenieur:innen.
- Um die Lesbarkeit komplexer Funktionen zu erhöhen, wird der Code in manchen Fällen länger und weniger wiederverwendbar gemacht.
Hohe Sicherheit durch Tests
- Es wird überprüft, ob Schlüsselgenerierung, Kapselung und Entkapselung korrekt funktionieren, und dabei eine Testabdeckung von über 95 % aufrechterhalten.
- Die Interoperabilität mit Testvektoren von NIST und anderen Implementierungen wird sichergestellt, und grundlegende arithmetische Operationen im zugrunde liegenden Feld werden gründlich durch Vergleiche mit Erwartungswerten getestet.
- Im Rahmen des CCTV-Projekts werden wiederverwendbare Testvektoren aus anderen Implementierungen veröffentlicht.
Leistung
- Performance ist nicht das Hauptziel, aber das Paket muss schnell genug sein, um praktisch nutzbar zu sein.
- ML-KEM ist ausreichend schnell, und diese einfache Implementierung kann mit in Assembler optimierten Implementierungen von P-256 und X25519 konkurrieren.
- Zur Leistungssteigerung werden Go-Programmiermuster befolgt und Anstrengungen unternommen, Heap-Allokationen zu minimieren.
Verwendung einer ML-KEM-Implementierung als Kyber v3
- NIST hat einige kleine Änderungen an der Round-3-Einreichung von Kyber vorgenommen.
- Einige experimentelle Protokolle sind auf Kyber v3 (oder „draft00“) definiert, doch dafür ist kein separates Paket nötig.
- Mit ML-KEM kann zunächst das gemeinsame Geheimnis K erzeugt werden; anschließend kann zusätzliche Schlüsselableitung angewendet werden, um das gemeinsame Geheimnis von Kyber zu erzeugen.
Meinung von GN⁺
- Bedeutung quantenresistenter Kryptografie: Mit dem Fortschritt des Quantencomputings könnten bestehende Kryptoverfahren angreifbar werden, daher sind Entwicklung und Standardisierung quantenresistenter Kryptografie wie ML-KEM von großer Bedeutung.
- Erweiterbarkeit der Go-Sprache: Diese Implementierung zeigt die Erweiterbarkeit und Flexibilität der Go-Sprache und dürfte mit der geplanten Integration einer Kryptografie-Bibliothek in die Standardbibliothek eine nützliche Ressource für die Go-Entwickler-Community werden.
- Didaktischer Wert: Der Fokus auf Lesbarkeit und didaktischen Wert dürfte der nächsten Generation von Kryptografie-Ingenieur:innen und interessierten Entwickler:innen als Lernressource sehr helfen.
1 Kommentare
Hacker-News-Kommentare
Frage zum aktuellen Stand des Quantencomputings
Grüße und Hinweis von Kudelski Security
Buchempfehlung zu in Go implementierten Kryptosystemen
Frage zu Implementierungen in anderen Sprachen (Java, C# usw.)
Bedenken zu einer reinen Implementierung in Go
Interesse und Frage zur Unterstützung von Kyber v3
Witz über die 32-Bit-System-Call-Tabelle
Sympathie für die Verwendung von Unicode-Variablennamen
Lob für ein anderes Projekt von FiloSottile
Teilen des Links zum NIST-FIPS-203-Dokument