Sårbarhed i implementeringer af den post-kvantiske krypteringsalgoritme Kyber

I implementeringen af krypteringsalgoritmen Kyber, der vandt konkurrencen om kvantesikre kryptografiske algoritmer, er der blevet identificeret en sårbarhed, der muliggør angreb via sidekanaler for at genskabe hemmelige nøgler baseret på måling af operationernes tidsforbrug under dekrypteringen af den angivne krypterede tekst. Problemet berører både den referenceimplementering af nøglenkapslingsmekanismen CRYSTALS-Kyber KEM og mange tredjeparts kryptografibiblioteker med støtte for Kyber, herunder biblioteket pqcrypto, der anvendes i messaging-applikationen Signal.

Essensen af sårbarheden, der har fået kodeordet KyberSlash, ligger i brugen af divisionsoperationen under dekodningen af beskeden: «t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;», hvor nævneren indeholder den hemmelige værdi «t» af typen «double», og nævneren er den offentligt kendte værdi KYBER_Q. Problemet er, at tiden for divisionsoperationen ikke er konstant og, afhængig af miljøet, varierer antallet af CPU-cyklusser, der udføres for divisionen, baseret på inputdataene. På den måde kan man udlede oplysninger om karakteren af de data, der anvendes i divisionen, baseret på ændringer i operationstiden.

Daniel Bernstein, en anerkendt ekspert inden for kryptografi, har formået at forberede en fungerende demonstration af muligheden for at udføre et angreb i praksis. I to ud af tre gennemførte eksperimenter, hvor koden blev udført på et Raspberry Pi 2, lykkedes det fuldstændig at genskabe den hemmelige nøgle Kyber-512 baseret på måling af dekrypteringsdatatid. Metoden kan også tilpasses til nøglerne Kyber-768 og Kyber-1024. For at angrebet skal lykkes, er det nødvendigt, at den angivne krypterede tekst behandles med den samme nøglepar og at tiden for operationen kan måles præcist.

I nogle biblioteker er der opdaget endnu et læk (KyberSlash2), som også opstår på grund af brugen af et hemmeligt værdi ved udførelse af division. Forskellene fra den første variant er begrænset til opkaldet under krypteringsfasen (i funktionerne poly_compress og polyvec_compress), og ikke under dekryptering. Den anden variant kan dog være nyttig for angreb kun i tilfælde af, at proceduren bruges i operationer med gensidig kryptering, hvor outputtet af det krypterede tekst anses for at være fortroligt.

Sårbarheden er allerede blevet rettet i bibliotekerne:

  • zig/lib/std/crypto/kyber_d00.zig (22. december),
  • pq-crystals/kyber/ref (30. december),
  • symbolicsoft/kyber-k2so (19. december),
  • cloudflare/circl (8. januar),
  • aws/aws-lc/crypto/kyber (4. januar),
  • liboqs/src/kem/kyber (8. januar).

Biblioteker, der oprindeligt ikke var udsat for sårbarhed:

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

Sårbarheden forbliver uoprettet i bibliotekerne:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (den 20. december blev kun 1 variant af sårbarheden rettet),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (den 20. december blev kun 1 variant af sårbarheden rettet),
  • rustpq/pqcrypto/pqcrypto-kyber (5. januar er rettelsen tilføjet til libsignal, men i selve pqcrypto-kyber er sårbarheden stadig ikke rettet).

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster