摘要

  • RFC 9691 的 30 天接受计时器,从每个依赖方首次成功验证同一后继关系时才开始;发布满 30 天不是全网收敛回执。
  • 一次可追责的换钥,必须分别保留双向 TAK、逐次观测历史、双仓库等价性、实际生产根、旧 TAL 滞留和旧私钥销毁证据。

旧信任锚是 A,新信任锚是 B。按照 RFC 9691,A 侧 TAK 把 B 写成 successor;B 侧 TAK 把 A 写成 predecessor。验证器要从 B 完成自顶向下验证,确认 B 的 current 正是 A 宣布的后继,并确认 B 的前任就是 A。

这不是一条随意的换钥公告,而是一条互相闭合的迁移边。它能证明两个已验证签名对象对迁移关系的描述一致,却不能证明所有验证器都看见了这条边,也不能证明它们连续看见了 30 天。

第一眼决定本地时钟

验证器第一次成功看见 B,而且上一次成功运行还没有看见同一个 B 时,才启动自己的 30 天计时器。计时期间,生产验证仍从 A 开始;B 可以测试,不得因此提前接管正常验证。

若 B 验证失败,或当前 TAK 不再包含 B,本地计时就取消。密钥或证书 URI 集合发生变化,则形成新的迁移事实,需要重新计时。只有在连续成功观测满足本地期限后,那台验证器才把当前密钥改成 B,并从 B 重新开始验证。

因此,发布日期不是统一起点。常在线验证器可能当天开始;停机一周的实例晚一周;冷启动实例可能晚几个月;只报警不自动改配置的实现还需要人工动作;不支持 TAK 的实现会继续依赖原 TAL。

应记录验证器身份与版本、TAK 支持模式、本地 TAL 指纹、A/B 密钥与 URI、前一次成功运行、首次成功观测、每次取消和重启、截止时间以及真正用于生产的根。只保存“当前 TAK 长什么样”,无法解释两台验证器为什么会在不同日期切换。

RFC 还特别提醒:不要撤回 B 后原样重新加入。某台验证器可能看见过 B,却错过撤回窗口,于是保留旧计时器,比其他验证器更早切换。若不想重发 SubjectPublicKeyInfo,可以改变 B 的 URI 集合;看见变化的验证器就会取消旧计时并重新开始。历史本身参与授权,不是日志装饰。

双根并存不是双份自动一致

支持 TAK 的验证器在任一时刻只用一个生产根,但运营方往往要同时维护 A 与 B,因为旧客户端或不支持自动转换的客户端仍依赖 A。

两个密钥必须使用不同的仓库目录。除 TAK 外,两边的 CA 证书、IP 与 AS 资源、对子 CA 的委派和有效产品必须等价。若只有一台发布服务器,RFC 8181 的两边发布与撤回操作应放在一次请求里,尽量避免中间态。若有多台服务器,短暂不一致仍可能出现。

资源缩减或证书吊销,要等所有相关发布点更新后才完全生效;资源扩展则必须等两边准备好后才能通知下级。一个有效 TAK 签名不会自动复制这些状态。

所以要比较 A、B 两边经过验证后的资源与委派投影,记录 manifest、CRL、证书代次与抓取时间。这里要求的不是字节完全一致——URI 和签发链本来可能不同——而是从任一根出发,对同一资源得到相同验证结果。

四个阶段,四道权力边界

RFC 9691 把计划换钥分成四步。第一步让 A 发布只含当前键的 TAK,证明对象能够稳定维护。第二步生成 B、复制等价委派并发布互相指认的 TAK。第三步发布指向 B 的新 TAL,同时继续运营 A,照顾不处理 TAK 的客户端。第四步删除 A 仓库内容并销毁 A 私钥。

第二步证明新路径可测试;第三步涉及软件包、外部分发或人工配置;第四步撤掉旧恢复通道与旧权力。它们不是一个事务,也不应由一个“迁移完成”标签概括。

RFC 建议 B 的 TAL 与 TAK 使用不同 URI,以便估算哪些客户端走了 TAK 路径。但沉默不是收敛证据:它也可能意味着停机、缓存、退役、软件包更新或根本不支持。2025 年 7 月,RFC 作者在 APNIC 文章中说 RIR 正通过 NRO RPKI Program 研究实施工作;这是计划背景,不是任何具体部署或全体支持的证明。

删除 A 以后,只持有旧 TAL 的验证器无法先验证再学习 B,只能本地修复。若它错过了多代密钥,每一代都可能再等待 30 天。永久保留 A 能避免断崖,却保留旧私钥和旧仓库的权力面。退休时点必须由可解释的滞后证据与风险所有者决定。

TAK 也不能修复已经泄露的根私钥。掌握 A 的攻击者本就能控制 A 下的签名材料。双向关系适合正常、计划内迁移,不会凭空产生一位不受 A 控制的仲裁者。

RFC 8630 定义 TAL 引导;RFC 6487、RFC 6488、RFC 9286 与 RFC 6481 分别约束证书、签名对象、清单与仓库。更下游的 RFC 9319 仍只定义路由起源验证状态;信任锚换钥成功不等于路由器已经装载结果,更不等于数据包到达。

Lu Heng 的最小初始规范主张只统一必要接口,把未来决策留在本地并使其可见。现实层次框架要求签名对象、本地状态、仓库发布、验证输出、路由策略和网络结果各自留证。运行代码优先意味着,实际验证器的状态比一张全局日历更有证明力。

来源