In der Implementierung des Krypto-Algorithmus Kyber, der beim Wettbewerb um quantensichere Krypto-Algorithmen gewonnen hat, wurde eine Schwachstelle identifiziert, die Angriffe über Seitenkanäle ermöglicht, um geheime Schlüssel auf der Grundlage der Zeitmessung von Vorgängen während der Entschlüsselung des vom Angreifer bereitgestellten Chiffretextes zu rekonstruieren. Das Problem betrifft sowohl die Referenzimplementierung des Key Encapsulation Mechanismus CRYSTALS-Kyber KEM als auch viele Drittanbieter-Krypto-Bibliotheken mit Kyber-Unterstützung, einschließlich der Bibliothek pqcrypto, die im Messenger Signal verwendet wird.
Der Kern der Schwachstelle, die den Codenamen KyberSlash trägt, besteht darin, dass während des Dekodierungsprozesses die Division "t = (((t < 1) + KYBER_Q / 2) / KYBER_Q) & 1;" verwendet wird, bei der der Dividend einen geheimen Wert "t" vom Typ "double" und der Divisor den allgemein bekannten öffentlichen Wert KYBER_Q enthält. Das Problem ist, dass die Zeit für die Division keine Konstante ist und die Anzahl der für die Division ausgeführten CPU-Zyklen in verschiedenen Umgebungen von den Eingabedaten abhängt. Daher lässt sich aus der Änderung der Zeit der Operationen ableiten, welche Daten bei der Division verwendet wurden.
Daniel Bernstein, ein bekannter Experte auf dem Gebiet der Kryptografie, konnte eine funktionierende Demonstration des Angriffs in der Praxis vorbereiten. In zwei der drei durchgeführten Experimente gelang es, bei der Ausführung des Codes auf einer Raspberry Pi 2-Platine den gesamten privaten Schlüssel Kyber-512 basierend auf der Zeitmessung der Datenentschlüsselung vollständig zu rekonstruieren. Die Methode kann auch für die Schlüssel Kyber-768 und Kyber-1024 angepasst werden. Für einen erfolgreichen Angriff ist es erforderlich, dass der vom Angreifer angegebene Chiffretext mit demselben Schlüsselpaar verarbeitet wird und die Zeit der durchgeführten Operation genau gemessen werden kann.
In einigen Bibliotheken wurde eine weitere Schwachstelle (KyberSlash2) festgestellt, die ebenfalls durch die Verwendung eines geheimen Wertes bei der Durchführung von Divisionen entsteht. Die Unterschiede zur ersten Variante beziehen sich auf den Aufruf in der Verschlüsselungsphase (in den Funktionen poly_compress und polyvec_compress), nicht während der Entschlüsselung. Die zweite Variante könnte jedoch in Angriffsszenarien nützlich sein, nur wenn die Prozedur in Rekryptooperationen verwendet wird, bei denen die Ausgabe des verschlüsselten Textes als vertraulich angesehen wird.
Die Schwachstelle wurde bereits in den folgenden Bibliotheken behoben:
- zig/lib/std/crypto/kyber_d00.zig (22. Dezember),
- pq-crystals/kyber/ref (30. Dezember),
- symbolicsoft/kyber-k2so (19. Dezember),
- cloudflare/circl (8. Januar),
- aws/aws-lc/crypto/kyber (4. Januar),
- liboqs/src/kem/kyber (8. Januar).
Bibliotheken, die ursprünglich nicht von der Schwachstelle betroffen sind:
- boringssl/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-crystals/kyber/avx2,
- pqclean/crypto_kem/kyber*/avx2.
Die Schwachstelle bleibt in den folgenden Bibliotheken ungebeheiligt:
- 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 Variante der Schwachstelle behoben),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (Am 20. Dezember wurde nur eine Variante der Schwachstelle behoben),
- rustpq/pqcrypto/pqcrypto-kyber (Am 5. Januar wurde die Anpassung in libsignal hinzugefügt, aber in pqcrypto-kyber wurde die Schwachstelle noch nicht behoben).
Quelle: opennet.ru
