4.4 KiB
4.4 KiB
01. TAL(Trust Anchor Locator)
1.1 对象定位
TAL(Trust Anchor Locator)用于向 RP 提供:
- 可检索“当前 TA 证书”的一个或多个 URI;以及
- 该 TA 证书的
subjectPublicKeyInfo(SPKI)期望值(用于绑定/防替换)。
RFC 8630 §2;RFC 8630 §2.3。
1.2 原始载体与编码
- 载体:文本文件(ASCII/UTF-8 兼容的行文本)。
- 行结束:允许
CRLF或LF。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 MUST 是
rsync或https。RFC 8630 §2.2。
1.2.3 空行分隔
- URI 区后必须有一个额外的换行(即空行),用于与 Base64 区分隔。RFC 8630 §2.2(第 3 点)。
1.2.4 SPKI(Base64)
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.7;RFC 7935 §2-§3.1;RFC 6487 §4.8.2-§4.8.3。
1.3 解析规则(语义层)
输入:TalFileBytes: bytes。
解析步骤:
- 按
LF/CRLF识别行。RFC 8630 §2.2。 - 从文件开头读取所有以
#开头的行,作为comments(保留去掉#后的 UTF-8 文本或保留原始行均可,但需保持 UTF-8)。RFC 8630 §2.2。 - 继续读取一行或多行非空行,作为
ta_uris(保持顺序)。RFC 8630 §2.2(第 2 点)。 - 读取一个空行(必须存在)。RFC 8630 §2.2(第 3 点)。
- 将剩余行拼接为 Base64 文本(移除行分隔),Base64 解码得到
subject_public_key_info_der。RFC 8630 §2.2(第 4 点)。 - 可选:将
subject_public_key_info_der解析为 X.509SubjectPublicKeyInfo结构(用于与 TA 证书比对)。RFC 8630 §2.3;RFC 5280 §4.1.2.7。
URI 解析与约束:
ta_uris[*]的 scheme MUST 为rsync或https。RFC 8630 §2.2。- 每个
ta_uriMUST 指向“单个对象”,且 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 必须是 rsync 或 https |
RFC 8630 §2.2 |
subject_public_key_info_der |
DerBytes |
TA 证书 SPKI 的期望 DER | Base64 解码所得 DER;Base64 中可有换行 | RFC 8630 §2.2 |
1.4.2 TaUri(可选细化)
若你的实现希望对 URI 做更强类型化,可在
Tal.ta_uris上进一步拆分为TaUri结构。
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|---|---|---|---|---|
uri |
Uri |
完整 URI 文本 | scheme 为 rsync 或 https |
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 仅允许
rsync或https。RFC 8630 §2.2。 - Base64 区允许插入换行。RFC 8630 §2.2。
- 每个 TA URI 必须引用单个对象,不能指向目录/集合。RFC 8630 §2.3。