CRYSTALS-Kyber является официальной реализацией Kyber и частью набора алгоритмов CRYSTALS (Cryptographic Suite for Algebraic Lattices). Он разработан для общего шифрования и включен в перечень алгоритмов Национального института стандартов и технологий (NIST), предназначенных для защиты от атак квантовых компьютеров.
Среди популярных проектов, использующих реализации Kyber, — VPN-сервис Mullvad и мессенджер Signal. Последний в прошлом году объявил о применении CRYSTALS-Kyber в качестве дополнительного уровня защиты коммуникаций пользователей.
Уязвимости KyberSlash связаны с тайминг-атаками, возникающими из-за способа, которым Kyber выполняет определенные операции деления в процессе раскапсуляции. Это позволяет атакующим анализировать время выполнения операций и получать секретную информацию, угрожающую шифрованию.
Если сервис, использующий Kyber, позволяет множественные запросы к одной и той же паре ключей, злоумышленник может измерить разницу во времени выполнения операций и постепенно вычислить секретный ключ.
Проблемные участки кода, связанные с уязвимостями KyberSlash (KyberSplash1 и KyberSplash2), были обнаружены исследователями Гоутамом Тамвада, Картикеяном Бхаргаваном и Франциском Кифером из компании Cryspen.
В демонстрации KyberSlash1 на системе Raspberry Pi исследователи дважды из трех попыток восстановили секретный ключ Kyber по времени дешифрования.
Аналитики Cryspen выявили уязвимость KyberSlash1 в конце ноября прошлого года и незамедлительно проинформировали разработчиков Kyber. Патч для KyberSlash1 был разработан и выпущен уже 1 декабря 2023 года.
Однако исправление не было помечено как вопрос безопасности, и только 15 декабря Cryspen начали информировать затронутые проекты о необходимости обновления.
30 декабря был выпущен патч для KyberSlash2 после его обнаружения и ответственного сообщения исследователями Парасанной Рави и Маттиасом Каннвишером.
По состоянию на 2 января 2024 года список проектов, затронутых проблемой, и статус их исправления следующий:
- pq-crystals/kyber/ref – полностью исправлен
- symbolicsoft/kyber-k2so – полностью исправлен
- aws/aws-lc/crypto/kyber, главная ветка – полностью исправлен
- zig/lib/std/crypto/kyber_d00.zig – полностью исправлен
- liboqs/src/kem/kyber – исправлен только для KyberSlash1
- aws/aws-lc/crypto/kyber, ветка fips-2022-11-02 – исправлен только для KyberSlash1
- randombit/botan – исправлен только для KyberSlash1
- mupq/pqm4/crypto_kem/kyber – исправлен только для KyberSlash1
- antontutoveanu/crystals-kyber-javascript – не исправлен
- Argyle-Software/kyber – не исправлен
- debian/src/liboqs/unstable/src/kem/kyber – не исправлен
- kudelskisecurity/crystals-go – патч еще не выпущен
- PQClean/PQClean/crypto_kem/kyber/aarch64 – не исправлен
- PQClean/PQClean/crypto_kem/kyber/clean – не исправлен
- rustpq/pqcrypto/pqcrypto-kyber (используется в Signal) – не исправлен
Также указаны библиотеки, не затронутые проблемой, поскольку они не используют деления с секретными входами.
Худший сценарий — утечка секретного ключа, но это не означает, что все проекты, использующие Kyber, уязвимы для утечки ключей.
Последствия KyberSlash зависят от реализации Kyber и могут варьироваться в зависимости от практического использования и дополнительных мер безопасности.
Например, Mullvad заявляет, что KyberSlash не влияет на их продукт VPN, так как они используют уникальные пары ключей для каждого нового туннельного соединения, что делает невозможным проведение серии тайминг-атак против одной и той же пары.