后量子密码算法ML-KEM介绍及开源代码实现
标准原文:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf
一、标准背景与定位
NIST FIPS 203《模格基密钥封装机制标准》发布于 2024 年 8 月 13 日,是应对量子计算威胁的后量子密码学标准之一。该标准基于 CRYSTALS-KYBER 算法,定义了模格基密钥封装机制(ML-KEM),用于在公共信道上安全建立共享密钥,适用于联邦政府及私人组织的敏感信息保护,可抵抗大规模量子计算机的攻击。
二、核心定义与作用
密钥封装机制(KEM)是一种通过三个算法(密钥生成、封装、解封装)在通信双方间建立共享密钥的技术。ML-KEM 的核心作用是:通信双方通过公共信道交换信息后,各自生成相同的共享密钥,该密钥可直接用于对称加密、认证等安全通信任务。其安全性基于模格上的学习误差问题(MLWE),该问题在量子计算模型下仍被认为具有计算困难性。
三、关键算法与流程
ML-KEM 由三个核心算法构成,依赖公共密钥加密(K-PKE)作为子模块,具体流程如下:
1. 密钥生成(ML-KEMKeyGen)
- 生成 32 字节随机种子,通过扩展生成封装密钥(公钥)和解封装密钥(私钥)。
- 封装密钥包含多项式矩阵的种子和加密相关参数,可公开;解封装密钥包含私钥、封装密钥哈希等敏感信息,需保密。
- 核心步骤:通过伪随机生成器生成矩阵A、秘密向量s和噪声向量e,计算t = A·s + e作为公钥核心部分,私钥包含s和e的信息。
2. 封装(ML-KEMEncaps)
- 输入封装密钥,生成 32 字节随机数,通过 K-PKE 加密生成密文,并推导共享密钥。
- 核心步骤:生成随机向量y和噪声e1、e2,计算u = A^T·y + e1和v = t^T·y + e2 + 消息编码,压缩后形成密文;同时通过哈希推导共享密钥。
3. 解封装(ML-KEMDecaps)
- 输入解封装密钥和密文,解密得到明文,重新加密验证密文有效性,最终输出共享密钥。
- 核心步骤:使用私钥s计算v' = s^T·u,通过v - v'恢复消息,重新加密比对密文一致性,确保安全性。
四、参数集与性能
ML-KEM 定义了三个参数集,平衡安全强度与性能,具体如下:
参数集 | 安全等级 | 核心参数(k/η₁/η₂/du/dv) | 密钥与密文大小(字节) | 适用场景 |
ML-KEM-512 | 类别 1 | 2/3/2/10/4 | 封装密钥 800、解封装密钥 1632、密文 768 | 一般安全需求场景 |
ML-KEM-768 | 类别 3 | 3/2/2/10/4 | 封装密钥 1184、解封装密钥 2400、密文 1088 | 中等安全需求(推荐默认) |
ML-KEM-1024 | 类别 5 | 4/2/2/11/5 | 封装密钥 1568、解封装密钥 3168、密文 1568 | 高安全需求(如国防) |
- 安全等级:对应 NIST 定义的抗量子攻击能力,数值越高安全性越强,但密钥和密文尺寸越大,计算开销越高。
- 共享密钥:均为 256 位,可直接用于对称加密或通过密钥派生生成更多密钥材料。
五、安全特性与实现要求
- 抗量子性:基于 MLWE 问题,抵抗量子算法攻击,保障长期安全性。
- 正确性:正常情况下,封装与解封装生成的共享密钥完全一致,解密失败率极低(≤2⁻¹⁶⁴.⁸)。
- 实现要求:
-
- 随机数生成:使用 NIST 批准的随机位生成器(RBG),安全强度匹配参数集(如 ML-KEM-1024 需≥256 位)。
-
- 输入检查:验证密钥和密文的格式、长度及有效性,防止恶意输入。
-
- 密钥管理:解封装密钥需保密,中间计算值需及时销毁,禁止使用浮点运算避免精度误差。
-
- 兼容性:允许数学等效的实现步骤,但需保证输入输出一致。
六、与 CRYSTALS-KYBER 的差异
ML-KEM 基于 CRYSTALS-KYBER 演进,主要差异包括:
- 共享密钥长度固定为 256 位,而非可变长度。
- 调整 Fujisaki-Okamoto 变换,移除密文哈希在共享密钥派生中的作用。
- 增加严格的输入检查步骤,确保密钥和密文格式合法。
- 引入域分离机制,防止不同参数集的密钥混用。
七、应用场景
ML-KEM 适用于需要安全密钥协商的场景,包括:
- 加密通信:如 VPN、TLS 等协议中的密钥交换。
- 数据保护:云存储、金融交易中的敏感信息加密。
- 物联网:设备间安全配对与通信。
作为 NIST 首批后量子密码标准,ML-KEM 为量子时代的安全通信提供了关键基础,是传统 RSA、ECDH 等密钥交换机制的重要替代方案。
开源代码实现参考
【openHiTLS开源密码库已开源实现ML-KEM,欢迎下载使用】
openHiTLS旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
项目地址:https://gitcode.com/openHiTLS/openhitls