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

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

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

Дэниъл Бернштейн (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/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.

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

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/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*/clean,
  • randombit/botan (20 декември е коригиран само 1 вариант на уязвимостта),
  • rustpq/pqcrypto/pqcrypto-kyber (5 януари поправката е добавена в libsignal, но самият pqcrypto-kyber уязвимостта все още не е отстранена).

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster