У рэалізацыі алгарытму шыфравання 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
