Sicherheitslücke in Implementierungen des Post-Quanten-Verschlüsselungsalgorithmus Kyber

Bei der Implementierung des Kyber-Verschlüsselungsalgorithmus, der den Wettbewerb der gegen Brute Force resistenten kryptografischen Algorithmen auf einem Quantencomputer gewann, wurde eine Schwachstelle identifiziert, die es Seitenkanalangriffen ermöglicht, geheime Schlüssel auf der Grundlage der Messung der Operationszeit während der Entschlüsselung wiederherzustellen Vom Angreifer bereitgestellter Chiffretext. Das Problem betrifft sowohl die Referenzimplementierung des Schlüsselkapselungsmechanismus CRYSTALS-Kyber KEM als auch viele Kyber-fähige Verschlüsselungsbibliotheken von Drittanbietern, einschließlich der im Signal Messenger verwendeten pqcrypto-Bibliothek.

Der Kern der Schwachstelle, die den Codenamen KyberSlash erhielt, liegt in der Verwendung der Divisionsoperation „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;“ beim Dekodieren einer Nachricht , wobei der Dividend den geheimen Wert „t“ vom Typ „double“ enthält und der Divisor der bekannte öffentliche Wert KYBER_Q ist. Das Problem besteht darin, dass die Zeit einer Divisionsoperation nicht konstant ist und in verschiedenen Umgebungen die Anzahl der für die Division durchgeführten CPU-Zyklen von den Eingabedaten abhängt. So kann man sich anhand von Änderungen der Betriebszeiten ein Bild von der Art der bei der Division verwendeten Daten machen.

Daniel J. Bernstein, ein bekannter Experte auf dem Gebiet der Kryptographie, konnte einen funktionierenden Beweis dafür erbringen, dass der Angriff in der Praxis durchgeführt werden konnte. In zwei der drei durchgeführten Experimente war es beim Ausführen von Code auf dem Raspberry Pi 2-Board möglich, den privaten Kyber-512-Schlüssel basierend auf der Messung der Datendekodierungszeit vollständig wiederherzustellen. Die Methode kann auch für Kyber-768- und Kyber-1024-Schlüssel angepasst werden. Um einen Angriff erfolgreich durchzuführen, ist es erforderlich, dass der vom Angreifer angegebene Chiffretext mit demselben Schlüsselpaar verarbeitet wird und die Ausführungszeit der Operation genau gemessen werden kann.

In einigen Bibliotheken wurde ein weiteres Leck (KyberSlash2) identifiziert, das ebenfalls auf die Verwendung eines geheimen Werts bei der Division zurückzuführen ist. Die Unterschiede zur ersten Option liegen im Aufruf in der Verschlüsselungsphase (in den Funktionen poly_compress und polyvec_compress) und nicht während der Entschlüsselung. Allerdings kann die zweite Option für einen Angriff nur dann sinnvoll sein, wenn das Verfahren bei Umverschlüsselungsvorgängen eingesetzt wird, bei denen die Ausgabe des Chiffretexts als vertraulich gilt.

Die Schwachstelle wurde in den Bibliotheken bereits behoben:

  • zig/lib/std/crypto/kyber_d00.zig (22. Dezember),
  • pq-crystals/kyber/ref (30. Dezember),
  • symbolicsoft/kyber-k2so (19. Dezember),
  • Wolkenflare/Kreis (8. Januar),
  • aws/aws-lc/crypto/kyber (4. Januar),
  • liboqs/src/kem/kyber (8. Januar).

Bibliotheken, die zunächst nicht von der Sicherheitslücke betroffen sind:

  • langweiligssl/crypto/kyber,
  • filippo.io/mlkem768,
  • formosa-crypto/libjade/tree/main/src/crypto_kem,
  • kyber/common/amd64/avx2,
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-kristalle/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Die Schwachstelle bleibt in den Bibliotheken ungepatcht:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (Am 20. Dezember wurde nur eine Version der Schwachstelle behoben),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (Am 20. Dezember wurde nur 1 Schwachstelle behoben),
  • rustpq/pqcrypto/pqcrypto-kyber (am 5. Januar wurde ein Fix zu libsignal hinzugefügt, aber die Schwachstelle wurde in pqcrypto-kyber selbst noch nicht behoben).

Source: opennet.ru

Kommentar hinzufügen