Ranjivost u implementacijama postkvantnog enkripcijskog algoritma Kyber

U implementaciji algoritma za šifriranje Kyber, koji je pobijedio u konkurenciji kriptografskih algoritama otpornih na brutalnu silu na kvantnom računalu, identificirana je ranjivost koja omogućuje bočnim napadima da ponovno kreiraju tajne ključeve na temelju mjerenja vremena operacija tijekom dešifriranja šifrirani tekst koji je dao napadač. Problem utječe i na referentnu implementaciju mehanizma enkapsulacije ključa CRYSTALS-Kyber KEM i na mnoge biblioteke za šifriranje koje podržava Kyber treće strane, uključujući biblioteku pqcrypto koja se koristi u Signal messengeru.

Suština ranjivosti, koja je dobila kodno ime KyberSlash, je u korištenju operacije dijeljenja “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” u procesu dekodiranja poruke. , u kojoj dividenda sadrži tajnu vrijednost “t” s tipom “double”, a djelitelj je dobro poznata javna vrijednost KYBER_Q. Problem je u tome što vrijeme operacije dijeljenja nije konstantno, au različitim okruženjima broj CPU ciklusa izvršenih za dijeljenje ovisi o ulaznim podacima. Dakle, na temelju promjena u radnim vremenima, može se dobiti ideja o prirodi podataka koji se koriste u dijeljenju.

Daniel J. Bernstein, poznati stručnjak u području kriptografije, uspio je pripremiti radnu demonstraciju dokaza da se napad može izvesti u praksi. U dva od tri provedena eksperimenta, prilikom pokretanja koda na ploči Raspberry Pi 2, bilo je moguće potpuno rekreirati privatni ključ Kyber-512 na temelju mjerenja vremena dekodiranja podataka. Metoda se također može prilagoditi za ključeve Kyber-768 i Kyber-1024. Za uspješno izvođenje napada potrebno je da se šifrirani tekst koji napadač specificira obradi istim parom ključeva i da se vrijeme izvršenja operacije može točno izmjeriti.

Još jedno curenje (KyberSlash2) je identificirano u nekim bibliotekama, što se također događa zbog korištenja tajne vrijednosti prilikom izvođenja dijeljenja. Razlike u odnosu na prvu opciju svode se na poziv u fazi enkripcije (u funkcijama poly_compress i polyvec_compress), a ne tijekom 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ć popravljena u bibliotekama:

  • zig/lib/std/crypto/kyber_d00.zig (22. prosinca),
  • pq-crystals/kyber/ref (30. prosinca),
  • symbolicsoft/kyber-k2so (19. prosinca),
  • cloudflare/circl (8. siječnja),
  • aws/aws-lc/crypto/kyber (4. siječnja),
  • liboqs/src/kem/kyber (8. siječnja).

Knjižnice koje u početku nisu pogođene ranjivošću:

  • 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-kristali/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Ranjivost ostaje nezakrpana u bibliotekama:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Softver/kyber,
  • debian/src/liboqs/nestabilan/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20. prosinca popravljena je samo 1 verzija ranjivosti),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20. prosinca popravljena je samo 1 ranjivost),
  • rustpq/pqcrypto/pqcrypto-kyber (popravak je dodan u libsignal 5. siječnja, ali ranjivost još nije popravljena u samom pqcrypto-kyberu).

Izvor: opennet.ru

Dodajte komentar