3. 抗量子密钥封装机制(KEM)基础
在混合密钥协商方案中,后量子密码(PQC)一侧通常并不直接使用“密钥协商”原语,而是使用密钥封装机制(Key Encapsulation Mechanism,KEM)。理解 KEM 的语法、安全属性以及它与传统密钥协商的对应关系,是设计混合方案的前提。本节从 KEM 的形式化定义出发,讲清封装/解封装流程,再说明它如何与 ECDH 等密钥协商机制组合,最后概览 NIST PQC 标准化中的 Kyber、NTRU、Saber 等 KEM 方案。
一、KEM 的语法:三个算法与一个共享密钥
KEM 由三个概率多项式时间算法组成,记作 (KeyGen, Encaps, Decaps):
- KeyGen(1^λ) → (pk, sk):输入安全参数 λ,输出公钥 pk 与私钥 sk。pk 可公开分发,sk 由持有方保密。
- Encaps(pk) → (ct, K):封装方输入接收方公钥 pk,内部随机选取一个临时秘密,输出密文 ct 与共享密钥 K(长度通常为 32 字节)。K 由封装方本地保留,ct 通过信道发送给接收方。
- Decaps(sk, ct) → K:接收方用私钥 sk 对密文 ct 解封装,恢复出共享密钥 K。
正确性要求:对任意 (pk, sk) ← KeyGen 与 (ct, K) ← Encaps(pk),恒有 Decaps(sk, ct) = K。注意 KEM 与公钥加密(PKE)的关键区别:PKE 加密的是调用者给定的明文,而 KEM 的“明文”是封装算法内部随机生成的,调用者只拿到密文和密钥,无法指定或干预密钥内容。这一设计使 KEM 天然适合“先协商出一个对称密钥,再用它做 AEAD 加密”的混合加密范式。
二、封装/解封装流程与安全属性
以 Kyber 为例,其内部结构是“IND-CPA 安全的 PKE + Fujisaki–Okamoto 变换”构成的 CCA 安全 KEM。封装时,算法对消息 m 做哈希得到随机种子,用 PKE 加密 m 得到密文主体,同时对密文做哈希派生共享密钥 K;解封装时先解密得到 m′,再重新加密并比对密文,若不一致则输出一个伪随机的“隐式拒绝”密钥。这一“重加密比对”是 FO 变换的核心,使攻击者无法通过篡改密文获得解密预言机信息。
KEM 的安全目标主要有两类:IND-CPA(选择明文攻击下的不可区分性)与IND-CCA2(适应性选择密文攻击下的不可区分性)。用于密钥协商的 KEM 必须达到 IND-CCA2,因为攻击者可以在真实网络中篡改或重放密文。此外还需关注:密文不可延展性、密钥的伪随机性(K 与随机串不可区分)、以及解封装失败时的隐式拒绝行为——绝不能向攻击者泄露“解密失败”这一比特信息,否则会遭受 Bleichenbacher 式攻击。
三、KEM 与密钥协商的关联
传统 ECDH 是交互式的:双方各生成临时密钥对,交换公钥后各自计算共享秘密。KEM 则是单向封装:发起方只需持有接收方公钥即可独立完成封装,无需接收方实时在线。二者在混合方案中的对应关系是:把 KEM 输出的 K 与 ECDH 输出的共享秘密 Z 一起送入 KDF,得到最终会话密钥。例如 TLS 1.3 的混合组 X25519Kyber768,客户端发送 X25519 公钥与 Kyber 密文,服务端分别计算 Z 与 K,再执行 HKDF-Extract(Z || K)。这样即使其中一方被量子计算机攻破,另一方仍能保证密钥安全。
需要强调:KEM 的 K 是“封装方单方面决定”的,接收方只能被动恢复,因此 KEM 本身不提供前向保密意义上的“双方贡献”。混合方案的安全性依赖于 KDF 对两个秘密的联合提取,设计时必须保证两个秘密都被完整、无歧义地编码进 KDF 输入,并绑定协议上下文(如 transcript hash),防止降级与拼接攻击。
四、NIST PQC 标准化 KEM 概览
NIST 后量子密码标准化在 2022 年选定首批算法,2024 年发布 FIPS 203/204/205 草案与正式标准。与 KEM 直接相关的主要方案如下:
| 方案 | 数学基础 | 标准化状态 | 典型参数(示例) | 特点 |
|---|---|---|---|---|
| Kyber(ML-KEM) | 模格上的 LWE(Module-LWE) | FIPS 203 标准 | ML-KEM-768:pk 1184 B,ct 1088 B,K 32 B | 性能均衡,TLS/SSH 广泛集成,混合方案首选 |
| NTRU | NTRU 格问题 | 进入第四轮评估(未入选首批) | NTRU-HPS-2048-677 等 | 历史久、结构成熟,密文略大 |
| Saber | 模格上的 LWR(Learning With Rounding) | 第三轮候选(未入选) | Saber-768 等 | 舍入代替噪声采样,实现简洁 |
表中参数为公开规格中的示例值,实际部署应以所选库与标准版本的参数集为准。工程上选择 KEM 时,除安全级别外,还要关注公钥/密文尺寸对握手报文的影响(Kyber-768 的 pk+ct 约 2.3 KB,会显著增大 ClientHello)、解封装失败率(需低于协议可接受阈值)、以及常数时间实现质量。混合方案设计中,建议优先采用已标准化且经广泛审计的 ML-KEM,并与现有 ECDH 组做“双保险”组合,而非自行拼接未标准化的 KEM 变体。