跳到主要内容

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 文本的其余部分是十六进制形式的摘要.


相关章节导航: