ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber
Подробно изучите механизм инкапсуляции ключей ML-KEM, наборы параметров и особенности реализации.
«ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Что стандартизирует ML-KEM
ML-KEM (механизм инкапсуляции ключей на основе модульных решёток), стандартизированный в августе 2024 года как FIPS 203, является постквантовой заменой обмену ключами Diffie-Hellman и RSA. Он инкапсулирует симметричный ключ с использованием открытого ключа, создавая общий секрет, который обе стороны могут использовать для симметричного шифрования. ML-KEM основан на CRYSTALS-Kyber и содержит небольшие изменения, упрощающие спецификацию.
Наборы параметров ML-KEM
ML-KEM определяет три набора параметров. ML-KEM-512 обеспечивает примерно 128-битовую классическую и 100-битовую постквантовую стойкость, используя открытый ключ размером 800 байт и шифротекст размером 768 байт. ML-KEM-768 обеспечивает 192-битовую классическую стойкость (открытый ключ — 1184 байта, шифротекст — 1088 байт). ML-KEM-1024 обеспечивает 256-битовую классическую стойкость (открытый ключ — 1568 байт, шифротекст — 1568 байт). NIST рекомендует ML-KEM-768 для большинства приложений.
Генерация ключей в ML-KEM
Генерация ключей ML-KEM выполняется следующим образом: случайная матрица A выбирается на основе начального значения с помощью SHAKE-128, затем выбираются небольшой секретный вектор s и вектор ошибок e, после чего вычисляется t = As + e mod q. Открытый ключ — это (начальное значение, t), а закрытый ключ — это s вместе с хешем открытого ключа. Использование начального значения вместо хранения A значительно экономит память и пропускную способность.
Процесс инкапсуляции
Для инкапсуляции отправитель создаёт случайное сообщение m и с помощью SHA-3 получает симметричный ключ K и случайность r. Шифротекст состоит из двух частей: u = Ar + e1 mod q и v = t^T r + e2 + encode(m) mod q. Общий секрет K получается из хеша m. Случайность детерминированно выводится из m, связывая шифротекст с ключом.
Декапсуляция и преобразование FO
При декапсуляции m восстанавливается вычислением v - s^T u с последующим декодированием, после чего K заново выводится из m. Преобразование Фудзисаки—Окамото добавляет важный шаг: повторно зашифровать восстановленное m и проверить совпадение шифротекста. Если совпадения нет, возвращается псевдослучайное значение, полученное из хеша закрытого ключа и шифротекста. Это предотвращает атаки с выбранным шифротекстом, делая декапсуляцию детерминированной и проверяемой.
Доказательство стойкости CCA2
ML-KEM обеспечивает стойкость IND-CCA2 в квантовой модели случайного оракула (QROM), доказанную при предположении Module-LWE. QROM важна потому, что постквантовые противники могут запрашивать хеш-функции в суперпозиции. Доказательство стойкости, предложенное Хофхайнцем, Ховельманнсом и Кильтцем (подход HHK), даёт точные редукции от Module-LWE к стойкости ML-KEM в QROM.
Производительность по сравнению с RSA и ECDH
ML-KEM значительно превосходит RSA при обмене ключами на сопоставимых уровнях стойкости. На современном CPU генерация ключей ML-KEM-768 занимает около 16 микросекунд, инкапсуляция — 20 микросекунд, а декапсуляция — 18 микросекунд. Генерация ключей RSA-2048 занимает секунды. Открытые ключи ML-KEM (1184 байта) больше ключей ECDH (32–64 байта), но гораздо меньше ключей RSA-2048 (256 байт только для ключа, хотя на практике данные длиннее).
Гибридные развёртывания
В переходный период гибридный обмен ключами сочетает ML-KEM с классическим алгоритмом (обычно X25519 или P-256 ECDH). Общий секрет является хешем обоих выходов KEM: K = Hash(K_classical || K_pqc). Это гарантирует, что стойкость не будет ниже стойкости любого из компонентов. Гибридный TLS описан в документе IETF draft-ietf-tls-hybrid-design и поддерживается в BoringSSL, OpenSSL 3.x и Rustls.
ML-KEM в TLS 1.3
IETF определил X25519ML-KEM-768 как гибридный вариант обмена ключами для TLS 1.3 (draft-ietf-tls-hybrid-design). Chrome добавил поддержку в версии 124 (апрель 2024 года), а Firefox — в версии 132 (2024 год). Cloudflare внедрил ML-KEM в свою инфраструктуру завершения TLS-сеансов. Благодаря такому быстрому распространению теперь сотни миллионов TLS-соединений в день включают постквантовый обмен ключами.
Вероятность сбоя расшифрования
Из-за слагаемых ошибок в LWE существует небольшая вероятность сбоя декапсуляции даже при отсутствии противника. Для ML-KEM-512 вероятность сбоя составляет примерно 2^{-139}, а для ML-KEM-768 — 2^{-164}. Эти значения намного ниже любого практически значимого уровня (для сравнения, аппаратные ошибки происходят гораздо чаще) и не влияют на безопасность, но их необходимо учитывать в спецификации.
Реализации с открытым исходным кодом
ML-KEM реализован во множестве библиотек с открытым исходным кодом. Эталонная реализация команды Kyber находится в общественном достоянии. PQClean предоставляет очищенную переносимую реализацию на C. liboqs (проект Open Quantum Safe) интегрирует ML-KEM в оболочку библиотеки. AWS-LC (форк BoringSSL от Amazon) включает ML-KEM для конечных точек TLS в AWS. Стандарт NIST FIPS 203 содержит подробный псевдокод для всех операций.
Викторина по параметрам ML-KEM
Какой набор параметров ML-KEM NIST рекомендует для большинства приложений?
Итоги ML-KEM
ML-KEM (FIPS 203) — это постквантовый KEM, стандартизированный NIST и основанный на Module-LWE. Три набора параметров (512/768/1024) обеспечивают классическую стойкость уровня 128/192/256 бит. Генерация ключей создаёт компактный открытый ключ из случайного начального значения; инкапсуляция получает общий секрет; декапсуляция использует преобразование FO для обеспечения стойкости CCA2. ML-KEM значительно быстрее RSA и уже применяется в TLS-инфраструктуре Chrome, Firefox и Cloudflare.
Часто задаваемые вопросы
Урок «ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber» бесплатный?
Да — полный текст урока «ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber»?
Подробно изучите механизм инкапсуляции ключей ML-KEM, наборы параметров и особенности реализации. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Конкурс NIST PQC: процесс и критерии
- ML-KEM (FIPS 203): стандартизация CRYSTALS-Kyber
- ML-DSA (FIPS 204) и SLH-DSA (FIPS 205)
- Планирование перехода на постквантовые стандарты