Sårbarhed i implementeringer af post-kvantekrypteringsalgoritmen Kyber

I implementeringen af ​​Kyber-krypteringsalgoritmen, som vandt konkurrencen mellem kryptografiske algoritmer, der er resistente over for brute force på en kvantecomputer, blev der identificeret en sårbarhed, der gør det muligt for sidekanalangreb at genskabe hemmelige nøgler baseret på måling af driftstiden under dekryptering af chiffertekst leveret af angriberen. Problemet påvirker både referenceimplementeringen af ​​CRYSTALS-Kyber KEM-nøgleindkapslingsmekanismen og mange tredjeparts Kyber-aktiverede krypteringsbiblioteker, inklusive pqcrypto-biblioteket, der bruges i Signal Messenger.

Essensen af ​​sårbarheden, som modtog kodenavnet KyberSlash, er i brugen af ​​divisionsoperationen "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" i processen med at afkode en besked , hvor dividenden indeholder den hemmelige værdi "t" med typen "double", og divisoren er den velkendte offentlige værdi KYBER_Q. Problemet er, at tidspunktet for en divisionsoperation ikke er konstant, og i forskellige miljøer afhænger antallet af CPU-cyklusser, der udføres til division, af inputdataene. På baggrund af ændringer i driftstider kan man således få en idé om arten af ​​de data, der bruges i divisionen.

Daniel J. Bernstein, en kendt ekspert inden for kryptografi, var i stand til at forberede en fungerende demonstration af bevis for, at angrebet kunne udføres i praksis. I to af de tre udførte eksperimenter, når man kører kode på Raspberry Pi 2-kortet, var det muligt fuldstændigt at genskabe den private Kyber-512-nøgle baseret på måling af dataafkodningstiden. Metoden kan også tilpasses til Kyber-768 og Kyber-1024 nøgler. For at kunne udføre et angreb med succes er det nødvendigt, at den chiffertekst, der er angivet af angriberen, behandles med det samme nøglepar, og at udførelsestiden for operationen kan måles nøjagtigt.

En anden lækage (KyberSlash2) er blevet identificeret i nogle biblioteker, som også opstår på grund af brugen af ​​en hemmelig værdi ved udførelse af division. Forskellene fra den første mulighed kommer ned til opkaldet på krypteringsstadiet (i poly_compress og polyvec_compress funktionerne), og ikke under dekryptering. Den anden mulighed kan dog kun være nyttig til et angreb i tilfælde, hvor proceduren bruges i genkrypteringsoperationer, hvor outputtet af chifferteksten betragtes som fortroligt.

Sårbarheden er allerede rettet i bibliotekerne:

  • zig/lib/std/crypto/kyber_d00.zig (22. december),
  • pq-krystaller/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 ikke oprindeligt var påvirket af sårbarheden:

  • 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-krystaller/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Sårbarheden forbliver upatchet 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 version af sårbarheden rettet),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (den 20. december blev kun 1 sårbarhed rettet),
  • rustpq/pqcrypto/pqcrypto-kyber (en rettelse blev tilføjet til libsignal den 5. januar, men sårbarheden er endnu ikke rettet i selve pqcrypto-kyber).

Kilde: opennet.ru

Tilføj en kommentar