Sårbarhet i implementeringer av post-kvantekrypteringsalgoritmen Kyber

I implementeringen av Kyber-krypteringsalgoritmen, som vant konkurransen mellom kryptografiske algoritmer som er motstandsdyktige mot brute force på en kvantedatamaskin, ble det identifisert en sårbarhet som lar sidekanalangrep gjenskape hemmelige nøkler basert på måling av operasjonstiden under dekryptering av chiffertekst levert av angriperen. Problemet påvirker både referanseimplementeringen av CRYSTALS-Kyber KEM-nøkkelinnkapslingsmekanismen og mange tredjeparts Kyber-aktiverte krypteringsbiblioteker, inkludert pqcrypto-biblioteket som brukes i Signal Messenger.

Essensen av sårbarheten, som fikk kodenavnet KyberSlash, er i bruken av divisjonsoperasjonen "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" i prosessen med å dekode en melding , der utbyttet inneholder den hemmelige verdien "t" med typen "dobbel", og divisoren er den velkjente offentlige verdien KYBER_Q. Problemet er at tiden for en delingsoperasjon ikke er konstant, og i forskjellige miljøer avhenger antall CPU-sykluser som utføres for deling av inngangsdataene. Dermed kan man, basert på endringer i driftstider, få en ide om arten av dataene som brukes i divisjonen.

Daniel J. Bernstein, en kjent ekspert innen kryptografi, kunne utarbeide en fungerende demonstrasjon av bevis for at angrepet kunne gjennomføres i praksis. I to av de tre eksperimentene som ble utført, når du kjører kode på Raspberry Pi 2-kortet, var det mulig å fullstendig gjenskape Kyber-512-privatnøkkelen basert på datadekodingstidsmålinger. Metoden kan også tilpasses Kyber-768 og Kyber-1024 nøkler. For å lykkes med å utføre et angrep, er det nødvendig at chifferteksten spesifisert av angriperen behandles med det samme nøkkelparet og at utførelsestiden for operasjonen kan måles nøyaktig.

En annen lekkasje (KyberSlash2) er identifisert i noen biblioteker, som også oppstår på grunn av bruken av en hemmelig verdi ved utføring av divisjon. Forskjellene fra det første alternativet kommer ned til samtalen på krypteringsstadiet (i poly_compress- og polyvec_compress-funksjonene), og ikke under dekryptering. Imidlertid kan det andre alternativet være nyttig for et angrep bare i tilfeller der prosedyren brukes i omkrypteringsoperasjoner der utdata fra chifferteksten anses som konfidensielt.

Sårbarheten er allerede rettet i følgende biblioteker:

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

Biblioteker som i utgangspunktet ikke ble påvirket av sårbarheten:

  • 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årbarheten forblir uopprettet i bibliotekene:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-programvare/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20. desember ble bare 1 versjon av sikkerhetsproblemet fikset),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20. desember ble bare 1 sårbarhet fikset),
  • rustpq/pqcrypto/pqcrypto-kyber (en rettelse ble lagt til libsignal 5. januar, men sårbarheten er ennå ikke fikset i selve pqcrypto-kyber).

Kilde: opennet.ru

Legg til en kommentar