I implementeringen av Kyber, en krypteringsalgoritm som vann tÀvlingen om kvantmotstÄndskraftiga kryptografier, har en sÄrbarhet upptÀckts som möjliggör attacker genom externa kanaler för Äterskapande av hemliga nycklar baserat pÄ tidsmÀtningar av operationer under avkodning av den krypterade text som tillhandahÄlls av angriparen. Problemet pÄverkar bÄde den referensimplementering av nyckelinpackningsmekanismen CRYSTALS-Kyber KEM och mÄnga tredjeparts kryptografibibliotek med stöd för Kyber, inklusive biblioteket pqcrypto som anvÀnds i meddelandeprogrammet Signal.
SÄrbarhetens kÀrna, som har kodnamnet KyberSlash, ligger i anvÀndningen av delningsoperationen "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" under avkodning av meddelandet, dÀr t innehÄller ett hemligt vÀrde av typen "double" och divisorn Àr det allmÀnt kÀnda publika vÀrdet KYBER_Q. Problemet Àr att tiden för delningsoperationen inte Àr konstant och antalet CPU-cykler som utförs för delningen beror pÄ ingÄngsvÀrdena i olika miljöer. DÀrför kan man, baserat pÄ variationerna i operationstider, fÄ en uppfattning om datan som anvÀnds under delningen.
Daniel Bernstein, en erkÀnd expert inom kryptografi, lyckades förbereda en fungerande demonstration av möjligheten att genomföra en attack i praktiken. I tvÄ av tre genomförda experiment, nÀr koden kördes pÄ ett Raspberry Pi 2, lyckades man helt Äterskapa den hemliga nyckeln Kyber-512 baserat pÄ tidsmÀtningar av datadekodning. Metoden kan ocksÄ anpassas för nycklarna Kyber-768 och Kyber-1024. För att lyckas med attacken krÀvs att den krypterade texten som angriparen stÀller in behandlas med samma nyckelpar och att man kan mÀta utförandetiden exakt.
I vissa bibliotek har ytterligare en lÀcka identifierats (KyberSlash2), som ocksÄ uppstÄr pÄ grund av anvÀndning av ett hemligt vÀrde vid division. Skillnaderna frÄn den första varianten handlar om anrop vid kryptering (i funktionerna poly_compress och polyvec_compress), och inte vid dekryptering. Den andra varianten kan dock visa sig vara anvÀndbar för attacker endast i fall nÀr proceduren anvÀnds i operationer för Äterkryptering dÀr utdata av den krypterade texten betraktas som konfidentiell.
SÄrbarheten har redan ÄtgÀrdats i biblioteken:
- 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).
Bibliotek som ursprungligen inte var utsatta för 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-crystals/kyber/avx2,
- pqclean/crypto_kem/kyber*/avx2.
SÄrbarheten förblir oÄtgÀrdad i biblioteken:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-Software/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20 december ÄtgÀrdades endast 1 variant av sÄrbarheten),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (20 december ÄtgÀrdades endast 1 variant av sÄrbarheten),
- rustpq/pqcrypto/pqcrypto-kyber (5 januari fix lades till i libsignal, men i sjÀlva pqcrypto-kyber Àr sÄrbarheten hittills inte ÄtgÀrdad).
KĂ€lla: opennet.ru
