课题研究 RPKI路由安全 子课题03 · 第2页 / 共8页
03子课题 · ROA数据质量分析与错误识别

ROA数据质量分析与错误识别第2页:ROA技术体系、数据模型与错误原理

要分析ROA的数据质量,必须先精确理解"ROA是什么、它由谁以何种密码学方式产生、路由器又如何消费它"。本页从RPKI信任链出发,逐层拆解RFC 6482规定的ROA对象数据模型、RFC 6483规定的ROV三态判定算法,并剖析ROA的签发/吊销生命周期。只有把这些"正确形态"刻画清楚,才能在第4页建立准确的"错误形态"分类学——质量分析的本质,就是拿真实数据对照这套规范,找出偏离。

RFC 6482RFC 6483X.509资源证书EE证书ManifestmaxLengthROV三态研究状态:研究中
所属专题互联网基础设施安全 › RPKI路由安全
前置知识第1页:研究总览与背景定位
后续衔接第3页:数据采集与治理 → 第4页:错误识别方法论

01 · ROA在RPKI信任链中的位置

ROA并非孤立存在,而是RPKI密码学信任链末端的"签名对象(Signed Object)"。理解整条链,才能理解"ROA是如何被验证器信任、又会在哪个环节失效"的。

1.1 从信任锚到ROA的五层结构

层级角色与产出失效对ROA质量的影响
① 信任锚(Trust Anchor)五大RIR各自的根CA证书,自签名,作为验证起点(RFC 6490定义了TAL信任锚定位器)信任锚证书过期/轮换失败,会导致其下全部子对象(含所有ROA)在验证器中变无效
② RIR CA / issuer CARIR(及其下属NIR/子CA)签发的中间CA证书,承上启下分发资源中间CA证书过期、被撤销或Manifest陈旧,会使其子树ROA集体失效
③ 资源证书(Resource Cert)携带RFC 3779地址/AS扩展的EE或CA证书,声明某主体被授权的IP与AS资源范围ROA必须由"在其资源范围内"的证书签发;越界签发即构成over-claim(第4页详述)
④ 终端实体证书(EE Cert)每个ROA/签名对象由一张短期EE证书签名,EE证书嵌套在资源证书体系内EE证书有效期通常较短(数天到数月),其过期会使对应ROA立即失效——这是最常见的"生命周期型"质量缺陷
⑤ ROA签名对象由EE证书签名的CMS对象,含asID与ipAddrBlocks,即最终被ROV消费的授权声明对象本身字段错误(错误asID、前缀、maxLength)即"配置型"缺陷

1.2 Manifest与CRL:容易被忽视的"同步闸门"

RPKI的可用性高度依赖Manifest(RFC 6486)与CRL(证书撤销列表)。Manifest是一份"内容清单",列出某CA下所有已发布对象的哈希值;验证器会先核对Manifest,确认拉取到的对象与签发者发布的一致。一旦Manifest或CRL因发布流程故障而陈旧(stale)或未及时更新,许多RP实现会据此判定该CA子树"不一致",进而拒绝其中的ROA——即便ROA对象本身毫无问题。这正是第1页所述"生命周期型/存储库型"缺陷的典型来源,也是ROA质量监控必须覆盖Manifest新鲜度的原因。需要说明的是,Manifest规范RFC 6486已被RFC 9286(2022年6月)更新取代,生产RP实现普遍遵循新版;引用与实现时应注意版本对应关系。

关键洞察:ROA的"有效性"是密码学有效性与新鲜度的乘积。一条ROA可能字段完全正确,却因为上层EE证书过期、或Manifest未及时刷新,而在启用ROV的网络中瞬间失去保护力甚至变成无效——质量分析必须把"证书/Manifest新鲜度"与"字段正确性"放在同等位置。

02 · ROA对象数据模型(RFC 6482)

RFC 6482以ASN.1定义了ROA的精确结构。准确记忆这一结构是识别字段级错误的前提。一个ROA对象的核心字段如下:

RouteOriginAttestation ::= SEQUENCE {
    version         [0] INTEGER DEFAULT 0,        -- 版本号(默认0)
    asID                ASID,                     -- 被授权的起源AS号
    ipAddrBlocks        SEQUENCE OF IPAddressFamily  -- 被授权的前缀族
}

IPAddressFamily ::= SEQUENCE {
    addressFamily      OCTET STRING,              -- IPv4(0001)或IPv6(0002)
    addresses          SEQUENCE OF ROAIPAddress
}

