5.7 KiB
08. ASPA(Autonomous System Provider Authorization)
8.1 对象定位
ASPA(Autonomous System Provider Authorization)是一种 RPKI Signed Object,用于由“客户 AS”(Customer AS, CAS)签名声明其上游“提供者 AS”(Provider AS, PAS)集合,以支持路由泄漏(route leak)检测/缓解。draft-ietf-sidrops-aspa-profile-21;draft-ietf-sidrops-aspa-verification。
ASPA 由 CMS 外壳 + ASPA eContent 组成:
- 外壳:RFC 6488(更新:RFC 9589)
- eContent:
draft-ietf-sidrops-aspa-profile-21
8.2 原始载体与编码
- 外壳:CMS SignedData DER(见
05_signed_object_cms.md)。RFC 6488 §2-§3;RFC 9589 §4。 - eContentType:
id-ct-ASPA,OID1.2.840.113549.1.9.16.1.49。draft-ietf-sidrops-aspa-profile-21§2。 - eContent:DER 编码 ASN.1
ASProviderAttestation。draft-ietf-sidrops-aspa-profile-21§3。
8.2.1 eContentType 与 eContent 的 ASN.1 定义(draft-ietf-sidrops-aspa-profile-21 §2-§3)
ASPA 是一种 RPKI signed object(CMS 外壳见 05_signed_object_cms.md)。其 eContentType 与 eContent(payload)的 ASN.1 定义见 draft-ietf-sidrops-aspa-profile-21 §2-§3。
eContentType(OID):draft-ietf-sidrops-aspa-profile-21 §2。
id-ct-ASPA OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
pkcs-9(9) id-smime(16) id-ct(1) aspa(49) }
eContent(ASPA ASN.1 模块):draft-ietf-sidrops-aspa-profile-21 §3。
ASProviderAttestation ::= SEQUENCE {
version [0] INTEGER DEFAULT 0,
customerASID ASID,
providers ProviderASSet }
ProviderASSet ::= SEQUENCE (SIZE(1..MAX)) OF ASID
ASID ::= INTEGER (0..4294967295)
编码/解码要点(与上面 ASN.1 结构直接对应):
version:规范要求 MUST 为 1 且 MUST 显式编码(不得依赖 DEFAULT 省略)。draft-ietf-sidrops-aspa-profile-21§3.1。customerASID:客户 AS 号(CAS)。draft-ietf-sidrops-aspa-profile-21§3.2。providers:授权的提供者 AS 集合(SPAS)。并对“自包含/排序/去重”施加额外约束(见下)。draft-ietf-sidrops-aspa-profile-21§3.3。
8.3 解析规则(eContent 语义层)
输入:RpkiSignedObject。
- 解析 CMS 外壳,得到
econtent_type与econtent_der。RFC 6488 §3;RFC 9589 §4。 - 要求
econtent_type == 1.2.840.113549.1.9.16.1.49。draft-ietf-sidrops-aspa-profile-21§2。 - 将
econtent_der以 DER 解析为ASProviderAttestationASN.1。draft-ietf-sidrops-aspa-profile-21§3。 - 将
providers映射为语义字段provider_as_ids: list[int],并对其执行“约束检查/(可选)归一化”。draft-ietf-sidrops-aspa-profile-21§3.3。
8.4 抽象数据模型(接口)
8.4.1 AspaObject
| 字段 | 类型 | 语义 | 约束/解析规则 | 规范引用 |
|---|---|---|---|---|
signed_object |
RpkiSignedObject |
CMS 外壳 | 外壳约束见 RFC 6488/9589 | RFC 6488 §3;RFC 9589 §4 |
econtent_type |
Oid |
eContentType | 必须为 1.2.840.113549.1.9.16.1.49 |
draft-ietf-sidrops-aspa-profile-21 §2 |
aspa |
AspaEContent |
eContent 语义对象 | 见下 | draft-ietf-sidrops-aspa-profile-21 §3 |
8.4.2 AspaEContent(ASProviderAttestation)
| 字段 | 类型 | 语义 | 约束/解析规则 | 规范引用 |
|---|---|---|---|---|
version |
int |
ASPA 版本 | MUST 为 1 且 MUST 显式编码(字段不可省略) |
draft-ietf-sidrops-aspa-profile-21 §3.1 |
customer_as_id |
int |
Customer ASID | 0..4294967295 | draft-ietf-sidrops-aspa-profile-21 §3.2(ASID 定义) |
provider_as_ids |
list[int] |
Provider ASID 列表(SPAS) | 长度 >= 1;且满足“不得包含 customer、升序、去重” |
draft-ietf-sidrops-aspa-profile-21 §3.3 |
8.5 字段级约束清单(实现对照)
- eContentType 必须为
id-ct-ASPA(OID1.2.840.113549.1.9.16.1.49),且该 OID 必须同时出现在 eContentType 与 signedAttrs.content-type。draft-ietf-sidrops-aspa-profile-21§2(引用 RFC 6488)。 - eContent 必须 DER 编码并符合
ASProviderAttestationASN.1。draft-ietf-sidrops-aspa-profile-21§3。 version必须为 1,且必须显式编码(缺失视为不合规)。draft-ietf-sidrops-aspa-profile-21§3.1。providers(provider_as_ids)必须满足:customer_as_idMUST NOT 出现在provider_as_ids中;provider_as_ids必须按数值 升序排序;provider_as_ids中每个 ASID 必须 唯一。draft-ietf-sidrops-aspa-profile-21§3.3。
8.6 与 EE 证书的语义约束(为后续验证准备)
ASPA 的外壳包含一个 EE 证书,用于验证 ASPA 签名;规范对该 EE 证书与 ASPA payload 的匹配关系提出要求:
- EE 证书必须包含 AS 资源扩展(Autonomous System Identifier Delegation Extension),且
customer_as_id必须与该扩展中的 ASId 匹配。draft-ietf-sidrops-aspa-profile-21§4(引用 RFC 3779)。 - EE 证书的 AS 资源扩展 必须:
- 恰好包含 1 个
id元素; - 不得包含
inherit元素; - 不得包含
range元素。draft-ietf-sidrops-aspa-profile-21§4(引用 RFC 3779 §3.2.3.3 / §3.2.3.6 / §3.2.3.7)。
- 恰好包含 1 个
- EE 证书 不得包含 IP 资源扩展(IP Address Delegation Extension)。
draft-ietf-sidrops-aspa-profile-21§4(引用 RFC 3779)。
8.7 实现建议(非规范约束)
draft-ietf-sidrops-aspa-profile-21 给出了一条 RP 侧建议:实现可对单个 customer_as_id 的 provider_as_ids 数量施加上界(例如 4,000~10,000),超过阈值时建议将该 customer_as_id 的所有 ASPA 视为无效并记录错误日志。draft-ietf-sidrops-aspa-profile-21 §6。