ML-KEM-768 post-quantum
Kyber · первый пост-квантовый стандарт для обмена ключами
Что это
ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism) — механизм инкапсуляции ключей на решётчатой криптографии. Опубликован NIST как FIPS 203 в августе 2024 года. Основан на схеме CRYSTALS-Kyber, победителе конкурса NIST PQC (2016-2022).
Число 768 — уровень безопасности:
- ML-KEM-512 — ~AES-128, самый быстрый
- ML-KEM-768 — ~AES-192, компромисс скорость/размер, рекомендуется для TLS
- ML-KEM-1024 — ~AES-256, самый безопасный
Зачем нужен
Все классические схемы обмена ключами (RSA, DH, ECDH включая X25519) ломаются алгоритмом Шора на квантовом компьютере. Как только появится достаточно мощный квантовый компьютер — весь перехваченный TLS-трафик прошлых лет можно расшифровать задним числом (атака «harvest now, decrypt later»).
ML-KEM основан на задаче Module Learning With Errors (M-LWE) — решётчатой задаче, для которой пока нет эффективного квантового алгоритма.
Как работает KEM (не как DH)
ML-KEM — это не Diffie-Hellman. Это Key Encapsulation Mechanism:
Сервер Клиент
─────────────────────────────────────────────
(pk, sk) = KeyGen()
────pk────►
(ct, K) = Encaps(pk)
◄────ct────
K = Decaps(sk, ct) K
── оба получили одинаковый ~32-байтовый ключ ──
Клиент инкапсулирует случайный секрет с помощью публичного ключа сервера, получая шифротекст ct и общий ключ K. Сервер приватным ключом декапсулирует шифротекст и получает тот же K.
Размеры (это боль)
| Публичный ключ | Ciphertext | Общий секрет | |
|---|---|---|---|
| X25519 | 32 байта | 32 байта | 32 байта |
| ML-KEM-512 | 800 байт | 768 байт | 32 байта |
| ML-KEM-768 | 1184 байта | 1088 байт | 32 байта |
| ML-KEM-1024 | 1568 байт | 1568 байт | 32 байта |
Гибридные схемы в TLS 1.3
Никто не использует ML-KEM «в одиночку» — в TLS применяют гибрид:
| Группа | Классика | PQ | Порядок shared secret |
|---|---|---|---|
| X25519MLKEM768 (0x11EC) | X25519 | ML-KEM-768 | ML-KEM сначала (по FIPS) |
| SecP256r1MLKEM768 (0x11EB) | P-256 | ML-KEM-768 | ECDH сначала |
| SecP384r1MLKEM1024 | P-384 | ML-KEM-1024 | ECDH сначала |
Итоговый общий секрет = конкатенация обоих shared secrets, затем HKDF. Так что даже если ML-KEM неожиданно окажется сломан, X25519 держит защиту от классических атак; если Шор станет реальностью — держит ML-KEM.
Развёртывание
| Дата | Событие |
|---|---|
| Август 2023 | Chrome 116 — экспериментальная поддержка X25519Kyber768Draft00. |
| Апрель 2024 | Chrome 124 — включено по умолчанию на десктопе. |
| Август 2024 | NIST FIPS 203 — финальная стандартизация ML-KEM. Kyber → ML-KEM. |
| Сентябрь 2024 | Google Chrome/Chromium переходит на X25519MLKEM768 (0x11EC). |
| Октябрь 2024 | Cloudflare включает X25519MLKEM768 на всей сети. |
| Ноябрь 2024 | Firefox 132 — X25519MLKEM768 по умолчанию. |
| Февраль 2025 | OpenSSL 3.5 — поддержка ML-KEM в основной ветке. |
| Март 2025 | BoringSSL, Rustls, wolfSSL — поддержка ML-KEM. |
| 2026 | Java 25 (LTS) — X25519MLKEM768 в JSSE по умолчанию. |
Проверить самому
Открыть в Chromium-браузере:
chrome://net-export
Или зайти на pq.cloudflareresearch.com — там показывают, какая group использована. Если X25519MLKEM768 — значит соединение защищено от квантовых атак.
Или в nginx поднять переменную $ssl_curve в лог/заголовок:
add_header X-SSL-Group $ssl_curve always;
Почему именно 768
NIST рекомендует ML-KEM-768 как «золотую середину»:
- ML-KEM-512 — на грани минимума, при обнаружении атак может ослабнуть.
- ML-KEM-1024 — избыточная защита для большинства TLS-сценариев, зато размеры ключей ещё больше.
- ML-KEM-768 — соответствует безопасности AES-192 против квантовых атак, что комфортно на 20+ лет вперёд.
Криптографическая основа
Задача M-LWE (Module Learning With Errors):
Даны матрица A и вектор b = A·s + e (mod q).
Найти s, зная A и b, где e — маленькая ошибка.
Для параметров ML-KEM-768: q = 3329, размерность модуля k=3, полиномы степени 256. Кванторезистентность гарантирована, если M-LWE остаётся сложной задачей.
- ML-DSA (FIPS 204) — цифровые подписи на решётках (Dilithium).
- SLH-DSA (FIPS 205) — подписи на хешах (SPHINCS+).
- FN-DSA (FIPS 206, draft) — компактные подписи (Falcon).
- HQC — резервный KEM на кодах, стандартизация ожидается в 2026-2027.