1 Punkte von GN⁺ 2024-02-02 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-02-02
Hacker-News-Kommentare
  • Frage zum aktuellen Stand des Quantencomputings

    Es wird infrage gestellt, ob Quantencomputing bereits ein Niveau erreicht hat, auf dem es tatsächlich nötig ist, oder ob sich wie bei AI nur die Definition verändert und bestehende Produkte unter neuem Namen herausgebracht werden.

  • Grüße und Hinweis von Kudelski Security

    Es wird ein aktueller Fall von Kudelski Security vorgestellt, bei dem eine ihrer Go-Sprachbibliotheken für quantenresistente Kryptografie eingestellt werden musste. Weitere Details finden sich im verlinkten Beitrag.

  • Buchempfehlung zu in Go implementierten Kryptosystemen

    Vorgestellt wird John Arundels Buch zur Implementierung von Kryptosystemen mit Go 1.22. Im letzten Teil des Buches wird quantenresistente Kryptografie erwähnt, und nach der NIST-PQ-Standardisierung könnte das Buch aktualisiert werden.

  • Frage zu Implementierungen in anderen Sprachen (Java, C# usw.)

    Es wird nach Informationen zu ähnlichen Implementierungen in anderen Programmiersprachen gefragt.

  • Bedenken zu einer reinen Implementierung in Go

    Es wird die Sorge geäußert, dass eine reine Implementierung in Go anfällig für Timing-/Power-Side-Channel-Angriffe sein könnte.

  • Interesse und Frage zur Unterstützung von Kyber v3

    Positiv hervorgehoben wird die Unterstützung von draft00/kyber v3, verbunden mit der Frage, ob auch ein Kyber-90's-Modus ohne SHA-3 unterstützt werden könnte.

  • Witz über die 32-Bit-System-Call-Tabelle

    Ein Scherz darüber, dass die 32-Bit-System-Call-Tabelle „bald erscheint“.

  • Sympathie für die Verwendung von Unicode-Variablennamen

    Zwar fehlt die Fähigkeit, die Qualität des Algorithmus oder der Implementierung zu beurteilen, doch die Verwendung von Unicode in Variablennamen wird sehr positiv bewertet.

  • Lob für ein anderes Projekt von FiloSottile

    Es wird Sympathie für ein weiteres von FiloSottile entwickeltes Tool namens „age“ geäußert.

  • Teilen des Links zum NIST-FIPS-203-Dokument

    Es wird der Link zum im Artikel erwähnten NIST-FIPS-203-Dokument geteilt.