摘要

  • OpenPGP Key ID 是可能碰撞的 64 位检索线索;一次命中不能单独证明系统找到了唯一公钥包,更不能证明人的身份。
  • 可复核的验证凭证应保存全部候选、公钥包与完整指纹、取得来源、认证关系、生命周期、密码学结果和独立授权决定。

一条发布流水线收到签名后,从签名里取出 Key ID,到密钥库找到第一条记录,然后显示“验证成功”。这三个动作各自都可能正确,合在一起却容易多出一个标准从未给出的结论:找到的必定是唯一那把密钥。

问题不在于短标识本身。短标识方便人抄写,也便于系统缩小搜索范围。问题在于数据库把“候选之一”变成了“唯一对象”,随后又把对象变成姓名、现职和权限。每一次自动补全,都跨过了一条独立的证据边界。

Jon Callas 的经历与这条边界直接相关。他的 IETF 资料页列出五份 RFC,其中包括 RFC 2440 和 RFC 4880。ACLU 的人物介绍记载了他在密码学、软件工程与产品设计方面的经历;这些职务属于有日期语境的传记材料,不能据此推断当下任职。现行 RFC 9580 也不是 Callas 撰写,而是由另一组作者完成。

八个字节只负责缩小范围

RFC 4880把 Key ID 定义为八个八位组,并明确要求实现者不要假定它具有唯一性。对版本 3 的 RSA 密钥,它取模数的低 64 位;对版本 4 密钥,它取指纹的低 64 位。相同的字段长度,背后已有不同的派生语境。

取代它的 RFC 9580保留八字节设计,也保留不应假定唯一的警告。版本 4 仍取 SHA-1 指纹的低 64 位;版本 6 则取 SHA-256 指纹的高 64 位。Key ID 是较大对象的投影,不同对象落到同一投影值,在结构上始终可能发生。

这种碰撞不等于公钥算法被破解,也不等于每次重号都是攻击。真正的操作风险来自实现选择:检索接口只返回第一条、缓存以 Key ID 为唯一索引、导入时覆盖同号候选,或审计日志只留下短标识。两个密钥库即使收到同一查询,也可能因内容和排序不同而选中不同公钥。

版本同样不能省略。同一份 RSA 数学材料若分别封装为版本 3、4、6 公钥包,指纹和 Key ID 可以不同。把 Key ID 当成跨版本的“密钥姓名”,会把序列化对象与数学材料混成一件事。

完整指纹锁定公钥包,不锁定人

完整指纹更适合指认某一个序列化公钥包。它的碰撞概率远低于 64 位片段,系统也可以针对收到的包在本地重新计算。可是,比对对象更精确,不代表人的身份、信任关系和权限自动成立。

RFC 9580 对人工朗读、目视核对长指纹持谨慎态度。正确改进不是退回 Key ID,而是让指纹通过经过认证的机械通道传递和比较。因此凭证还要记录“预期指纹”从哪里来:受控配置、签名目录、独立认证渠道,还是与下载密钥相同且可被替换的网页。若参照值的来源不可靠,精确比对也可能只是精确地比错对象。

人的身份需要认证证据。OpenPGP User ID 包容纳 UTF-8 文本,通常是姓名和邮件地址,但格式不会核验文本真假。认证签名才表达某个认证者如何把文字与密钥相连,而且认证类型的含义不同:generic 不说明核验力度,persona 明确不主张核验,casual 与 positive 则宣称逐步更强的检查。

因此,正确姓名加正确指纹仍不是劳动关系证明、现职证明或委托书。依赖方必须说明信任哪些认证者、接受何种认证、适用于什么用途和时点。

密码学成功不等于业务获权

签名里的 Issuer Key ID 子包依旧只有八字节,是寻找发行者密钥的线索。RFC 9580 不允许它用于版本高于 4 的密钥,并建议所有签名包含 Issuer Fingerprint。版本 4 签名若同时带有两者,Key ID 应与指纹低 64 位一致。这能发现内部矛盾,却不能替代对完整公钥包的解析。

随后,密码学验证只回答一个窄问题:这份签名能否由选定公钥对这些确切字节验证通过?密钥是否已经撤销或过期、签名在相关时点是否有效、算法是否符合政策、key flags 是否允许相应用途,都是另外的检查。

业务授权还要再走一步。即使某把密钥正确签署了发布清单,也不能由此推出控制密钥的人是现任发布负责人、清单内容真实,或组织允许他把系统推向生产。持有密钥、经过认证的身份、当前角色和具体行动权限可以相互支持,却不能互相替代。

让凭证保留没有解决的部分

可靠流程先保存被签名对象与签名包的确切字节,再把发行者 Key ID 当作提示,记录每个仓库返回的所有候选。对于最终选用的候选,保存完整公钥包、版本、本地计算的完整指纹,以及取得渠道和时间。

接下来逐项记录被评估的 User ID、认证链或信任规则、相关时点的过期与撤销状态、key flags、算法政策和密码学验证结果。最后一栏才是带有自身依据的业务授权决定。

出现同号候选时不删除其余记录;预期指纹来自弱渠道时不把弱点藏起来;没有证明身份或权限时就让对应字段保持未知。凭证的价值不在于把所有栏都填成“是”,而在于任何人都能重现它是如何从线索走到决定的。

来源