4. 参数集与安全级别
ML-KEM 在 FIPS 203 中定义了三个参数集:ML-KEM-512、ML-KEM-768 和 ML-KEM-1024。它们共享同一套算法骨架——在模数 q=3329 的环 R_q = Z_q[X]/(X^256+1) 上进行 NTT 域多项式运算,但通过改变矩阵维度 k、噪声分布参数 η₁/η₂ 以及压缩参数 d_u/d_v,形成三档安全强度与性能档位。理解这三个参数集的差异,是工程选型的第一步。
一、三个参数集的共同底座
所有 ML-KEM 参数集都固定以下基础量:
- 多项式次数 n = 256,环结构为 X^256 + 1;
- 模数 q = 3329,满足 q ≡ 1 (mod 256),因此支持完整的 128 点 NTT;
- CBD(中心二项分布)采样噪声,η₁ 用于生成秘密向量 s 和误差向量 e,η₂ 用于生成 e₁、e₂;
- 压缩函数 Compress_d 与解压 Decompress_d,d_u 压缩 u 向量,d_v 压缩 v 分量;
- 共享密钥 K 长度 32 字节,密文由 u(k 个多项式)和 v(1 个多项式)组成。
差异集中在 k、η₁、η₂、d_u、d_v 五个参数上。k 决定矩阵 A 的规模(k×k),直接决定公钥、私钥和密文的字节数;η 决定噪声多项式的系数范围,影响安全裕度与解密失败概率;d_u、d_v 决定密文压缩率,影响带宽与正确性。
二、参数集对照
| 参数 | ML-KEM-512 | ML-KEM-768 | ML-KEM-1024 |
|---|---|---|---|
| k(矩阵维度) | 2 | 3 | 4 |
| η₁ | 3 | 2 | 2 |
| η₂ | 2 | 2 | 2 |
| d_u | 10 | 10 | 11 |
| d_v | 4 | 4 | 5 |
| NIST 安全类别 | 1(≈AES-128) | 3(≈AES-192) | 5(≈AES-256) |
| 公钥字节 | 800 | 1184 | 1568 |
| 私钥字节 | 1632 | 2400 | 3168 |
| 密文字节 | 768 | 1088 | 1568 |
公钥字节数 = 384·k + 32(k 个多项式各 384 字节,加 32 字节随机种子 ρ);密文字节数 = 32·(d_u·k + d_v)。以 ML-KEM-768 为例:32×(10×3+4)=32×34=1088 字节,与表中一致。私钥字节数 = 768·k + 96(k 个 s 向量各 384 字节,加公钥哈希与 z 值)。
三、安全类别与噪声参数的关系
NIST 安全类别并非由 k 单独决定,而是由“格维度 × 噪声分布”共同决定。ML-KEM-512 虽然 k=2、维度较低,但 η₁=3 提供了更大的噪声,使攻击者区分 LWE 样本的难度达到类别 1。ML-KEM-768 和 1024 使用 η₁=2,但通过增大 k 提升维度,分别达到类别 3 和类别 5。这种“低维高噪”与“高维低噪”的搭配,是 Kyber 设计中的关键平衡:η 越大,采样和乘法开销越高,但维度可以更低;k 越大,矩阵乘法 O(k²) 增长,但噪声可以更小。
四、性能与带宽权衡
从 512 到 1024,计算量、密钥尺寸、密文尺寸同步增长。以典型 AVX2 优化实现为参考(示例量级,非实测承诺):
- 密钥生成:512 约 30–40 μs,768 约 50–60 μs,1024 约 70–90 μs;
- 封装(Encaps):512 约 40–50 μs,768 约 60–70 μs,1024 约 90–110 μs;
- 解封装(Decaps):512 约 50–60 μs,768 约 70–80 μs,1024 约 100–120 μs。
带宽方面,一次完整 KEM 交互(公钥 + 密文)在 512 下约 1568 字节,768 下约 2272 字节,1024 下约 3136 字节。若在 TLS 1.3 握手中使用,ML-KEM-768 的额外开销约为 X25519 的 10–15 倍,但仍在可接受范围。对于 IoT 或低带宽链路,512 的 768 字节密文更具优势;对于长期归档或高价值通道,1024 的类别 5 安全裕度更合适。
五、选型决策方法
实际工程中,选型不应只看“安全类别越高越好”,而应结合协议约束、硬件能力和生命周期。以下给出一个可操作的判断顺序:
- 先确定安全类别下限。若系统需要与 AES-256 或 SHA-384 对齐(如政府、金融长期归档),直接选 ML-KEM-1024;若与 AES-128 对齐(如普通 IoT 会话),512 即可;通用互联网协议默认 768。
- 再检查带宽与存储预算。若单次握手总字节数被限制在 2 KB 以内,512 是唯一选择;若在 3 KB 以内,768 可行;1024 需要至少 3.2 KB 的余量。
- 评估计算资源。在 Cortex-M4 上,512 的密钥生成约 1.2 ms、封装约 1.5 ms(示例量级);768 约 2.5 ms / 3 ms;1024 约 4 ms / 5 ms。若 MCU 主频低于 100 MHz 且无硬件加速,1024 可能超出实时预算。
- 考虑互操作性。若对端只支持某一参数集,则必须匹配。TLS 1.3 的 X25519Kyber768 混合模式已广泛部署,768 是当前互操作性最好的档位。
- 最后做降级预案。若 1024 因性能被否决,但安全要求又高于 768,可考虑混合模式(如 ML-KEM-768 + X25519)或增加对称层强度来补偿。
六、参数集与实现细节的关联
选择参数集后,实现层面还需注意:η₁=3 的 512 在采样时消耗更多随机字节,若使用硬件 TRNG 需确认吞吐;d_u=11 的 1024 在压缩时多一位,解压时的舍入边界更敏感,需验证正确性;k=4 的矩阵乘法在 NTT 域需要 16 次点乘,缓存局部性比 k=2 更差,优化时应优先考虑分块策略。这些细节说明,参数集不仅是“安全档位”,也直接决定了代码路径和优化重点。
总结来说,ML-KEM-512/768/1024 的选型是一个多目标决策:安全类别决定下限,带宽和算力决定上限,互操作性和生命周期决定最终落点。工程上最稳妥的做法是:默认 768,受限选 512,高保障选 1024,并在协议层保留参数协商能力。