ML-KEM(FIPS 203):CRYSTALS-Kyber 标准
深入了解 ML-KEM 的密钥封装机制、参数集和实现注意事项。
ML-KEM(FIPS 203):CRYSTALS-Kyber 标准 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
ML-KEM 所标准化的内容
ML-KEM(基于模块格的密钥封装机制)于 2024 年 8 月被标准化为 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 的密钥生成过程如下:使用 SHAKE-128 从种子中采样随机矩阵 A,采样较小的秘密向量 s 和误差向量 e,然后计算 t = As + e mod q。公钥是(seed, 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 变换
解封装通过计算 v - s^T u 并进行解码来恢复 m,然后从 m 重新推导 K。Fujisaki-Okamoto 变换增加了一个关键步骤:使用恢复出的 m 重新加密,并检查生成的密文是否匹配。如果不匹配,则返回由私钥和密文的哈希值推导出的伪随机值。这样可以使解封装具有确定性且可验证,从而防止选择密文攻击。
CCA2 安全性证明
ML-KEM 在量子随机预言机模型(QROM)中实现了 IND-CCA2 安全性,其证明基于 Module-LWE 假设。QROM 非常重要,因为后量子攻击者可以在叠加态中查询哈希函数。Hofheinz、Hovelmanns 和 Kiltz 提出的安全性证明(HHK 框架)在 QROM 中提供了从 Module-LWE 到 ML-KEM 安全性的紧归约。
ML-KEM 与 RSA 和 ECDH 的性能对比
在相同安全级别下,ML-KEM 在密钥交换方面的性能大幅超过 RSA。ML-KEM-768 在现代 CPU 上生成密钥约需 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 的支持。
TLS 1.3 中的 ML-KEM
IETF 已将 X25519ML-KEM-768 定义为 TLS 1.3 的混合密钥共享方案(draft-ietf-tls-hybrid-design)。Chrome 在 124 版(2024 年 4 月)加入了支持,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(Amazon 对 BoringSSL 的分支)在 AWS 的 TLS 端点中加入了 ML-KEM。NIST FIPS 203 标准包含所有操作的详细伪代码。
ML-KEM 参数测验
NIST 建议大多数应用采用哪个 ML-KEM 参数集?
ML-KEM 回顾
ML-KEM(FIPS 203)是 NIST 标准化的、基于 Module-LWE 的后量子 KEM。三个参数集(512/768/1024)分别提供 128/192/256 位经典安全性。密钥生成通过随机种子生成紧凑的公钥;封装过程推导出共享秘密;解封装使用 FO 变换来实现 CCA2 安全性。ML-KEM 的速度显著快于 RSA,并且已经部署在 Chrome、Firefox 和 Cloudflare 的 TLS 中。
常见问题解答
「ML-KEM(FIPS 203):CRYSTALS-Kyber 标准」课时是免费的吗?
是的 — 「ML-KEM(FIPS 203):CRYSTALS-Kyber 标准」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「ML-KEM(FIPS 203):CRYSTALS-Kyber 标准」这节课中我会学到什么?
深入了解 ML-KEM 的密钥封装机制、参数集和实现注意事项。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 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)
- 规划向后量子标准的迁移