Diegiant „Kyber“ šifravimo algoritmą, kuris laimėjo kriptografinių algoritmų, atsparių žiauriai jėgai kvantiniame kompiuteryje, konkursą, buvo nustatytas pažeidžiamumas, leidžiantis šoninio kanalo atakoms atkurti slaptus raktus, remiantis operacijų laiko matavimu iššifruojant šifruotas tekstas, kurį pateikė užpuolikas. Problema turi įtakos ir pamatiniam CRYSTALS-Kyber KEM raktų inkapsuliavimo mechanizmo įgyvendinimui, ir daugeliui trečiųjų šalių Kyber įgalintų šifravimo bibliotekų, įskaitant pqcrypto biblioteką, naudojamą signalo pasiuntinyje.
Pažeidžiamumo, gavusio kodinį pavadinimą KyberSlash, esmė yra padalijimo operacijos „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;“ naudojimas dekoduojant pranešimą , kuriame dividende yra slaptoji reikšmė „t“ su tipu „double“, o daliklis yra gerai žinoma viešoji reikšmė KYBER_Q. Problema ta, kad padalijimo operacijos laikas nėra pastovus, o skirtingose aplinkose dalijimui atliekamų procesoriaus ciklų skaičius priklauso nuo įvesties duomenų. Taigi, remiantis veikimo laiko pasikeitimais, galima susidaryti supratimą apie skirstant naudojamų duomenų pobūdį.
Danielis J. Bernsteinas, žinomas kriptografijos srities ekspertas, sugebėjo parengti darbingą demonstraciją, įrodančią, kad ataka gali būti įvykdyta praktiškai. Dviejuose iš trijų atliktų eksperimentų, paleidžiant kodą Raspberry Pi 2 plokštėje, buvo galima visiškai atkurti Kyber-512 privatų raktą, remiantis duomenų dekodavimo laiko matavimu. Metodas taip pat gali būti pritaikytas Kyber-768 ir Kyber-1024 raktams. Norint sėkmingai įvykdyti ataką, būtina, kad užpuoliko nurodytas šifruotas tekstas būtų apdorotas naudojant tą pačią raktų porą ir būtų galima tiksliai išmatuoti operacijos vykdymo laiką.
Kai kuriose bibliotekose buvo nustatytas dar vienas nutekėjimas (KyberSlash2), kuris taip pat atsiranda dėl slaptos reikšmės naudojimo atliekant skaidymą. Skirtumai nuo pirmosios parinkties kyla dėl skambučio šifravimo etape (funkcijose poly_compress ir polyvec_compress), o ne iššifruojant. Tačiau antroji parinktis gali būti naudinga atakai tik tais atvejais, kai procedūra naudojama pakartotinio šifravimo operacijose, kurių metu šifruoto teksto išvestis laikoma konfidencialia.
Pažeidžiamumas jau ištaisytas bibliotekose:
- zig/lib/std/crypto/kyber_d00.zig (gruodžio 22 d.),
- pq-crystals/kyber/ref (gruodžio 30 d.),
- symbolicsoft/kyber-k2so (gruodžio 19 d.),
- debesų pliūpsnis / ratas (sausio 8 d.),
- aws/aws-lc/crypto/kyber (sausio 4 d.),
- liboqs/src/kem/kyber (sausio 8 d.).
Bibliotekos, kurių iš pradžių nepaveikė pažeidžiamumas:
- 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.
Pažeidžiamumas lieka nepataisytas bibliotekose:
- antontutoveanu/crystals-kyber-javascript,
- Argyle programinė įranga / kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskissecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (Gruodžio 20 d. buvo ištaisyta tik 1 pažeidžiamumo versija),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (gruodžio 20 d. buvo ištaisytas tik 1 pažeidžiamumas),
- rustpq/pqcrypto/pqcrypto-kyber (sausio 5 d. „libsignal“ buvo pataisyta, tačiau pažeidžiamumas dar nepataisytas pačiame pqcrypto-kyber).
Šaltinis: opennet.ru
