Ranjivost u implementaciji post-kvantnog algoritma za šifrovanje Kyber

U implementaciji algoritma za šifriranje Kyber, koji je pobijedio u konkurenciji kriptografskih algoritama otpornih na grubu silu na kvantnom računaru, identifikovana je ranjivost koja omogućava napadima sa strane kanala da ponovo kreiraju tajne ključeve na osnovu mjerenja vremena operacija tokom dešifriranja šifrirani tekst koji je dao napadač. Problem utiče i na referentnu implementaciju mehanizma enkapsulacije ključeva CRYSTALS-Kyber KEM i na mnoge biblioteke za šifrovanje trećih strana koje podržavaju Kyber, uključujući pqcrypto biblioteku koja se koristi u signalnom messengeru.

Suština ranjivosti, koja je dobila kodni naziv KyberSlash, je u korištenju operacije podjele “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” u procesu dekodiranja poruke , u kojem dividenda sadrži tajnu vrijednost “t” tipa “double”, a djelitelj je dobro poznata javna vrijednost KYBER_Q. Problem je u tome što vrijeme operacije dijeljenja nije konstantno, a u različitim okruženjima broj CPU ciklusa koji se izvodi za podjelu ovisi o ulaznim podacima. Dakle, na osnovu promjena u vremenu rada, može se dobiti predodžbu o prirodi podataka koji se koriste u podjeli.

Daniel J. Bernstein, poznati stručnjak u oblasti kriptografije, uspio je pripremiti radnu demonstraciju dokaza da se napad može izvesti u praksi. U dva od tri sprovedena eksperimenta, prilikom pokretanja koda na ploči Raspberry Pi 2, bilo je moguće u potpunosti rekreirati privatni ključ Kyber-512 na osnovu mjerenja vremena dekodiranja podataka. Metoda se također može prilagoditi za ključeve Kyber-768 i Kyber-1024. Da bi se napad uspješno izveo, potrebno je da se šifrirani tekst koji je odredio napadač obradi koristeći isti par ključeva i da se vrijeme izvršenja operacije može precizno izmjeriti.

U nekim bibliotekama je identifikovano još jedno curenje (KyberSlash2), koje se takođe dešava zbog upotrebe tajne vrednosti prilikom podele. Razlike u odnosu na prvu opciju svode se na poziv u fazi šifriranja (u funkcijama poly_compress i polyvec_compress), a ne tokom dešifriranja. Međutim, druga opcija može biti korisna za napad samo u slučajevima kada se postupak koristi u operacijama ponovnog šifriranja u kojima se izlaz šifriranog teksta smatra povjerljivim.

Ranjivost je već ispravljena u bibliotekama:

  • zig/lib/std/crypto/kyber_d00.zig (22. decembar),
  • pq-crystals/kyber/ref (30. decembar),
  • symbolicsoft/kyber-k2so (19. decembar),
  • bljesak oblaka/krug (8. januara),
  • aws/aws-lc/crypto/kyber (4. januara),
  • liboqs/src/kem/kyber (8. januar).

Biblioteke koje u početku nisu bile pogođene ranjivosti:

  • boringsl/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.

Ranjivost ostaje neotkrivena u bibliotekama:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20. decembra je ispravljena samo 1 verzija ranjivosti),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20. decembra je ispravljena samo 1 ranjivost),
  • rustpq/pqcrypto/pqcrypto-kyber (popravka je dodata u libsignal 5. januara, ali ranjivost još nije ispravljena u samom pqcrypto-kyberu).

izvor: opennet.ru

Dodajte komentar