课题研究 RPKI路由安全 子课题05 · 第3页 / 共8页
05子课题 · ASPA(RPKI V2)与路径验证演进

ASPA对象规范深度解析第3页:对象规范与生命周期

本页逐字段解读draft-ietf-sidrops-aspa-profile草案定义的ASPA对象:四层封装结构(EE证书→CMS SignedData→ASPA内容→资料库管理)、核心字段(version/customerASID/providers/afiLimit)的精确语义、provider-free声明、能表达与不能表达的商业关系边界、完整的签发—验证—撤销生命周期,并与ROA(RFC 6482)做结构化对比。同时给出编码结构示意与注册操作中的五类常见错误模式,为第4页的验证算法建立对象层基础。

ASPA对象结构customerASIDproviders / afiLimitprovider-freeEE证书绑定RFC 6492供应协议Manifest / CRL研究状态:研究中
规范依据draft-ietf-sidrops-aspa-profile v27(2026-06-19,解读基准;最新v29,2026-07-29,已完成WGLC评审)
托管服务RIPE NCC生产(2025-11-26)、ARIN生产(2026-01-20)、APNIC 2026年上半年上线(以官方公告为准)
前置知识建议先读第2页理解ASPA在路线对比中的定位

01 · ASPA对象的定位与总体结构

1.1 规范来源与版本说明

ASPA对象的格式由IETF SIDROPS工作组草案draft-ietf-sidrops-aspa-profile定义(截至2026年6月为第27版,处于工作组最后征求意见阶段)。该草案与ROA规范(RFC 6482)在结构哲学上保持高度一致:ASPA同样是RPKI签名的CMS对象,由AS号持有者的终端实体(EE)证书签名,托管于RIR维护的RPKI资料库(repository)中,经Manifest与CRL机制管理时效性。

1.2 对象封装的四层结构

  • EE证书层:ASPA由"客户AS"(customer AS)的EE证书私钥签名。EE证书由该AS的资源证书(CA证书链)签发,证书中携带AS号资源(与RFC 6487规定的AS号编码方式一致)。因此,ASPA的权威性直接继承RPKI信任链:任何人均可沿 RIR信任锚→CA证书→EE证书 的链条验证签名,无需任何额外信任假设。
  • CMS SignedData层:对象按RFC 6488(RPKI签名对象模板)封装为CMS SignedData,eContent为DER编码的ASPA内容。
  • ASPA内容层:核心字段见§02。
  • 资料库管理层:ASPA对象发布于RIR资料库,纳入Manifest(RFC 6486)清单管理;撤销通过重签不含该ASPA的清单、吊销EE证书或使对象过期实现。

与ROA的本质同构:ROA声明"哪个AS可以宣告我的哪个前缀",ASPA声明"哪个AS可以作为我的上游提供商转发我宣告的路由"。两者共享签名主体(资源持有者)、证书体系、托管服务与分发通道——这正是ASPA部署成本远低于BGPsec的根本原因。

02 · 核心字段详解

2.1 字段总览(按aspa-profile草案v27的结构描述)

字段类型/取值语义
versionINTEGER,当前为0对象格式版本,为未来演进预留
customerASIDASID(32位ASN)签发声明的客户AS号;必须与签名EE证书中的AS号一致,否则对象无效
providersSEQUENCE OF ProviderAS被授权的上游提供商AS列表(顺序无关、不允许重复;声明无上游时仅含AS0)
├ providerASIDASID某个被授权的提供商AS号
└ afiLimit(可选)AFI(IPv4=1 / IPv6=2)将该条提供商授权限定于单栈场景;缺省表示双栈均授权

2.2 字段语义的精确解读

  • customerASID与EE证书绑定:这是ASPA防伪的根基。验证器在校验签名时同步核对证书AS号与customerASID是否一致——攻击者无法用自己的证书为受害AS签发ASPA,也就无法伪造"他人授权我作其提供商"的声明。
  • providers列表的方向性:声明是单向的:customerASID → providerASID 表示"我承认P是我的提供商"。它不蕴含"P承认我是其客户"(后者需要P自己签发包含customerASID=C的ASPA,或C的ASPA存在且P未否认——注意ASPA模型本身不含"否认"机制,见第7页讨论)。
  • afiLimit的工程动机:现实中存在仅购买单栈转接的场景(如只买IPv4转接、IPv6走其他上游)。afiLimit允许AS精确表达单栈授权,避免验证器将双栈语义强加于单栈商业关系,减少误判。
  • provider-free ASPA(providers仅含AS0):顶级网络(tier-1)无上游。通过在providers集合中仅声明保留AS号0(AS0)表达transit-free语义,可让验证器将路径顶点判定从"不可判定"提升为Valid——这是草案鼓励的最佳实践之一(人可读记法示例:AS64500 => AS0)。

2.3 合法关系与声明覆盖的对照

商业关系ASPA能否表达说明
客户—提供商(C购买P的转接)能(核心场景)C签发包含P的ASPA;C亦可能被P列入其cone管理范围
对等互联(peer-to-peer)不能对等关系无"客户授权提供商"语义,ASPA不验证(这是已知盲区,第7页详析)
sibling/联盟(同一管理域多AS)不能准确表达sibling关系是双向转接,与ASPA单向语义冲突,属复杂关系范畴
IXP路由服务器(RS)场景部分能RS-client与RS的关系可通过将RS声明为提供商近似表达;RS与RS-peer(RS之间)的关系则超出模型
无上游的tier-1能(provider-free)providers集合仅含AS0的显式声明

03 · 对象生命周期:签发、发布、验证、撤销

3.1 签发与托管服务

ASPA的签发路径与ROA一致:AS号持有者通过所属RIR的托管RPKI系统(托管环境下的证书供应遵循RFC 6492框架)或自托管CA(如Krill)生成EE证书与ASPA对象,对象经RIR资料库发布(rsync/RRDP)供全球验证器抓取。RIR支持状态(截至2026年):RIPE NCC于2025年11月26日在RPKI Dashboard提供生产级ASPA管理;ARIN于2026年1月在ARIN Online上线(含自动续期);APNIC于2026年上半年上线(以官方公告为准;已发布签名演示实现);LACNIC承诺2026年底前、AFRINIC列入路线图。

3.2 验证流程(消费侧)

  1. 验证器(rpki-client、Routinator等)从各RIR资料库同步ASPA对象与配套证书、Manifest、CRL;
  2. 按RPKI标准流程校验完整证书链与签名(RFC 6480/6487),并核对customerASID与EE证书AS号一致;
  3. 对同一customerASID的多个ASPA对象进行规范化处理(合并providers集、应用afiLimit),形成"每AS一张授权提供商表"的验证数据仓;
  4. 经RTR扩展(draft-ietf-sidrops-8210bis,定义ASPAs PDU)将数据仓下发给路由器;路由器据此执行AS_PATH验证(算法见第4页)。

3.3 撤销与更新

  • 关系变更:客户更换上游时,需撤销旧ASPA并签发新ASPA;RIR托管界面(如RIPE NCC Dashboard)通常提供"替换声明"操作;
  • 证书到期:EE证书与CA证书均有有效期(常见为一年托管周期),到期未续签的对象自动失效——误期未续签会造成自身路由被误判的风险,运营纪律要求高(与子课题03的ROA过期问题同构);
  • 密钥轮换:按RFC 6489的CA密钥轮换流程处理,轮换期间需保持新旧链均可验证。

04 · ASPA与ROA对象的结构对比

维度ROA(RFC 6482)ASPA(aspa-profile草案)
声明主体IP前缀持有者AS号持有者
声明内容哪个AS可以宣告哪个前缀(含maxLength)哪些AS是我的合法上游提供商(含afiLimit)
签名证书资源IP地址块AS号
验证消费ROV:AS_PATH的起源AS校验AS_PATH验证:逐跳关系校验(第4页)
粒度风险maxLength设置不当造成误杀/漏放上游列表不完整造成Unknown盲区;afiLimit错配造成误判
托管服务同一RIR托管体系、同一EE证书基础设施、同一Manifest/CRL机制、同一RTR分发通道(草案扩展)

05 · 编码结构示意

以下为ASPA内容的抽象结构示意(帮助理解字段关系,非完整DER编码,实现请以aspa-profile草案v27的正式ASN.1模块为准):

ASPA ::= SEQUENCE {
    version         INTEGER (0),            -- 格式版本
    customerASID    ASID,                   -- 客户AS号(须与EE证书AS号一致)
    providers       SEQUENCE (SIZE(1..MAX)) OF ProviderAS
}

ProviderAS ::= SEQUENCE {
    providerASID    ASID,                   -- 被授权的上游提供商AS号
    afiLimit        AFI OPTIONAL            -- 1=IPv4, 2=IPv6;缺省=双栈授权
}

-- 业务语义示例:
-- 客户AS 64496 声明其上游为 64500(双栈)与 64501(仅IPv4)
ASPA {
  version      = 0,
  customerASID = 64496,
  providers    = [ {providerASID=64500},
                   {providerASID=64501, afiLimit=1} ]
}

-- transit-free(无上游/tier-1)声明:providers仅含保留AS号0
ASPA {
  version      = 0,
  customerASID = 64497,
  providers    = [ {providerASID=0} ]   -- 仅含AS0
}

编码注意:①providers列表顺序无关且不允许重复;②单个providerASID带afiLimit时,不同afi的重复声明是合法的(同一提供商分别授权v4/v6);③仅含AS0的provider-free声明与"未签发任何ASPA"是完全不同的状态——前者是可将顶点判为Valid的显式声明,后者是不可判定的缺失声明(No Attestation),验证算法对二者处理截然不同(第4页§02)。

06 · 注册操作中的常见错误模式

错误模式后果预防/缓解
上游列表遗漏(最常见)被遗漏的上游转发该客户路由时,路径段判为Unknown/Invalid,可能触发下游丢弃上游变更流程中同步更新ASPA;用验证器自检"我的声明是否覆盖当前真实上游"
afiLimit误配合法单栈路径被误判双栈业务不带afiLimit;单栈上游显式标注
证书/对象过期未续签自身AS的所有声明失效,全网对该AS路径的验证退化为Unknown托管服务自动续期(ARIN已支持);监控清单有效期
重复声明/竞态新旧ASPA在资料库中并存期间,验证器取并集(语义安全,但增加审计复杂度)用RIR Dashboard的"替换"语义而非手动堆积
误用ASPA表达对等关系语义错误:peer出现在providers列表中会被解读为"转接授权"对peer不签发任何声明;依靠ASPA盲区分析(第7页)评估残余风险

本节参考来源(第3页)

以IETF官方文档与RIR官方文档为准;草案内容可能随版本演进,引用时请注明版本号。

[1]

draft-ietf-sidrops-aspa-profile(解读基准v27,2026-06-19;最新v29,2026-07-29):datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-profile。

[2]

IETF RFC 6482《A Profile for Route Origin Authorizations (ROAs)》(2012年2月):rfc-editor.org/rfc/rfc6482。

[3]

IETF RFC 6487《A Profile for X.509 PKIX Resource Certificates》与RFC 6488《Signed Object Template for the RPKI》:rfc-editor.org/rfc/rfc6487。

[4]

IETF RFC 6492《A Protocol for Provisioning Resource Certificates》与RFC 6486《Manifests》、RFC 6489《Key Rollover》:rfc-editor.org/rfc/rfc6492。

[5]

RIPE Labs《ASPA in the RPKI Dashboard: A New Layer of Routing Security》(2025年12月15日,托管操作说明):labs.ripe.net;ARIN ASPA文档:arin.net/resources/rpki/aspa。

[6]

APNIC ASPA演示实现(rpki-aspa-demo):github.com/APNIC-net/rpki-aspa-demo;NLnet Labs Krill文档:krill.docs.nlnetlabs.nl。