摘要

  • draft-ietf-openpgp-nist-bp-comp-05 的变更记录称,实验性编号 100–107 已改为获分配的 37–44;但 2026 年 10 月 1 日冻结的 IANA OpenPGP 注册表仍把 37–99 列为未分配。公开证据只证明当时未对齐,不能推断分配成功、被拒或更新时间。
  • 八种构造全部是可选的 MAY,且只适用于 v6 或更新的密钥、证书与签名。解析器认识一个字节,不等于产品支持、启用或正确执行相应算法。
  • 复合签名必须让 ECDSA 与 ML-DSA 同时通过;复合 KEM 必须执行 ECDH 与 ML-KEM、校验敌手可控的椭圆曲线点、重建组合器上下文并通过 AES-256 解包完整性检查。

“编号稳定”这一格不该先变绿

第 05 版草案文本把四种复合 KEM 和四种复合签名写成 37–44,并说明此前使用的 100–107 已被替换。随编号变化,指纹、KEM 中间值和测试向量重新生成,四种复合签名又增加了分离签名向量。HTML 版本和XML 源文件呈现的是同一套构造。

然而,当天截取的 IANA OpenPGP 参数注册表只列到 36,37–99 仍是 Unassigned。这条差异必须带日期。它不证明草案写错,也不证明 IANA 拒绝,更不能替尚未出现在公开页面上的流程编造结果。正确的运行记录应同时保存注册表地址与抓取时间、草案版本与哈希、对象中的编号,以及解释该编号的软件版本。

文件本身也仍在演进。Datatracker 文档页把它列为 OpenPGP 工作组的活跃 Internet-Draft,修订日期为 2026 年 9 月 24 日,有效期到 2027 年 3 月 28 日。文档 API没有给出拟定 RFC 状态,而草案页眉写的是 Informational。历史记录显示仍需修订后等待主席放行。它不是 RFC,也不是已经批准的标准。

一个编号固定构造,不固定部署状态

37 与 38 把 ML-KEM-768 或 ML-KEM-1024 分别和 NIST P-384、P-521 上的 ECDH 组合;39 与 40 换成 brainpoolP384r1、brainpoolP512r1。41–44 则把相应安全级别的 ML-DSA 与这些曲线上的 ECDSA 组合。

每一项都是 MAY。实现可以一个都不做,也可以只做其中一部分。库里存在 ML-KEM 代码,不代表 OpenPGP 路径已启用;解析器接受 41,不代表密钥库接受 v6 密钥;设备支持 P-384,也不代表执行了复合签名的 AND 规则。

RFC 9580给出当前 OpenPGP 包、密钥和签名结构,RFC 9980定义这里复用的 ML-KEM、ML-DSA 与多密钥组合器。新草案要求这些非对称算法只进入 v6 或更新的密钥与证书;复合签名也必须是 v6 或更新,摘要至少 256 位。生产凭据因此不能只写“算法 43 成功”,还要写对象版本、摘要、固定长度、解析器构建与策略配置。

KEM 的绿色结果位于长链条末端

加密端必须同时运行 ECDH 与 ML-KEM 封装。两份密钥材料、ECDH 密文点、ECDH 公钥和算法编号一起进入 RFC 9980 的 multiKeyCombine,所得 KEK 再用 AES-256 key wrap 包装会话密钥。

解密端先要确认 PKESK 编号与本地私钥编号一致,按算法精确拆分组件,分别执行两条解封装路径,重建完全相同的组合器输入,再检查解包的 64 位完整性值。对于 v3 PKESK,对称算法编号在包装值之外,因此解出的密钥长度还必须与该算法匹配,否则终止。

FIPS 203定义 ML-KEM,SP 800-56A 第 3 版给出传统椭圆曲线密钥建立背景。一次成功解包只能证明下游结果,不能自动证明上游每个检查都在正确版本的代码里发生。KEM 凭据必须分别保留解析、点校验、两次计算、组合器身份和完整性结果。

敌手可控的曲线点必须先过三道门

第 04 版补入了容易被“最终成功”掩盖的关键要求。NIST 与 Brainpool 曲线采用短 Weierstrass 形式。接收自外部的点在参与秘密标量乘法之前,必须确认:不是无穷远点;坐标属于有限域;满足目标曲线方程。

封装时,待校验的是接收方 ECDH 公钥;解封装时,待校验的是临时 ECDH 密文点。任一条件失败都必须中止。草案安全章节明确指出,若对攻击者选择的离曲线点使用秘密标量,可能产生无效曲线攻击并泄露 ECDH 私密值。

相关基础分散在 FIPS 186-5、SP 800-186、Brainpool 曲线的 RFC 5639以及 SEC 1 v2的公钥校验规则中。字段长度正确不等于数学成员关系正确。遥测要记录曲线、校验程序版本和三项结果,但绝不记录秘密标量。

复合签名没有“熟悉的那一半优先”

签名对象含有同一 OpenPGP 数据摘要上的 ECDSA 与 ML-DSA 结果。二者必须都有效。ECDSA 通过而 ML-DSA 不支持、格式错误或验证失败,整体就是失败;反向亦然。

解析本身也属于安全边界。ECDSA 的 R、S 固定长度随曲线而变;ML-DSA-65 签名是 3,309 字节,ML-DSA-87 是 4,627 字节;少于 256 位的摘要必须拒绝。FIPS 204定义 ML-DSA,RFC 9794提供传统与后量子混合方案的术语。两者都没有授权系统挑选较好看的单组件结果。

第 05 版新增的分离签名向量可以证明规范示例可复现,却不能证明真实签名人的身份、授权、密钥来源或应用动作。运行记录应把摘要、ECDSA 判决、ML-DSA 判决、复合 AND、密钥信任和业务决定拆开。

本文没有测试任何厂商

现有证据没有指向具体实现、生产部署、互操作活动、报文抓取、攻击事件、性能或采用率。它描述一个仍可变化的提案及相邻规范。本文也不重复另一条 RFC 9980 问题——多接收方消息中保留传统接收路径会如何影响整体保密性;这里仅审查一个 NIST/Brainpool 复合算法内部是否被完整执行。

因此,编号看板应该显示三种状态而不是一个勾:注册权威是否对齐,软件是否精确执行,策略是否接受结果。只有三者都有可复核证据,编号才从草案名词变成生产事实。