ROAIPAddress ::= SEQUENCE {
    address            IPAddress,                  -- 前缀(含掩码)
    maxLength    [0] INTEGER OPTIONAL             -- 可选的最大前缀长度
}
图示:RFC 6482 ROA对象核心ASN.1结构(简化呈现)

2.1 三个必须精确的字段

  • asID:唯一被授权作为该组前缀起源的AS号。若填写错误(如写成上游/邻居AS),则真实宣告者会被判Invalid——这是高频"配置型"错误。
  • address(前缀):授权覆盖的地址块。注意一个ROA只能包含同一地址族的前缀(IPv4与IPv6必须分两个ROA);一个ROA可包含多个前缀,但它们共享同一个asID。
  • maxLength(可选):限定被授权前缀可被宣告的最大掩码长度。它约束的是"宣告的具体程度",而非"覆盖范围的下限"。省略maxLength等价于"只允许与address完全相同长度的前缀"(即maxLength = address前缀长度)。

2.2 一个常被误解的语义:ROA授权的是"范围",不是"精确前缀"

设某ROA声明:asID = AS64500,address = 203.0.113.0/24,maxLength = 24。它授权AS64500宣告203.0.113.0/24 这一条(因为maxLength=24=前缀长度,不允许更具体)。若改为maxLength = 23,则授权AS64500宣告203.0.112.0/23 及其任何更具体前缀(含203.0.112.0/24、203.0.113.0/24)。因此:maxLength必须大于等于address的前缀长度才有意义,且它开放的是"更具体"一侧。把maxLength设得比address本身还小,该ROA实际上无法匹配任何真实宣告(因为宣告至少要与address等长),属于逻辑错误。

2.3 ROA的物理形态:CMS签名对象(RFC 6488)

在存储库中,一个ROA文件(.roa)并非裸ASN.1,而是符合RFC 6488《Signed Object Template for the RPKI》的CMS(Cryptographic Message Syntax, RFC 5652)签名对象:外层为CMS SignedData结构,content字段内嵌上述RouteOriginAttestation内容,由EE证书对应的私钥签名。RP验证器正是按这一模板解析与验签的。这意味着:质量分析的对象粒度是"CMS签名对象"而非纯数据字段——任何编码不合法(如非DER编码)的对象在解析阶段即被淘汰,这本身就是一道前置质量闸门。

2.4 路由器侧的消费通道:RTR协议(RFC 6810 / RFC 8210)

RP验证器并不让路由器直接解析RPKI对象,而是通过RTR(RPKI to Router)协议下发验证结果:RFC 6810定义v0,RFC 8210定义v1(增加expires等参数,推荐用于生产)。路由器以RTR客户端身份周期性地从RP获取VRP集合,并据此执行ROV。由此形成一条"RIR存储库 → RP验证 → RTR下发 → 路由器判定"的完整链路——链路中任何一环(存储库不可用、RP验证失败、RTR会话中断)都会改变路由器看到的ROA视图,质量分析必须区分"ROA本身错误"与"消费链路异常"。

03 · ROV验证算法与三态判定(RFC 6483)

RFC 6483规定了路由器(或RP验证器)如何把一条BGP路由(起源AS = O,前缀 = P)映射为三种状态。算法逻辑严谨但存在若干易错点:

3.1 判定流程

  1. 在ROA库中查找覆盖前缀P的所有ROA(即ROA的address是P的less-specific或equal,且前缀族匹配)。
  2. 若没有任何ROA覆盖P → 状态为 NotFound。
  3. 若存在覆盖P的ROA集合:
    • 若其中至少一条ROA满足:asID == O 且(该ROA对此前缀无maxLength限制,或 P的长度 ≤ 该ROA的maxLength)→ 状态为 Valid。
    • 否则(所有覆盖ROA要么asID≠O,要么maxLength过小)→ 状态为 Invalid。

3.2 三个易错点(直接关联数据质量)

易错点说明质量缺陷映射
最长匹配(most-specific)陷阱ROV只看"是否有一条覆盖ROA使路由Valid",并不要求最具体覆盖。若同时存在一条授权正确AS的宽松ROA和一条授权错误AS的ROA,路由仍可能Valid——但宽松ROA可能正是削弱防护的错误配置maxLength过大(第2.2/第6节)
maxLength边界路由前缀长度必须≤maxLength才Valid;"等于"是允许的,"超过1位"即Invalid。length=maxLength+1 是最常见的误伤来源maxLength过严(配置型)
多ROA覆盖共存同一前缀可有多个不同asID的ROA(多归属/任播/迁移)。任一匹配即Valid。若其中一个asID填错,会造成"合法AS被Invalid、错误AS反而可Valid"的混乱错误asID / 冗余ROA(配置型/一致性型)

