Kvantarvuti toorele jõule vastupidavate krüptoalgoritmide konkurentsi võitnud Kyberi krüpteerimisalgoritmi juurutamisel tuvastati haavatavus, mis võimaldab külgkanalite rünnakutel taasluua salajasi võtmeid, mis põhinevad operatsioonide aja mõõtmisel arvuti dekrüpteerimisel. ründaja pakutav šifrtekst. Probleem mõjutab nii võtmete kapseldamise mehhanismi CRYSTALS-Kyber KEM viiterakendust kui ka paljusid kolmanda osapoole Kyber-toega krüpteerimisteeke, sealhulgas signaalisõnumites kasutatavat pqcrypto teeki.
Koodinime KyberSlash saanud haavatavuse olemus seisneb jagamistehte “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” kasutamises sõnumi dekodeerimise protsessis. , milles dividend sisaldab salajast väärtust “t” tüübiga “double” ja jagajaks on üldtuntud avalik väärtus KYBER_Q. Probleem seisneb selles, et jagamise toimingu aeg ei ole konstantne ning erinevates keskkondades sõltub jagamiseks sooritatavate protsessori tsüklite arv sisendandmetest. Seega saab tööaegade muutuste põhjal aimu jagamisel kasutatavate andmete olemusest.
Tuntud krüptograafiaekspert Daniel J. Bernstein suutis ette valmistada toimiva demonstratsiooni, mis tõestas, et rünnak on praktikas teostatav. Kahes kolmest läbiviidud katsest õnnestus Raspberry Pi 2 tahvlil koodi käivitamisel Kyber-512 privaatvõti täielikult uuesti luua andmete dekodeerimise aja mõõtmise põhjal. Meetodit saab kohandada ka Kyber-768 ja Kyber-1024 võtmete jaoks. Rünnaku edukaks läbiviimiseks on vajalik, et ründaja määratud šifriteksti töödeldaks sama võtmepaari abil ning operatsiooni teostamise aega oleks võimalik täpselt mõõta.
Mõnes teegis on tuvastatud veel üks leke (KyberSlash2), mis samuti ilmneb salajase väärtuse kasutamise tõttu jagamisel. Erinevused esimesest valikust tulenevad kõnest krüptimisetapis (funktsioonides poly_compress ja polyvec_compress), mitte dekrüpteerimise ajal. Teine võimalus võib aga ründe puhul olla kasulik vaid juhtudel, kui protseduuri kasutatakse ümberkrüpteerimistoimingutes, mille puhul šifriteksti väljundit peetakse konfidentsiaalseks.
Haavatavus on järgmistes teekides juba parandatud:
- zig/lib/std/crypto/kyber_d00.zig (22. detsember),
- pq-crystals/kyber/ref (30. detsember),
- symbolicsoft/kyber-k2so (19. detsember),
- cloudflare/circl (8. jaanuar),
- aws/aws-lc/crypto/kyber (4. jaanuar),
- liboqs/src/kem/kyber (8. jaanuar).
Teegid, mida haavatavus esialgu ei mõjutanud:
- 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.
Haavatavus jääb teekides parandamata:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-tarkvara/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20. detsembril parandati haavatavusest ainult 1 versioon),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (20. detsembril parandati ainult 1 haavatavus),
- rustpq/pqcrypto/pqcrypto-kyber (5. jaanuaril lisati libsignalile parandus, kuid haavatavust pole pqcrypto-kyberis endas veel parandatud).
Allikas: opennet.ru
