Kyber-salausalgoritmin toteutuksessa, joka voitti kilpailun raakaa voimaa vastustavien salausalgoritmien kilpailussa kvanttitietokoneella, havaittiin haavoittuvuus, jonka avulla sivukanavahyökkäykset voivat luoda uudelleen salaisia avaimia, jotka perustuvat toiminta-ajan mittaamiseen salauksen purkamisen aikana. hyökkääjän toimittama salateksti. Ongelma koskee sekä CRYSTALS-Kyber KEM -avaimen kapselointimekanismin viitetoteutusta että monia kolmannen osapuolen Kyber-yhteensopivia salauskirjastoja, mukaan lukien Signal Messengerissä käytettävä pqcrypto-kirjasto.
Haavoittuvuuden, joka sai koodinimen KyberSlash, ydin on jakooperaation "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" käytössä viestin dekoodauksen yhteydessä , jossa osinko sisältää salaisen arvon "t" tyypiltään "double", ja jakajana on tunnettu julkinen arvo KYBER_Q. Ongelmana on, että jakooperaation aika ei ole vakio, ja eri ympäristöissä jakamiseen suoritettavien CPU-jaksojen määrä riippuu syötetiedoista. Toiminta-aikojen muutosten perusteella voidaan siis saada käsitys jaossa käytetyn datan luonteesta.
Daniel J. Bernstein, tunnettu kryptografian asiantuntija, pystyi laatimaan toimivan esittelyn todisteeksi siitä, että hyökkäys voidaan toteuttaa käytännössä. Kahdessa kolmesta tehdystä kokeesta, kun koodia ajettiin Raspberry Pi 2 -kortilla, Kyber-512:n yksityinen avain pystyttiin luomaan kokonaan uudelleen datan dekoodausajan mittaamisen perusteella. Menetelmää voidaan soveltaa myös Kyber-768- ja Kyber-1024-avaimiin. Hyökkäyksen onnistuminen edellyttää, että hyökkääjän määrittämä salateksti käsitellään samalla avainparilla ja että toiminnon suoritusaika voidaan mitata tarkasti.
Toinen vuoto (KyberSlash2) on tunnistettu joissakin kirjastoissa, mikä johtuu myös salaisen arvon käytöstä jakamisen yhteydessä. Erot ensimmäiseen vaihtoehtoon liittyvät kutsuun salausvaiheessa (poly_compress- ja polyvec_compress-funktioissa), eivät salauksen purkamisen aikana. Toinen vaihtoehto voi kuitenkin olla hyödyllinen hyökkäyksessä vain tapauksissa, joissa menettelyä käytetään uudelleensalausoperaatioissa, joissa salatekstin lähtöä pidetään luottamuksellisena.
Haavoittuvuus on jo korjattu kirjastoissa:
- zig/lib/std/crypto/kyber_d00.zig (22. joulukuuta),
- pq-crystals/kyber/ref (30. joulukuuta),
- symbolicsoft/kyber-k2so (19. joulukuuta),
- cloudflare/circl (8. tammikuuta),
- aws/aws-lc/crypto/kyber (4. tammikuuta),
- liboqs/src/kem/kyber (8. tammikuuta).
Kirjastot, joihin haavoittuvuus ei alun perin vaikuttanut:
- 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.
Haavoittuvuus on edelleen korjaamaton kirjastoissa:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-ohjelmisto/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskissecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20. joulukuuta vain yksi versio haavoittuvuudesta korjattiin),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (joulukuun 20. päivänä vain yksi haavoittuvuus korjattiin),
- rustpq/pqcrypto/pqcrypto-kyber (korjaus lisättiin libsignaliin 5. tammikuuta, mutta haavoittuvuutta ei ole vielä korjattu itse pqcrypto-kyberissä).
Lähde: opennet.ru
