Kwetsbaarheid in de implementaties van het post-kwantum encryptie-algoritme Kyber

In de implementatie van het encryptie-algoritme Kyber, dat de wedstrijd voor kwantumveilige cryptografische algoritmen heeft gewonnen, is een kwetsbaarheid ontdekt die aanvalt via zijkanalen mogelijk maakt om geheime sleutels te reconstrueren op basis van het meten van de tijd van operaties tijdens het decoderen van de door de aanvaller verstrekte ciphertext. Dit probleem betreft zowel de referentie-implementatie van het CRYSTALS-Kyber KEM sleutelincapsulatiemechanisme als veel externe encryptiebibliotheken die Kyber ondersteunen, waaronder de pqcrypto-bibliotheek die in de messenger Signal wordt gebruikt.

De kern van de kwetsbaarheid, die de codenaam KyberSlash heeft gekregen, ligt in het gebruik tijdens het decoderen van een bericht van de delingsoperatie "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;", waarbij de deler een geheim waarde "t" van het type "double" bevat, en de deler een algemeen bekend publiek waarde KYBER_Q is. Het probleem is dat de tijd van de delingsoperatie geen constante is en het aantal CPU-cycli dat voor de deling wordt uitgevoerd, afhankelijk is van de invoergegevens in verschillende omgevingen. Op basis van de variatie in de tijd van operaties kan dus een idee worden verkregen over de aard van de gegevens die bij de deling worden gebruikt.

Daniel Bernstein, een bekende expert op het gebied van cryptografie, heeft een werkende demonstratie voorbereid waarin de praktische mogelijkheid van de aanval wordt bewezen. In twee van de drie uitgevoerde experimenten, uitgevoerd op een Raspberry Pi 2, was het mogelijk om de geheime sleutel Kyber-512 volledig te reconstrueren op basis van het meten van de tijd voor het decoderen van gegevens. De methode kan ook worden aangepast voor de sleutels Kyber-768 en Kyber-1024. Voor een succesvolle uitvoering van de aanval is het noodzakelijk dat de door de aanvaller opgegeven ciphertext wordt verwerkt met dezelfde sleutelparen en dat de tijd voor de uitvoering van de operatie nauwkeurig kan worden gemeten.

In sommige bibliotheken is er een andere lek (KyberSlash2) ontdekt, die ook voortkomt uit het gebruik van een geheim waarde tijdens de deling. De verschillen ten opzichte van de eerste versie liggen in de oproep tijdens de versleuteling (in de functies poly_compress en polyvec_compress), en niet tijdens de decryptie. De tweede variant kan echter nuttig zijn voor een aanval, alleen in gevallen waar de procedure wordt gebruikt in herhaalde versleuteling, waarbij de uitvoer van de versleutelde tekst als vertrouwelijk wordt beschouwd.

De kwetsbaarheid is al verholpen 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 oorspronkelijk niet kwetsbaar waren:

  • 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.

De kwetsbaarheid blijft onopgelost in de bibliotheken:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20 december is alleen 1 variant van de kwetsbaarheid verholpen),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20 december is alleen 1 variant van de kwetsbaarheid verholpen),
  • rustpq/pqcrypto/pqcrypto-kyber (5 januari is de fix toegevoegd in libsignal, maar in de pqcrypto-kyber zelf is de kwetsbaarheid nog niet verholpen).

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster