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的结构描述)
| 字段 | 类型/取值 | 语义 |
|---|---|---|
| version | INTEGER,当前为0 | 对象格式版本,为未来演进预留 |
| customerASID | ASID(32位ASN) | 签发声明的客户AS号;必须与签名EE证书中的AS号一致,否则对象无效 |
| providers | SEQUENCE OF ProviderAS | 被授权的上游提供商AS列表(顺序无关、不允许重复;声明无上游时仅含AS0) |
| ├ providerASID | ASID | 某个被授权的提供商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 验证流程(消费侧)
- 验证器(rpki-client、Routinator等)从各RIR资料库同步ASPA对象与配套证书、Manifest、CRL;
- 按RPKI标准流程校验完整证书链与签名(RFC 6480/6487),并核对customerASID与EE证书AS号一致;
- 对同一customerASID的多个ASPA对象进行规范化处理(合并providers集、应用afiLimit),形成"每AS一张授权提供商表"的验证数据仓;
- 经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官方文档为准;草案内容可能随版本演进,引用时请注明版本号。
draft-ietf-sidrops-aspa-profile(解读基准v27,2026-06-19;最新v29,2026-07-29):datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-profile。
IETF RFC 6482《A Profile for Route Origin Authorizations (ROAs)》(2012年2月):rfc-editor.org/rfc/rfc6482。
IETF RFC 6487《A Profile for X.509 PKIX Resource Certificates》与RFC 6488《Signed Object Template for the RPKI》:rfc-editor.org/rfc/rfc6487。
IETF RFC 6492《A Protocol for Provisioning Resource Certificates》与RFC 6486《Manifests》、RFC 6489《Key Rollover》:rfc-editor.org/rfc/rfc6492。
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。
APNIC ASPA演示实现(rpki-aspa-demo):github.com/APNIC-net/rpki-aspa-demo;NLnet Labs Krill文档:krill.docs.nlnetlabs.nl。