5. DS 资源记录
DS 资源记录引用 DNSKEY RR, 并用于 DNSKEY 认证过程. DS RR 通过存储 DNSKEY RR 的密钥标签, 算法编号和摘要来引用该 DNSKEY RR. 注意, 虽然摘要应足以标识公钥, 但存储密钥标签和密钥算法有助于提高标识过程的效率. 通过认证 DS 记录, 解析器可以认证该 DS 记录所指向的 DNSKEY RR. 密钥认证过程见 [RFC4035].
DS RR 及其对应的 DNSKEY RR 具有相同的所有者名称, 但存储在不同位置. DS RR 只出现在委派的上级 (父) 一侧, 并且是父区域中的权威数据. 例如, "example.com" 的 DS RR 存储在 "com" 区域 (父区域) 中, 而不是 "example.com" 区域 (子区域) 中. 对应的 DNSKEY RR 存储在 "example.com" 区域 (子区域) 中. 这简化了 DNS 区域管理和区域签名, 但也为 DS RR 引入了特殊的响应处理要求. 这些要求见 [RFC4035].
DS 记录的类型编号为 43.
DS 资源记录与类无关.
DS RR 没有特殊 TTL 要求.
5.1. DS RDATA 线格式 \
DS RR 的 RDATA 由 2 八位字节的 Key Tag 字段, 1 八位字节的 Algorithm 字段, 1 八位字节的 Digest Type 字段和 Digest 字段组成.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Tag | Algorithm | Digest Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Digest /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5.1.1. Key Tag 字段 \
Key Tag 字段列出 DS 记录所引用的 DNSKEY RR 的密钥标签, 采用网络字节序.
DS RR 使用的 Key Tag 与 RRSIG RR 使用的 Key Tag 相同. 附录 B 描述了如何计算 Key Tag.
5.1.2. Algorithm 字段 \
Algorithm 字段列出 DS 记录所引用的 DNSKEY RR 的算法编号.
DS RR 使用的算法编号与 RRSIG 和 DNSKEY RR 使用的算法编号相同. 附录 A.1 列出了算法编号类型.
5.1.3. Digest Type 字段 \
DS RR 通过包含 DNSKEY RR 的摘要来引用该 DNSKEY RR. Digest Type 字段标识用于构造该摘要的算法. 附录 A.2 列出了可能的摘要算法类型.
5.1.4. Digest 字段 \
DS 记录通过包含 DNSKEY RR 的摘要来引用该 DNSKEY RR.
摘要的计算方式是: 将 DNSKEY RR 的完全限定所有者名称的规范形式与 DNSKEY RDATA 拼接, 然后应用摘要算法.
digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA);
"|" denotes concatenation
DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key.
摘要大小可能因摘要算法和 DNSKEY RR 大小而异. 在本文撰写时, 唯一定义的摘要算法是 SHA-1, 它会生成 20 八位字节的摘要.
5.2. 验证响应时 DS RR 的处理 \
DS RR 将认证链跨越区域边界连接起来, 因此处理 DS RR 时需要格外谨慎. DS RR 所引用的 DNSKEY RR 必须是 DNSSEC 区域密钥. DNSKEY RR 的 Flags 必须设置 Flags 第 7 位. 如果 DNSKEY 标志未表明其为 DNSSEC 区域密钥, 则该 DS RR 及其引用的 DNSKEY RR 禁止用于验证过程.
5.3. DS RR 表示格式 \
RDATA 部分的表示格式如下:
Key Tag 字段必须表示为无符号十进制整数.
Algorithm 字段必须表示为无符号十进制整数, 或表示为附录 A.1 中指定的算法助记符.
Digest Type 字段必须表示为无符号十进制整数.
Digest 必须表示为一串大小写不敏感的十六进制数字. 十六进制文本中允许出现空白字符.
5.4. DS RR 示例 \
以下示例展示一个 DNSKEY RR 及其对应的 DS RR.
dskey.example.com. 86400 IN DNSKEY 256 3 5 ( AQOeiiR0GOMYkDshWoSKz9Xz
fwJr1AYtsmx3TGkJaNXVbfi/
2pHm822aJ5iI9BMzNXxeYCmZ
DRD99WYwYqUSdjMmmAphXdvx
egXd/M5+X7OrzKBaMbCVdFLU
Uh6DhweJBjEVv5f2wwjM9Xzc
nOf+EPbtG9DMBmADjFDc2w/r
ljwvFw==
) ; key id = 60485
dskey.example.com. 86400 IN DS 60485 5 1 ( 2BB183AF5F22588179A53B0A
98631FAD1A292118 )
前四个文本字段指定名称, TTL, 类和 RR 类型 (DS). 值 60485 是对应的 "dskey.example.com." DNSKEY RR 的密钥标签, 值 5 表示该 "dskey.example.com." DNSKEY RR 使用的算法. 值 1 是用于构造摘要的算法, RDATA 文本的其余部分是十六进制形式的摘要.
相关章节导航:
- 上一节: 4. NSEC 资源记录
- 下一节: 6. Resource Record 的规范形式和顺序