rpki/specs/01_tal.md

4.4 KiB
Raw Blame History

01. TALTrust Anchor Locator

1.1 对象定位

TALTrust Anchor Locator用于向 RP 提供:

  1. 可检索“当前 TA 证书”的一个或多个 URI以及
  2. 该 TA 证书的 subjectPublicKeyInfoSPKI期望值用于绑定/防替换)。

RFC 8630 §2RFC 8630 §2.3。

1.2 原始载体与编码

  • 载体文本文件ASCII/UTF-8 兼容的行文本)。
  • 行结束:允许 CRLFLF。RFC 8630 §2.2。
  • 结构:[可选注释区] + URI 区 + 空行 + Base64(SPKI DER)。RFC 8630 §2.2。

1.2.1 注释区

  • 一行或多行,以 # 开头,后随人类可读 UTF-8 文本。RFC 8630 §2.2。
  • 注释行文本需符合 RFC 5198 §2 的限制RFC 8630 §2.2 引用)。

1.2.2 URI 区

  • 一行或多行,每行一个 TA URI按序排列。RFC 8630 §2.2。
  • TA URI MUSTrsynchttps。RFC 8630 §2.2。

1.2.3 空行分隔

  • URI 区后必须有一个额外的换行(即空行),用于与 Base64 区分隔。RFC 8630 §2.2(第 3 点)。

1.2.4 SPKIBase64

  • subjectPublicKeyInfo 以 DER 编码ASN.1)后,再 Base64 编码表示。RFC 8630 §2.2(第 4 点)。
  • 为避免长行Base64 字符串中 MAY 插入换行。RFC 8630 §2.2。
  • SPKI ASN.1 类型来自 X.509 / RFC 5280。RFC 8630 §2.2(第 4 点RFC 5280 §4.1.2.7。

1.2.4.1 SubjectPublicKeyInfo 的 ASN.1 定义RFC 5280 §4.1

TAL 中携带的是一个 X.509 SubjectPublicKeyInfo 的 DER 字节串(再 Base64。其 ASN.1 定义如下RFC 5280 §4.1。

SubjectPublicKeyInfo  ::=  SEQUENCE  {
     algorithm            AlgorithmIdentifier,
     subjectPublicKey     BIT STRING  }

其中 algorithm/subjectPublicKey 的取值受 RPKI 算法 profile 约束(例如 RSA 2048 + SHA-256 等SKI/AKI 计算仍用 SHA-1。RFC 5280 §4.1.2.7RFC 7935 §2-§3.1RFC 6487 §4.8.2-§4.8.3。

1.3 解析规则(语义层)

输入:TalFileBytes: bytes

解析步骤:

  1. LF / CRLF 识别行。RFC 8630 §2.2。
  2. 从文件开头读取所有以 # 开头的行,作为 comments(保留去掉 # 后的 UTF-8 文本或保留原始行均可,但需保持 UTF-8。RFC 8630 §2.2。
  3. 继续读取一行或多行非空行,作为 ta_uris保持顺序。RFC 8630 §2.2(第 2 点)。
  4. 读取一个空行必须存在。RFC 8630 §2.2(第 3 点)。
  5. 将剩余行拼接为 Base64 文本移除行分隔Base64 解码得到 subject_public_key_info_der。RFC 8630 §2.2(第 4 点)。
  6. 可选:将 subject_public_key_info_der 解析为 X.509 SubjectPublicKeyInfo 结构(用于与 TA 证书比对。RFC 8630 §2.3RFC 5280 §4.1.2.7。

URI 解析与约束:

  • ta_uris[*] 的 scheme MUSTrsynchttps。RFC 8630 §2.2。
  • 每个 ta_uri MUST 指向“单个对象”,且 MUST NOT 指向目录或集合。RFC 8630 §2.3。

1.4 抽象数据模型(接口)

1.4.1 Tal

字段 类型 语义 约束/解析规则 RFC 引用
raw bytes TAL 原始文件字节 原样保留(可选但建议) RFC 8630 §2.2
comments list[Utf8Text] 注释行(按出现顺序) 每行以 # 开头;文本为 UTF-8内容限制见 RFC 5198 §2 RFC 8630 §2.2
ta_uris list[Uri] TA 证书位置列表 至少 1 个;按序;每个 scheme 必须是 rsynchttps RFC 8630 §2.2
subject_public_key_info_der DerBytes TA 证书 SPKI 的期望 DER Base64 解码所得 DERBase64 中可有换行 RFC 8630 §2.2

1.4.2 TaUri(可选细化)

若你的实现希望对 URI 做更强类型化,可在 Tal.ta_uris 上进一步拆分为 TaUri 结构。

字段 类型 语义 约束/解析规则 RFC 引用
uri Uri 完整 URI 文本 scheme 为 rsynchttps RFC 8630 §2.2
scheme enum rsync / https uri 解析 RFC 8630 §2.2

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

  • TAL 由(可选)注释区 + URI 区 + 空行 + Base64(SPKI DER) 组成。RFC 8630 §2.2。
  • URI 区至少 1 行,每行一个 TA URI顺序有意义。RFC 8630 §2.2。
  • TA URI 仅允许 rsynchttps。RFC 8630 §2.2。
  • Base64 区允许插入换行。RFC 8630 §2.2。
  • 每个 TA URI 必须引用单个对象,不能指向目录/集合。RFC 8630 §2.3。