Sårbarhet i implementeringar av post-kvantkrypteringsalgoritmen Kyber

I implementeringen av Kyber-krypteringsalgoritmen, som vann konkurrensen mellan kryptografiska algoritmer som är resistenta mot brute force på en kvantdator, identifierades en sårbarhet som gör att sidokanalsattacker kan återskapa hemliga nycklar baserat på mätning av operationstiden under dekryptering av chiffertext tillhandahållen av angriparen. Problemet påverkar både referensimplementeringen av CRYSTALS-Kyber KEM-nyckelinkapslingsmekanismen och många tredjeparts Kyber-aktiverade krypteringsbibliotek, inklusive pqcrypto-biblioteket som används i Signal Messenger.

Kärnan i sårbarheten, som fick kodnamnet KyberSlash, ligger i användningen av divisionsoperationen "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" i processen att avkoda ett meddelande , där utdelningen innehåller det hemliga värdet "t" med typen "dubbel", och divisorn är det välkända publika värdet KYBER_Q. Problemet är att tiden för en divisionsoperation inte är konstant, och i olika miljöer beror antalet CPU-cykler som utförs för division på indata. Baserat på förändringar i drifttider kan man alltså få en uppfattning om vilken typ av data som används vid divisionen.

Daniel J. Bernstein, en välkänd expert inom kryptografiområdet, kunde förbereda en fungerande demonstration av bevis för att attacken kunde genomföras i praktiken. I två av de tre experimenten som genomfördes, när kod kördes på Raspberry Pi 2-kortet, var det möjligt att helt återskapa Kyber-512 privata nyckel baserat på mätning av dataavkodningstiden. Metoden kan även anpassas för Kyber-768 och Kyber-1024 nycklar. För att framgångsrikt genomföra en attack är det nödvändigt att chiffertexten som specificerats av angriparen bearbetas med samma nyckelpar och att exekveringstiden för operationen kan mätas exakt.

En annan läcka (KyberSlash2) har identifierats i vissa bibliotek, vilket också uppstår på grund av användningen av ett hemligt värde vid uppdelning. Skillnaderna från det första alternativet beror på samtalet i krypteringsstadiet (i funktionerna poly_compress och polyvec_compress), och inte under dekryptering. Det andra alternativet kan dock vara användbart för en attack endast i de fall då proceduren används i omkrypteringsoperationer där utmatningen av chiffertexten anses vara konfidentiell.

Sårbarheten har redan åtgärdats i följande bibliotek:

  • zig/lib/std/crypto/kyber_d00.zig (22 december),
  • pq-kristaller/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).

Bibliotek som initialt inte påverkades 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-kristaller/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Sårbarheten förblir oparpad i biblioteken:

  • antontutoveanu/kristaller-kyber-javascript,
  • Argyle-programvara/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (den 20 december åtgärdades endast en version av sårbarheten),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (den 20 december åtgärdades endast 1 sårbarhet),
  • rustpq/pqcrypto/pqcrypto-kyber (en fix lades till i libsignal den 5 januari, men sårbarheten har ännu inte åtgärdats i själva pqcrypto-kyber).

Källa: opennet.ru

Lägg en kommentar