Уязвимост в имплементациите на постквантовия алгоритъм за криптиране Kyber

При внедряването на алгоритъма за криптиране Kyber, който спечели състезанието на криптографски алгоритми, устойчиви на груба сила на квантов компютър, беше идентифицирана уязвимост, която позволява атаки от страничен канал да пресъздадат секретни ключове въз основа на измерване на времето на операции по време на декриптиране на шифрован текст, предоставен от нападателя. Проблемът засяга както референтната реализация на механизма за капсулиране на ключ CRYSTALS-Kyber KEM, така и много библиотеки за шифроване на трети страни, активирани от Kyber, включително библиотеката pqcrypto, използвана в месинджъра на Signal.

Същността на уязвимостта, която получи кодовото име KyberSlash, е в използването на операцията за разделяне „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;“ в процеса на декодиране на съобщение , в който дивидентът съдържа тайната стойност “t” с тип “double”, а делителят е добре познатата публична стойност KYBER_Q. Проблемът е, че времето на операцията за разделяне не е постоянно и в различни среди броят на процесорните цикли, извършени за разделяне, зависи от входните данни. По този начин, въз основа на промените в работните времена, може да се получи представа за естеството на данните, използвани при разделяне.

Daniel J. Bernstein, известен експерт в областта на криптографията, успя да подготви работна демонстрация на доказателство, че атаката може да бъде извършена на практика. В два от трите проведени експеримента, когато се изпълнява код на платката Raspberry Pi 2, беше възможно напълно да се пресъздаде частният ключ Kyber-512 въз основа на измерване на времето за декодиране на данни. Методът може да се адаптира и за ключове Kyber-768 и Kyber-1024. За успешното извършване на атака е необходимо посоченият от атакуващия шифрован текст да бъде обработен с помощта на същата двойка ключове и времето за изпълнение на операцията да може да бъде точно измерено.

Друго изтичане (KyberSlash2) е идентифицирано в някои библиотеки, което също възниква поради използването на секретна стойност при извършване на разделяне. Разликите от първата опция се свеждат до извикването на етапа на криптиране (във функциите poly_compress и polyvec_compress), а не по време на декриптирането. Втората опция обаче може да бъде полезна за атака само в случаите, когато процедурата се използва в операции за повторно криптиране, при които изходът на шифрования текст се счита за поверителен.

Уязвимостта вече е коригирана в библиотеките:

  • zig/lib/std/crypto/kyber_d00.zig (22 декември),
  • pq-crystals/kyber/ref (30 декември),
  • symbolicsoft/kyber-k2so (19 декември),
  • cloudflare/circl (8 януари),
  • aws/aws-lc/crypto/kyber (4 януари),
  • liboqs/src/kem/kyber (8 януари).

Библиотеки, които първоначално не са засегнати от уязвимостта:

  • boringssl/крипто/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-кристали/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Уязвимостта остава неотстранена в библиотеките:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-софтуер/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (На 20 декември беше коригирана само 1 версия на уязвимостта),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/чисто,
  • randombit/botan (на 20 декември беше коригирана само 1 уязвимост),
  • rustpq/pqcrypto/pqcrypto-kyber (корекция беше добавена към libsignal на 5 януари, но уязвимостта все още не е коригирана в самия pqcrypto-kyber).

Източник: opennet.ru

Добавяне на нов коментар