2. 抗量子密码算法基础与协议集成方式

要理解抗量子通信协议的互操作性测试,首先必须把“算法接口”和“协议集成”这两层分开看。NIST 后量子密码标准化产出的不是单一算法,而是一组按用途划分的原语:用于密钥封装的 ML-KEM(FIPS 203)、用于数字签名的 ML-DSA(FIPS 204)与 SLH-DSA(FIPS 205),以及作为备用哈希签名路线的 FN-DSA 等。它们各自有明确的输入输出结构、密钥与密文/签名长度、随机性来源和安全假设,这些接口特征直接决定了它们能否被塞进 TLS、IPsec、SSH 现有的握手框架中,以及塞进去之后会在哪里产生互操作分歧。

三类算法的接口特征差异

ML-KEM 是基于模格上 MLWE 问题的密钥封装机制,接口是“封装/解封装”而非“加密/解密”:发送方用接收方公钥生成共享密钥和密文,接收方用私钥解封装恢复同一共享密钥。它内部包含密钥生成、封装、解封装三个确定性流程,并带有隐式拒绝(implicit rejection)机制——解封装失败时不报错,而是输出一个伪随机的共享密钥,从而抵抗选择密文攻击。这一点对协议集成很关键:协议层不能指望通过“解封装失败”来判定对端是否发来了伪造密文。

ML-DSA 是基于模格的全新签名方案,签名与验签接口接近传统 ECDSA/RSA 的形态,但公钥、私钥和签名尺寸显著更大,且签名过程依赖拒绝采样,同一消息在不同随机数下可能产生不同签名(非确定性),验签则是确定性的。SLH-DSA 是 SPHINCS+ 的标准化版本,安全性仅依赖哈希函数,属于无状态哈希签名,签名尺寸更大、签名速度较慢,但安全假设最保守,适合作为高价值长期签名或算法多样性备份。

下表给出典型参数集下的量级对比(示例值,用于建立尺寸直觉,具体以对应 FIPS 文档为准):

算法(参数集)公钥私钥密文/签名接口语义
ML-KEM-768约 1184 B约 2400 B密文约 1088 B封装/解封装
ML-DSA-65约 1952 B约 4032 B签名约 3309 B签名/验签
SLH-DSA-SHA2-128s约 32 B约 64 B签名约 7856 B签名/验签

尺寸差异不是细节,而是互操作的第一道门槛。TLS 的 Certificate 消息、IPsec 的 IKEv2 载荷、SSH 的密钥交换与公钥认证报文都有长度字段和分片约束,一个数 KB 的签名或公钥可能触发报文分片、MTU 溢出或实现对最大长度的硬编码限制。

在 TLS、IPsec、SSH 中的集成模式

TLS 1.3 的集成最成熟,主要有两条路径。其一是“混合密钥交换”:在 supported_groups 扩展中新增混合组(如 X25519MLKEM768),客户端与服务器各自发送传统 ECDH 份额与 ML-KEM 封装/公钥份额,最终共享密钥由两路秘密拼接后经 HKDF 导出。这样即使 ML-KEM 被攻破,传统 ECDH 仍提供保护,反之亦然,是当前过渡期的主流做法。其二是“后量子认证”:用 ML-DSA 证书替代或并列于 ECDSA 证书,通过 signature_algorithms 扩展协商。互操作影响点集中在:混合组的命名与编码是否一致、ClientHello 尺寸膨胀是否超过服务器接受上限、证书链总长度是否触发对端限制。

IPsec/IKEv2 的集成依赖新的密钥交换方法编号与通知载荷。IKE_SA_INIT 中双方交换 KEi/KEr 载荷,混合模式需要把 ML-KEM 公钥与密文按约定顺序拼接,并保证双方对“哪一段是传统份额、哪一段是 PQC 份额”的理解一致。由于 IKEv2 报文受 UDP 封装和 MTU 影响更明显,大公钥容易导致分片,实践中常配合 IKEv2 分片(fragmentation)或调整 MTU。SSH 的集成则体现在 kex_algorithms 与 host key algorithms 两个协商列表:混合 KEX 方法名(如 mlkem768x25519-sha256)需要双方精确匹配,主机密钥算法则要新增 ssh-ml-dsa 一类标识,并处理公钥认证报文中更大的签名块。

算法接口 → 协议集成 → 互操作影响点 ML-KEM 封装 / 解封装 隐式拒绝,不报错 公钥/密文约 1 KB 级 ML-DSA 签名 / 验签 签名非确定性 签名约 3 KB 级 SLH-DSA 无状态哈希签名 安全假设最保守 签名约 8 KB 级 TLS 1.3 supported_groups 混合组 signature_algorithms 证书 HKDF 拼接导出共享密钥 IPsec / IKEv2 KEi / KEr 载荷拼接 新 KEX 方法编号 UDP 分片与 MTU 约束 SSH kex_algorithms 方法名 host key algorithms 标识 公钥认证签名块变大 互操作影响点 ① 算法标识与命名一致性 ② 混合份额的拼接顺序 ③ 报文尺寸与分片上限 ④ 证书链总长度限制 ⑤ 随机性与确定性差异 ⑥ 失败语义(隐式拒绝) ⑦ 协商列表的优先级 ⑧ 降级与回退策略 ⑨ 密钥/签名编码格式 ⑩ 对端最大长度硬编码

互操作影响点的实际表现与处理

第一类是标识与编码不一致。混合组、签名算法、KEX 方法都靠字符串或编号协商,任何一方把“mlkem768x25519”写成“x25519mlkem768”,协商就会静默失败或回退到传统算法。测试时应抓取握手报文,逐字段核对 supported_groups、signature_algorithms、kex_algorithms 的实际取值,而不是只看最终是否握手成功。

第二类是尺寸引发的链路问题。以 TLS 为例,客户端若同时发送 X25519 份额与 ML-KEM-768 公钥,ClientHello 可能从数百字节膨胀到 1.5 KB 以上;若服务器证书链再叠加 ML-DSA 证书,Certificate 消息可达数 KB。在 MTU 1500 的链路上,这会触发 TCP 分段或 QUIC 的包数增加,某些老旧中间设备或实现的最大报文限制会直接拒绝。处理方式包括启用分片、控制证书链长度、优先选择尺寸较小的参数集。

第三类是语义差异。ML-KEM 的隐式拒绝意味着“解封装不报错但密钥不对”,协议层若把解封装成功当作身份验证依据就会出错;ML-DSA 的非确定性签名意味着同一消息多次签名结果不同,测试脚本不能用“签名逐字节相等”作为通过判据,而应改用验签通过与否判断。

互操作测试的实用判据:协商层看“双方是否选中同一算法标识”,传输层看“握手报文是否在双方长度上限内完整到达”,密码层看“导出的共享密钥或验签结果是否一致”。三层都通过,才算一次真正的互操作成功,而不是仅仅“连接建立”。

综合来看,抗量子算法进入通信协议不是简单替换,而是要在标识协商、报文尺寸、失败语义、随机性假设四个维度同时对齐。理解 ML-KEM、ML-DSA、SLH-DSA 的接口特征,正是为了在 TLS、IPsec、SSH 的集成点上预判这些分歧,并据此设计有针对性的互操作测试用例。