rpki/specs/08_aspa.md
2026-02-02 15:42:30 +08:00

5.7 KiB
Raw Blame History

08. ASPAAutonomous System Provider Authorization

8.1 对象定位

ASPAAutonomous System Provider Authorization是一种 RPKI Signed Object用于由“客户 AS”Customer AS, CAS签名声明其上游“提供者 AS”Provider AS, PAS集合以支持路由泄漏route leak检测/缓解。draft-ietf-sidrops-aspa-profile-21draft-ietf-sidrops-aspa-verification

ASPA 由 CMS 外壳 + ASPA eContent 组成:

  • 外壳RFC 6488更新RFC 9589
  • eContentdraft-ietf-sidrops-aspa-profile-21

8.2 原始载体与编码

  • 外壳CMS SignedData DER05_signed_object_cms.md。RFC 6488 §2-§3RFC 9589 §4。
  • eContentTypeid-ct-ASPAOID 1.2.840.113549.1.9.16.1.49draft-ietf-sidrops-aspa-profile-21 §2。
  • eContentDER 编码 ASN.1 ASProviderAttestationdraft-ietf-sidrops-aspa-profile-21 §3。

8.2.1 eContentType 与 eContent 的 ASN.1 定义(draft-ietf-sidrops-aspa-profile-21 §2-§3

ASPA 是一种 RPKI signed objectCMS 外壳见 05_signed_object_cms.md)。其 eContentTypeeContentpayload的 ASN.1 定义见 draft-ietf-sidrops-aspa-profile-21 §2-§3。

eContentTypeOIDdraft-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) }

eContentASPA 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 为 1MUST 显式编码(不得依赖 DEFAULT 省略)。draft-ietf-sidrops-aspa-profile-21 §3.1。
  • customerASID:客户 AS 号CASdraft-ietf-sidrops-aspa-profile-21 §3.2。
  • providers:授权的提供者 AS 集合SPAS。并对“自包含/排序/去重”施加额外约束(见下)。draft-ietf-sidrops-aspa-profile-21 §3.3。

8.3 解析规则eContent 语义层)

输入:RpkiSignedObject

  1. 解析 CMS 外壳,得到 econtent_typeecontent_der。RFC 6488 §3RFC 9589 §4。
  2. 要求 econtent_type == 1.2.840.113549.1.9.16.1.49draft-ietf-sidrops-aspa-profile-21 §2。
  3. econtent_der 以 DER 解析为 ASProviderAttestation ASN.1。draft-ietf-sidrops-aspa-profile-21 §3。
  4. 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 §3RFC 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 AspaEContentASProviderAttestation

字段 类型 语义 约束/解析规则 规范引用
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.2ASID 定义)
provider_as_ids list[int] Provider ASID 列表SPAS 长度 >= 1;且满足“不得包含 customer、升序、去重” draft-ietf-sidrops-aspa-profile-21 §3.3

8.5 字段级约束清单(实现对照)

  • eContentType 必须为 id-ct-ASPAOID 1.2.840.113549.1.9.16.1.49),且该 OID 必须同时出现在 eContentType 与 signedAttrs.content-type。draft-ietf-sidrops-aspa-profile-21 §2引用 RFC 6488
  • eContent 必须 DER 编码并符合 ASProviderAttestation ASN.1。draft-ietf-sidrops-aspa-profile-21 §3。
  • version 必须为 1且必须显式编码缺失视为不合规draft-ietf-sidrops-aspa-profile-21 §3.1。
  • providersprovider_as_ids)必须满足:
    • customer_as_id MUST 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 Extensioncustomer_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)。
  • EE 证书 不得包含 IP 资源扩展IP Address Delegation Extensiondraft-ietf-sidrops-aspa-profile-21 §4引用 RFC 3779

8.7 实现建议(非规范约束)

draft-ietf-sidrops-aspa-profile-21 给出了一条 RP 侧建议:实现可对单个 customer_as_idprovider_as_ids 数量施加上界(例如 4,000~10,000超过阈值时建议将该 customer_as_id 的所有 ASPA 视为无效并记录错误日志。draft-ietf-sidrops-aspa-profile-21 §6。