3.3 一个特殊的质量相关对象:AS 0 ROA(宣告否定,RFC 6483第4节)

RFC 6483第4节定义了AS 0 ROA:asID填0的ROA是前缀持有者对其地址块及其所有更具体前缀的"不应在路由中使用"的密码学声明。按惯例其maxLength应设为32(IPv4)/128(IPv6)。它在质量分析中有两类关联:其一,它是合法的"否定型授权",错误检测规则必须把asID=0识别为合法取值而非"错误asID";其二,当持有者永久下线一段地址时,用AS 0 ROA兜底否定比"删除ROA"更稳妥——删除只会让前缀回到NotFound(无保护),而AS 0 ROA能让其所有更具体宣告被判Invalid,防止地址回收后被他人劫持利用。这是本课题"僵尸ROA治理"中值得推荐的规范化处置手段。

ROV判定流程(单条路由视角)
从BGP路由到Valid/Invalid/NotFound的逐跳判定
说明:依据RFC 6483判定逻辑绘制的流程示意。

04 · ROA生命周期与签发/吊销

ROA不是"签一次永久有效"的静态数据,而是有生命周期的密码学对象。理解生命周期,才能理解"过期"类质量缺陷为何系统性存在。

4.1 签发链路(Provisioning)

资源持有者通过RIR/NIR的门户或RFC 6492定义的供应协议(Provisioning Protocol)请求签发ROA;RIR在其资源证书下生成一张短期EE证书,用它对ROA内容做CMS签名,再把ROA与其Manifest发布到存储库。整条链路涉及多张证书的有效期叠加。

4.2 有效期与重签(Re-signing)

  • EE证书有效期短:ROA绑定的EE证书通常有效期较短(常见数天至数月),需要由RIR的签发系统自动定期重签。若RIR侧自动化流程出现中断,批量ROA会在EE到期后同时失效。
  • CA证书轮换:RIR根CA/中间CA证书也有有效期,需按RFC 6489(CA Key Rollover)进行密钥轮换,新老证书需有一段重叠期以保证平滑过渡;轮换失败会造成大范围失效。
  • 业务侧变更:当持有者转让地址、下线业务、变更起源AS时,必须主动吊销或更新对应ROA,否则留下僵尸/越界数据。

4.3 吊销机制

ROA的"吊销"主要通过两种机制体现:①在存储库中删除该对象并更新Manifest;②在CRL中标记其EE证书为已撤销。验证器据此判定对象不再可信。质量分析中,"本应被吊销却仍在库"与"已删除却因Manifest滞后仍被部分RP看到"都是需要关注的边界情形。

05 · 错误产生的根因分类

把第1页的威胁模型落到"技术根因"层面,ROA质量缺陷可归纳为四个相互交叉的根因族。第4页将在此基础上建立可操作的错误分类学。

根因族机理典型错误(预览)
人为/流程配置人在门户或API中录入字段时出错;迁移/割接窗口未及时同步;对ROA语义理解偏差错误asID、前缀写错、maxLength误设
自动化/系统RIR签发系统重签失败、Manifest/CRL发布延迟;RP同步异常;工具链bug批量过期、陈旧Manifest、双通道不一致
资源治理地址转让/回收/合并未同步清理;多主体对同一资源的管理权错位僵尸ROA、越界授权(over-claim)
策略意图为"省事"故意放宽maxLength;为兼容临时宣告留宽松授权未回收maxLength过大、冗余宽松ROA

5.1 同一缺陷在不同RP下的后果可能不同:RFC 6487 与 RFC 8360

按RFC 6487的严格验证模式,资源证书越界(overclaim)即整体拒绝;而RFC 8360《Resource Public Key Infrastructure (RPKI) Validation Reconsidered》(2018年)定义了替代验证流程:签发CA可通过特定的策略OID声明"按交集接受"——即对越界证书只接受其与签发证书资源范围的交集部分。这意味着同一张over-claim ROA,在严格模式RP下被整体拒收,在交集模式RP下可能部分有效。质量分析报告必须注明所依据的验证模式,否则同一结论在不同读者环境中会得出不同的处置判断。这也是本课题在采集环节记录RP实现与版本号的原因。

06 · maxLength的深层陷阱

