Kwetsbaarheid in implementaties van het post-kwantumversleutelingsalgoritme Kyber

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 delingsoperatie “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” tijdens het decoderen van een bericht , waarbij het deeltal de geheime waarde “t” bevat met type “double”, en de deler de bekende publieke waarde KYBER_Q is. Het probleem is dat de tijd van een delingsoperatie niet constant is, en dat in verschillende omgevingen het aantal CPU-cycli dat wordt uitgevoerd voor deling afhankelijk is van de invoergegevens. Op basis van veranderingen in de bedrijfstijden kan men dus een idee krijgen van de aard van de gegevens die bij de deling worden gebruikt.

Daniel J. Bernstein, een bekende expert op het gebied van cryptografie, kon een werkende demonstratie voorbereiden van bewijs dat de aanval in de praktijk kon worden uitgevoerd. In twee van de drie uitgevoerde experimenten was het bij het uitvoeren van code op het Raspberry Pi 2-bord mogelijk om de Kyber-512-privésleutel volledig opnieuw te creëren op basis van het meten van de gegevensdecoderingstijd. De methode kan ook worden aangepast voor Kyber-768- en Kyber-1024-sleutels. Om een ​​aanval succesvol uit te kunnen voeren, is het noodzakelijk dat de door de aanvaller opgegeven cijfertekst met hetzelfde sleutelpaar wordt verwerkt en dat de uitvoeringstijd van de operatie nauwkeurig kan worden gemeten.

In sommige bibliotheken is een ander lek (KyberSlash2) geïdentificeerd, dat ook optreedt als gevolg van het gebruik van een geheime waarde bij het uitvoeren van deling. De verschillen met de eerste optie komen neer op de aanroep in de coderingsfase (in de functies poly_compress en polyvec_compress), en niet tijdens de decodering. De tweede optie kan echter alleen nuttig zijn voor een aanval in gevallen waarin de procedure wordt gebruikt bij hercoderingsoperaties waarbij de uitvoer van de cijfertekst 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

Voeg een reactie