Ievainojamība pēckvantu šifrēšanas algoritma Kyber ieviešanā

Ieviešot Kyber šifrēšanas algoritmu, kas uzvarēja kriptogrāfijas algoritmu konkurencē pret brutālu spēku kvantu datorā, tika konstatēta ievainojamība, kas ļauj sānu kanālu uzbrukumiem atjaunot slepenās atslēgas, pamatojoties uz operāciju laika mērīšanu atšifrēšanas laikā. uzbrucēja nodrošinātais šifrētais teksts. Problēma skar gan CRYSTALS-Kyber KEM atslēgu iekapsulēšanas mehānisma atsauces ieviešanu, gan daudzas trešās puses Kyber iespējotas šifrēšanas bibliotēkas, tostarp pqcrypto bibliotēku, ko izmanto Signal Messenger.

Ievainojamības, kas saņēma koda nosaukumu KyberSlash, būtība ir dalīšanas operācijas “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” izmantošana ziņojuma atšifrēšanas procesā. , kurā dividende satur slepeno vērtību “t” ar veidu “double”, un dalītājs ir labi zināmā publiskā vērtība KYBER_Q. Problēma ir tā, ka dalīšanas darbības laiks nav nemainīgs, un dažādās vidēs sadalīšanai veikto CPU ciklu skaits ir atkarīgs no ievades datiem. Tādējādi, pamatojoties uz izmaiņām darbības laikos, var gūt priekšstatu par sadalē izmantoto datu būtību.

Daniels J. Bernsteins, pazīstams eksperts kriptogrāfijas jomā, spēja sagatavot darba demonstrāciju, kas pierādīja, ka uzbrukums var tikt veikts praksē. Divos no trim veiktajiem eksperimentiem, palaižot kodu uz Raspberry Pi 2 plates, bija iespējams pilnībā atjaunot Kyber-512 privāto atslēgu, pamatojoties uz datu dekodēšanas laika mērīšanu. Metodi var pielāgot arī Kyber-768 un Kyber-1024 atslēgām. Lai veiksmīgi veiktu uzbrukumu, ir nepieciešams, lai uzbrucēja norādītais šifrētais teksts tiktu apstrādāts, izmantojot vienu un to pašu atslēgu pāri, un lai varētu precīzi izmērīt operācijas izpildes laiku.

Dažās bibliotēkās ir konstatēta vēl viena noplūde (KyberSlash2), kas arī notiek tāpēc, ka, veicot sadalīšanu, tiek izmantota slepena vērtība. Atšķirības no pirmās opcijas ir saistītas ar zvanu šifrēšanas stadijā (funkcijās poly_compress un polyvec_compress), nevis atšifrēšanas laikā. Tomēr otrā iespēja var būt noderīga uzbrukumam tikai gadījumos, kad procedūra tiek izmantota atkārtotas šifrēšanas darbībās, kurās šifrētā teksta izvade tiek uzskatīta par konfidenciālu.

Ievainojamība jau ir novērsta bibliotēkās:

  • zig/lib/std/crypto/kyber_d00.zig (22. decembris),
  • pq-crystals/kyber/ref (30. decembris),
  • symbolicsoft/kyber-k2so (19. decembris),
  • mākoņu uzliesmojums/aplis (8. janvāris),
  • aws/aws-lc/crypto/kyber (4. janvāris),
  • liboqs/src/kem/kyber (8. janvāris).

Bibliotēkas, kuras sākotnēji neskāra ievainojamība:

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

Bibliotēkās ievainojamība joprojām nav novērsta:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle programmatūra/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskissecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20. decembrī tika novērsta tikai viena ievainojamības versija),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20. decembrī tika novērsta tikai 1 ievainojamība),
  • rustpq/pqcrypto/pqcrypto-kyber (labojums tika pievienots libsignal 5. janvārī, taču ievainojamība vēl nav novērsta pašā pqcrypto-kyber).

Avots: opennet.ru

Pievieno komentāru