Kyberi krüptograafia algoritmi rakendustes, mis võitis kvantkompuutrite rünnakute vastu suunatud krüptoalgoritmide konkurss, avastati haavatavus, mis võimaldab rünnakuid külgkanalite kaudu, et taastada salajasi võtmeid, põhinedes ründaja esitatud krüpteeritud tekstide dekodeerimise operatsioonide ajamõõtmisel. Probleem mõjutab nii CRYSTALS-Kyber KEM võtmete kapseldamise mehhanismi standardset rakendust kui ka mitmeid kolmanda osapoole krüptograafia biblioteeke, sealhulgas pqcrypto teeki, mida kasutatakse signaalirakenduses.
Haavatavuse, mida kutsutakse KyberSlash'iks, sisu seisneb selles, et sõnumi dekodeerimise protsessis kasutatakse jagamise operatsiooni „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;”, kus jagatav sisaldab salajast väärtust „t” ja jagaja on avalikult teadaolev väärtus KYBER_Q. Probleem on selles, et jagamise operatsiooni aeg ei ole konstantne ning erinevates keskkondades sõltub jagamise jaoks CPU-s töötavate tsüklite arv sisendandmetest. Seega võib aja muutumise põhjal teha järeldusi jagamisel kasutatavate andmete iseloomu kohta.
Daniel Bernstein, tuntud krüptograafia ekspert, suutis ette valmistada töötava demonstratsiooni rünnaku tõenäolisusest praktikas. Kahe kolme läbi viidud eksperimendi käigus, kui kood töötati Raspberry Pi 2 platvormil, õnnestus täiesti taastada Kyber-512 eravõti, põhinedes andmete dekodeerimise aja mõõtmisel. Meetodit saab kohandada ka Kyber-768 ja Kyber-1024 võtmete jaoks. Eduka rünnaku tegemiseks on oluline, et ründaja esitatud krüpteeritud tekst töödeldakse sama võtmepaariga ja et operatsiooni täitmise aega saaks täpselt mõõta.
Mõnes raamatukogus on tuvastatud veel üks leke (KyberSlash2), mis tekib samuti salajase väärtuse kasutamisel jagamise ajal. Erood on peamiselt erinev krüpteerimise etapis (funktsioonides poly_compress ja polyvec_compress), mitte dekrüpteerimise ajal. Teisel variandil võib olla kasu ainult rünnakute puhul, kus kasutatakse korduva krüpteerimise protseduuri, kus salajase teksti väljund loetakse konfidentsiaalseks.
Haavatavus on juba lahendatud järgnevates raamatukogudes:
- 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).
Raamatukogud, mis algselt ei olnud haavatavad:
- 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 parandamata järgnevates raamatukogudes:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-Software/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20. detsember parandus ainult ühe haavatavuse variandi kohta),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (20. detsember parandus ainult ühe haavatavuse variandi kohta),
- rustpq/pqcrypto/pqcrypto-kyber (5. jaanuar parandus lisatud libsignal, kuid pqcrypto-kyber ise jääb haavatavaks).
Allikas: opennet.ru