maxLength是ROA中最容易被"好心办坏事"的字段,值得单列。它同时影响"防护强度"与"误伤风险"两个相反的方向:

  • 过严(maxLength < 真实最具体宣告长度):合法运营商为流量工程对前缀做deaggregation(如宣告/24而非/23),但ROA maxLength只到/23,则更具体的/24被判定Invalid → 启用ROV的对等方丢弃 → 自伤型中断。这是部署ROV后最常见、最痛的"首痛"。
  • 过松(maxLength 远大于真实需要):例如为203.0.113.0/24设maxLength=32,等于授权该AS可宣告到/32的任何更具体前缀。攻击者若劫持该AS的更具体前缀(sub-prefix hijack),因长度≤32而仍然Valid,ROA对sub-prefix劫持完全失效。RFC 7454(BCP 194,2015年2月)在其路由起源验证相关章节明确建议:maxLength应设为"真实宣告的最大长度",不应盲目放大。
  • 等于address长度(省略maxLength):只允许精确该前缀,最安全但最不灵活——任何更具体宣告都会Invalid。

专题规范 RFC 9319:2022年10月发布的RFC 9319《The Use of maxLength in the Resource Public Key Infrastructure (RPKI)》系统阐述了maxLength的双刃剑效应:设置过大的maxLength会让攻击者对被覆盖前缀的更具体部分发起"划算"的sub-prefix劫持且仍被判Valid,使ROA形同虚设;该RFC建议仅在确有更具体宣告需求时才设置maxLength,且取值应紧贴真实宣告长度。实务中大量"为省事"而把maxLength直接设为32/128的ROA,正是本课题重点识别的P1级质量缺陷。

质量分析要点:判断maxLength是否"合理",不能脱离该前缀的真实BGP宣告长度分布。一条"字段合法"的ROA,若其maxLength与真实最具体宣告长度长期不一致,要么在误伤合法路由(过严),要么在削弱防护(过松)。本课题第5页将把"maxLength vs 实际宣告长度"作为核心偏差指标。

07 · 各RIR平台的ROA表达差异

尽管ROA的底层格式(RFC 6482 ASN.1)是统一的,但五大RIR/NIR的门户交互与默认值存在差异,这些差异会间接影响数据质量:

维度差异点对质量的影响
默认值部分门户在创建ROA时,maxLength默认等于前缀长度,部分默认留空/自动推断默认值不同导致"随手创建"的ROA防护强度与误伤风险不同
多前缀合并部分平台允许一个asID下批量勾选多个前缀生成单张ROA;部分要求逐条批量生成便于管理,但一旦asID填错,错误被放大到多条前缀
资源范围校验各RIR在签发前对"是否越界(超出资源证书范围)"的预校验严格度不同弱校验的平台更易产生over-claim ROA
撤销/过期提醒提醒机制与Dashboard可见性不同提醒弱的平台上,过期/僵尸ROA更易堆积

因此,跨RIR的ROA质量比较需要归一化:本课题在采集时以RFC 6482对象本身为唯一真相源,门户差异仅作为"错误成因的背景解释",不纳入质量打分。

本节参考来源(第2页)

以下均为真实可查的权威来源,用于支撑本页技术表述。

[1]

RFC 6482《A Profile for Route Origin Authorizations (ROAs)》:rfc-editor.org/rfc/rfc6482。ROA的ASN.1结构与字段语义。

[2]

RFC 6483《Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs)》:rfc-editor.org/rfc/rfc6483。Valid/Invalid/NotFound判定算法。

[3]

RFC 6487《A Profile for X.509 PKIX Resource Certificates》与 RFC 3779《X.509 Extensions for IP Addresses and AS Identifiers》:rfc6487 / rfc3779。资源证书与地址/AS扩展。

[4]

RFC 6486《Manifests for the RPKI》与 RFC 6489《CA Key Rollover》、RFC 6492《RPKI Provisioning Protocol》:rfc6486 / rfc6489 / rfc6492。

[5]

RFC 7454《BGP Operations and Security》(2015年2月,BCP 194):rfc-editor.org/rfc/rfc7454。BCP 194,含maxLength配置与路由起源验证运维建议。

[7]

RFC 6488《Signed Object Template for the RPKI》与 RFC 5652(CMS):rfc-editor.org/rfc/rfc6488。ROA等签名对象的CMS封装格式。

[8]

RFC 6810《The RPKI/RTR Protocol》与 RFC 8210(RTR v1):RP验证器向路由器下发VRP的标准协议。

[6]

RFC 6490《Trust Anchor Locator》:rfc-editor.org/rfc/rfc6490。信任锚定位器定义。