Bij de implementatie van het Kyber-encryptie-algoritme, dat de concurrentie won van cryptografische algoritmen die bestand zijn tegen brute kracht op een kwantumcomputer, werd een kwetsbaarheid geïdentificeerd die het mogelijk maakt dat side-channel-aanvallen geheime sleutels kunnen recreëren op basis van het meten van de bewerkingstijd tijdens het decoderen van de data. cijfertekst verstrekt door de aanvaller. Het probleem is van invloed op zowel de referentie-implementatie van het CRYSTALS-Kyber KEM-sleutelinkapselingsmechanisme als op veel door Kyber ingeschakelde encryptiebibliotheken van derden, waaronder de pqcrypto-bibliotheek die in de Signal-messenger wordt gebruikt.
De essentie van de kwetsbaarheid, die de codenaam KyberSlash heeft gekregen, ligt in het gebruik van de delingsbewerking “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” in het proces van het decoderen van het bericht, waarin het deeltal de geheime waarde "t" van het type "dubbel" bevat, en de deler de bekende openbare waarde KYBER_Q is. Het probleem is dat de tijd van de delingsbewerking niet constant is en dat het aantal CPU-cycli dat voor de deling wordt uitgevoerd in verschillende omgevingen afhankelijk is van de invoergegevens. Zo kan men op basis van de verandering in de bewerkingstijd een idee krijgen van de aard van de gegevens die bij de deling worden gebruikt.
Daniel J. Bernstein, een gerenommeerd expert op het gebied van cryptografie, is erin geslaagd een werkende demonstratie te leveren van het proof of concept van de aanval. Bij twee van de drie uitgevoerde experimenten, waarbij de code werd uitgevoerd op een Raspberry Pi 2-bord, was het mogelijk om de Kyber-512-privésleutel volledig opnieuw te creëren op basis van de metingen van de decoderingstijd van de gegevens. De methode kan ook worden aangepast voor Kyber-768 en Kyber-1024 sleutels. Voor een succesvolle aanval is het noodzakelijk dat de door de aanvaller verstrekte cijfertekst met hetzelfde sleutelpaar wordt verwerkt en dat de uitvoeringstijd van de bewerking nauwkeurig kan worden gemeten.
Er is nog een lek (KyberSlash2) ontdekt in sommige bibliotheken, dat ook ontstaat door het gebruik van een geheime waarde bij het uitvoeren van deling. Het verschil met de eerste optie zit hem in de aanroep tijdens de encryptiefase (in de functies poly_compress en polyvec_compress), en niet tijdens de decryptiefase. De tweede optie is echter mogelijk alleen bruikbaar voor aanvallen waarbij de procedure wordt gebruikt bij hercoderingsoperaties, waarbij de uitvoer van de gecodeerde tekst als vertrouwelijk wordt beschouwd.
De kwetsbaarheid is al opgelost in de bibliotheken:
- zig/lib/std/crypto/kyber_d00.zig (22 december),
- pq-crystals/kyber/ref (30 december),
- symbolicsoft/kyber-k2so (19 december),
- cloudflare/circl (8 januari),
- aws/aws-lc/crypto/kyber (4 januari),
- liboqs/src/kem/kyber (8 januari).
Bibliotheken die in eerste instantie niet door het beveiligingslek zijn getroffen:
- saaissl/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-kristallen/kyber/avx2,
- pqclean/crypto_kem/kyber*/avx2.
De kwetsbaarheid blijft ongepatcht in de bibliotheken:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-Software/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/kristallen-go,
- mupq/pqm4/crypto_kem/kyber* (Op 20 december werd slechts 1 versie van de kwetsbaarheid verholpen),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (op 20 december werd slechts 1 kwetsbaarheid verholpen),
- rustpq/pqcrypto/pqcrypto-kyber (op 5 januari is een oplossing aan libsignal toegevoegd, maar de kwetsbaarheid is nog niet opgelost in pqcrypto-kyber zelf).
Bron: opennet.ru
