01 · 存储库角色与"沉默的故障"
存储库是 RPKI 信任链的"最后一公里"。CA 签好对象后,必须把它们发布到 SIA 指向的存储库发布点,RP 才能拉取并验证。存储库的故障往往是一种"沉默的故障":它不像路由劫持那样立刻引发可见的流量异常,而是让 ROV 悄悄退化为"基于陈旧/缺失数据的验证"——防御在不知不觉中被削弱。
- 不可达(Unreachable):网络分区、DNS 误配、源站过载,使 RP 拉取失败。
- 非原子不一致(Non-atomic):Manifest 已更新但所引用文件尚未就位(或反之),RP 抓到中间态,将对象判为缺失/损坏。
- 内容陈旧(Stale):存储库可达但内容长时间未更新(如 CA 发布流程卡死),RP 持续使用旧 VRP。
- 被污染(Tampered):在 RRDP 场景下的中间人 withhold/replay,使 RP 无法获知更新(完整性+可用性双重威胁,第6页详述)。
02 · rsync vs RRDP:可用性对比
| 维度 | rsync | RRDP(HTTPS/CDN) |
|---|---|---|
| 源站负载 | 高:每个 RP 连接都需服务端大量 CPU/内存,易被 DoS | 低:内容发布后不可变,可经 CDN 缓存分发 |
| 抗 DoS / 扩展性 | 弱:源站直接承压 | 强:可借助 CDN 边缘节点吸收流量 |
| 部署成熟度 | 高:历史最久、几乎全兼容 | 高:主流 RP 与 RIR 均已支持,但仍有少数 RP 仅 rsync |
| 新威胁面 | 较少(但缺乏传输层完整性保护意识) | 引入对 CDN/TLS 的依赖,及 withhold/replay 威胁(需 TLS 校验 + 对象签名兜底) |
| 弹性结论 | 作为兜底保留 | 应作为首选(draft-ietf-sidrops-prefer-rrdp 方向) |
03 · 失效影响窗口建模
存储库失效对 ROV 的影响并非瞬时"全有全无",而是一个随时间的窗口。设存储库在 t0 失效,RP 的本地 VRP 缓存有生存时间(取决于 RP 刷新周期与 RTR hold time),则影响窗口 W 可粗略表示为:
W ≈ 失效持续时长 + RP缓存过期时延 + RTR会话保持时间 + 运维发现/恢复时延 若失效期间有"新ROA需生效"或"旧ROA需撤销": 影响 = max(未被及时授权的合法路由被误拦, 未被及时撤销的恶意/错误路由被放行)
- 对"新增授权"的影响:新签发的 ROA 无法被拉取 → 对应前缀的 ROV 仍基于旧视图(可能仍为 NotFound),但不会立即造成误拦(除非旧视图恰有冲突 ROA)。
- 对"撤销/更新"的影响:更危险——若某 ROA 需被撤销以阻止劫持,而存储库失效使其仍停留在 RP 缓存中,则防护失效窗口 = 缓存存活期。
- 对非原子不一致:影响是"对象被整片判为不可见",表现为该 CA 子树 ROA 大面积消失(见第3页 AFRINIC 案例)。
04 · 真实事件案例库(2020—2024)
以下案例均来自 RIR 公开邮件列表与第三方监测(如 packetvis.com、IEEE 综述),按"现象—影响—根因—缓解"结构化归档,是 RPKI 弹性研究最宝贵的实证素材:
| 时间 / 主体 | 现象与影响 | 根因 | 缓解 |
|---|---|---|---|
| 2020-02 RIPE NCC | 磁盘故障致 CRL 过期、ROA 无法发布 | 磁盘问题使 CRL/Manifest 未能按期重签 | 需执行完整 CA 密钥轮换才恢复 |
| 2020-04 RIPE NCC | 连接数突增,存储库对许多 RP 显示为"宕机"约 7 小时(RIPE 服务已在 CDN 上) | 突发连接风暴/容量不足 | 扩容与限速策略 |
| 2020-05-15 JPNIC | 硬件故障,存储库停服约 10 小时(JPNIC 官方公告) | 硬件失效 | 硬件更换 |
| 2021-02-15/16 RIPE NCC | RPKI 软件故障,08:07—18:06 UTC 无法发布更新;现有对象(有效期 8h 内)仍有效,无数据丢失;RIPE 自承未达 CPS 的 1h 撤销/8h 发布承诺 | CA 软件故障致发布停滞 | 重启系统恢复;加强监控(rpki-client 未察觉、Routinator 记录告警) |
| 2021-03-18 RIPE NCC | Manifest 引用了仓库中不存在的证书(原子性问题),RIPE 区域 ROA 批量消失;社区提交详细分析后 RIPE NCC 迅速处置,并发布了透明的事故报告 | 发布点操作缺乏原子性 | 原子发布与一致性检查;透明的事后报告 |
| 2022-02-16 RIPE NCC | rrdp.ripe.net 不可达,所有验证器回退 rsync 致其过载,形成级联 | DNS 误配 + 两处监控缺失 + rsync 过载 | DNS 修复 + 监控补强(RIPE 公开优秀事后报告) |
| 2022-08 ARIN | RRDP 服务中断约 1.5 小时,同时 ROA 发布延迟;rsync 兜底未受影响 | RRDP 服务故障 | rsync 回退生效 |
| 2022-09 ARIN | RRDP 证书过期,阻止了 ARIN 区域所有 RPKI 实例的更新 | RRDP TLS 证书过期 | 证书更新 |
| 2022-01-26~02-02 JPNIC | 访问日志占满磁盘,CRL/Manifest 无法更新 nextUpdate;2022-02-01 大量 ROA 险些在约 2 小时内过期,JPNIC 在到期前约 1 分钟完成处置(JPNIC 官方公告 + packetvis 记录) | 磁盘满 | 人工恢复发布;惊险避免大规模失效 |
| 2022-11—2024-01 AFRINIC | 反复顶级 Manifest 失效,ROA 消失 22%—78% 不等(详见第3页 §05) | 非原子发布 + Manifest 过期 | 尚未见公开技术报告/修复 |
| 2020-08-12 ARIN | BGPalerter 首次自动检测到 ARIN 区域多个前缀"不再被 ROA 覆盖";系 HSM 升级后新签名软件 bug | 签名软件缺陷 | 修复软件,随后数日数据清理 |
| 2020-04-06 RIPE NCC | 连接数突增,已对 RP 呈现不可达(RIPE 服务当时已位于 CDN 之上) | 突发连接负载 | 容量与限流策略 |
| 2021-02-06 TWNIC/APNIC | 委托 CA TWNIC 硬件故障,其下全部 ROA 消失 | 硬件故障 | 硬件恢复 |
| 2021-06-17 LACNIC | LACNIC 在 rsync 上整体消失,短时修复但无公开报告 | 未公开 | —(无公开报告) |
| 2023-04-15~06-06 LACNIC | 三次 TA 整体消失:负载均衡后端以相同 RRDP Session ID 呈现不同步内容;部分 RP 需重置 RRDP 会话恢复 | 负载均衡 + RRDP 会话 ID 复用 bug | 建立新 RRDP 会话临时缓解,软件补丁跟进;此后未再复发 |
| 2023-05-15/16 nic.br/LACNIC | 损坏的根 Manifest 致单一委托 CA 影响 LACNIC 区域 41.37% 的 ROA | 签名软件 bug(5-31 修复) | 打补丁 |
| 2023-05-14 AFRINIC | RRDP 间歇性不可达持续 10 天以上,用户实测下载速率低至 3KB/s;作为缓解临时禁用 RRDP;同事故中仓库 IPv6 不可达 | 服务器过载 + 带宽问题 | 临时禁用 RRDP;增补 IPv6 监控 |
| 2024-01-18 LACNIC | 12:20 UTC 先告警 100% ROA 即将过期,14:38 UTC 再告警全部 ROA 消失 | 签名软件更新引入 bug | 软件修复 |
| 2024-02-11 nic.br | Manifest 更新缺口约 6 小时,大量 ROA 先告警即将过期、随后消失、再恢复 | Manifest 重签流水线中断 | 6 小时后恢复 |
| 2024-07-10~12 Routinator 观测 | 部分 Routinator 实例未能同步到 RIPE NCC 数据,持续约两天(社区报告,draft-li 引用) | RP 侧同步异常 | 社区排查 |
案例来源与置信度说明:上表 2020-08 起各事故均可在 packetvis.com《RPKI Trust Anchor Malfunctions: A Review of the Last 3.5 Years》(NTT 工程师 Massimo Candela)逐条核对;JPNIC 事故有 JPNIC 官方公告(nic.ad.jp);RIPE 2022-02-16 有 RIPE NCC 官方事后报告。表中 2020-02 RIPE、2022-08/09 ARIN 三行转引自 IEEE 综述(10.1109/ANRP.2023.10178769),一手报告待补,置信度中等。2020-08 以来全球至少发生 21 起信任锚故障,约 37% 源于发布点操作缺乏原子性,AFRINIC 与 LACNIC 合计约占 80%(packetvis 统计)。
05 · 可用性度量方法
为把"弹性"从口号变为可量化指标,本课题建议对每一 RIR 信任锚及其存储库持续采集以下指标(具体采集实现见第8页):
| 指标 | 定义 | 弹性含义 |
|---|---|---|
| 存储库可达率 | 探测周期内 rsync/RRDP 端点成功响应的比例 | 直接反映 SPOF 可用性 |
| 同步时延 | CA 发布新对象到被 RP 观测到的中位/尾延迟 | 反映"撤销/更新"类防护的有效性 |
| 双栈可用率 | RRDP 与 rsync 同时可用的比例 | 反映回退能力;双栈皆不可 = 严重 |
| 原子一致性 | 抓取时 Manifest 与其引用文件一致的样本比例 | 反映非原子发布风险(AFRINIC 教训) |
| VRP 新鲜度 | RP 输出的 VRP 距"最新已发布状态"的延迟 | 端到端最终体现 ROV 视图的新鲜程度 |
| MTTR | 从故障发生到 RIR 公开报告/恢复的中位时长 | 反映运营成熟度与透明度 |
06 · RRDP 优先化与存储库问题陈述
- draft-ietf-sidrops-prefer-rrdp《RPKI Repository Requirements》:IETF sidrops 提出的 RRDP 优先化渐进方案(分阶段设想,以草案原文为准)——Phase 0:RIR 同时支持 rsync 与 RRDP;Phase 1:RIR 必须实现 RRDP;Phase 2:RP 软件优先 RRDP;Phase 3:RIR 以 RRDP 为主、rsync 仅兜底。目标是把对 rsync 的运营依赖降为"回退选项",缓解源站过载与 DoS 风险。注意:该草案最新版为 -01(2021-10),此后多年未见更新,请以 datatracker 实时状态为准。
- draft-li-sidrops-rpki-repository-problem-statement:系统陈述存储库问题——(1)多数存储库由单一 AS 托管,可达性高度依赖该 AS;(2)循环依赖:14 个存储库恰好承载其所在 AS 的 ROA,一旦仓库宕机、该 AS 路由因 ROV 被降级,反而更难访问仓库,形成"先有鸡还是先有蛋"的死锁;(3)随着委托 CA 增多,存储库数量将爆发式增长(预测全量部署时可达约 10K 仓库、140K RP),刷新成本与"恶意 CA 耗尽 RP"风险上升。
- RFC 9697(2024-09):《Detecting RPKI Repository Delta Protocol (RRDP) Session Desynchronization》定义了 RRDP 会话 ID/序列号失步的检测与恢复机制——直接回应 LACNIC 2023 年"多后端复用相同 Session ID 致 TA 整体消失"类事故,RP 软件应支持该机制。
循环依赖警示:上述"存储库所在 AS 的 ROA 由该存储库承载"的 14 个案例,是弹性设计的反面教材——它说明 RPKI 的可用性可能与其自身的路由安全状态相互绑架。部署时应确保验证器至少能通过一条"不受本仓库 ROA 约束"的路径访问仓库(如经独立管理网的 RRDP/CDN)。
6.1 恶意 CA 与 RP 资源耗尽(规模化风险)
随委托 CA 与存储库数量增长(draft-li 预测全量部署时可达约 10K 仓库、140K RP),RP 面临的不仅是可用性问题,还有被恶意 CA 拖垮的规模化风险:
- 树深度与对象量防护:主流 RP 已内置深度/数量限制——Routinator v0.14.1 默认 RPKI 树搜索深度为 32,rpki-client 默认为 12(draft-li 实测),可限制单个恶意 CA 制造的验证负担;但限制本身也可能被滥用为"通过深树隐藏恶意对象"的规避手段。
- 学术验证的攻击面:Stalloris(USENIX Security 2022)演示了 RPKI 状态降级攻击;rpkiller(arXiv 2022)研究对 RPKI 生态的系统性攻击;Beyond Limits(CCS 2023)与 Behind the Scenes of RPKI(IMC 2022)测量并揭示了 RPKI 信任结构中被忽视的弱点。上述研究均以防御为目的公开发表,其共同结论是:RPKI 的可用性与信任集中度问题需要系统性缓解,而非单点修补。
- 治理含义:draft-li 建议为存储库建立合理的准入与治理机制,避免"仓库数量爆炸"同时带来运维成本与攻击面膨胀。
07 · 冗余与高可用实践
| 实践 | 要点 |
|---|---|
| 部署 ≥2 个验证器 | geographically 分散,独立网络/供电;RTR 客户端配置多会话,避免单验证器成为 SPOF(第6、7页详述) |
| RRDP 优先 + rsync 兜底 | 验证器同时配置两种协议 URI,主源失败自动回退;优先 RRDP 以借力 CDN |
| 多 RRDP 镜像/CDN | 对关键区域配置多个 RRDP 端点;利用 CDN 边缘降低单点 |
| 本地 VRP 缓存与 SLURM | 缓存备份、设定 hold time;用 SLURM(RFC 8416)对关键前缀做本地白名单兜底,避免仓库失效导致误拦 |
| 发布点健康监控 | CA 侧监控 Manifest/CRL 新鲜度、原子一致性,并维护 Ghostbusters(RFC 6493)紧急联系人 |
本节参考来源(第4页)
以下来源支撑本页的案例、对比与度量方法。
RIPE NCC Routing-WG 邮件列表(2020—2022 多起 RPKI incident 公开复盘,含 2021-02、2022-02-16 等):ripe.net routing-wg。
packetvis.com《RPKI Trust Anchor Malfunctions: A Review of the Last 3.5 Years》(AFRINIC/JPNIC/ARIN/RIPE 故障统计):packetvis.com/blog/rpki-trust-anchor-malfunctions。
IETF RFC 8182《The RPKI Repository Delta Protocol (RRDP)》(2017):rfc-editor.org/rfc/rfc8182。
IETF draft-ietf-sidrops-prefer-rrdp《Resource Public Key Infrastructure (RPKI) Repository Requirements》(RRDP 优先化渐进方案):datatracker.ietf.org。
IETF draft-li-sidrops-rpki-repository-problem-statement《RPKI Repository Problem Statement and Analysis》(托管集中、循环依赖、规模预测):datatracker.ietf.org。
The RPKI Survey (IEEE):汇总 2020—2024 RPKI 基础设施 outage 案例(RIPE/JPNIC/ARIN/AFRINIC):ieeexplore.ieee.org/10296041。
IETF RFC 8416《SLURM》本地 VRP 覆盖:rfc-editor.org/rfc/rfc8416;RFC 6493《Ghostbusters Record》:rfc6493。