2. DNSKEY 资源记录
DNSKEY 资源记录(RR)以公钥的形式携带与 DNS 安全扩展(DNSSEC)相关的公钥密码学信息。
DNSKEY RR 的 RDATA 格式如下:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Protocol | Algorithm |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Public Key (取决于算法,长度可变) /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
DNSKEY RR 的 RDATA 按如下方式表示和编码:
- 标志(FLAGS)是一个无符号的 16 位整数,按网络字节序(Network Byte Order)排列。
- 协议(PROTOCOL)是一个无符号的 8 位整数,取值 MUST 为 3。
- 算法(ALGORITHM)是一个无符号的 8 位整数,标识公钥所使用的算法。
- 公钥(PUBLIC KEY)是一个长度可变的字节串,其内容取决于算法字段的值,详见下文。
2.1. DNSKEY RDATA 中的标志字段
FLAGS 字段中的位按照以下方式分配:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags |Z| | | | | | | | | | | | | | |S|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
上图仅显示了 FLAGS 字段内的位(注意:位编号从 0 开始,从左到右)。
DNSKEY RR 中 FLAGS 字段的位按如下方式分配:
- 位 7 是 ZONE 位(见下文)。
- 位 15 是 Secure Entry Point(SEP)位(见 [RFC3757])。
- 位 0-6 和位 8-14 为保留位, MUST 设为 0。
第 2.1.1 节和第 2.1.2 节描述了 ZONE 位和 SEP 位的含义。
2.1.1. ZONE 标志位
DNSKEY RR 中的 ZONE 位(位 7)指示该 DNSKEY RR 是否拥有对应区域的私钥,从而能够对该区域的 RRset 进行签名。
- 当 ZONE 位被置位(值为 1)时,DNSKEY 记录的持有者拥有用于对该区域进行签名的私钥。
- 当 ZONE 位被清零(值为 0)时,DNSKEY 记录 MAY 用于验证从对应区域获得的签名 RRset 之外的其他用途。
ZONE 标志位 MUST 由区域管理员适当设置。验证解析器(validator)仅当 RRSIG 记录指向的 DNSKEY 具有 ZONE 位时,才会将其用于验证区域的 RRSIG。
2.1.2. Secure Entry Point(SEP)标志位
Secure Entry Point(SEP)位(位 15)标识该 DNSKEY 是否被区域管理员视为区域的"安全入口点"(Secure Entry Point)。安全入口点是父区域(parent zone)中 DS 记录所指向的密钥。SEP 位在区域签名操作中无任何密码学意义;它仅是一个标识位,用于帮助区域管理员区分用于安全入口点的密钥(即会在父区域中产生 DS 记录的密钥)与用于区域签名的其他密钥。
SEP 位在 [RFC3757] 中有更详细的描述。
2.2. DNSKEY RDATA 中的协议字段
DNSKEY RR 的 PROTOCOL 字段 MUST 为 3。如果收到一条 PROTOCOL 字段值不为 3 的 DNSKEY RR,则 MUST 将其视为格式错误(malformed)并忽略。
2.3. DNSKEY RDATA 中的算法字段
DNSKEY RR 的 ALGORITHM 字段标识用于该 DNSKEY RR 的公钥密码学算法。DNSSEC 中使用的算法编号在附录 A 中给出。
ALGORITHM 字段的值确定了 PUBLIC KEY 字段的布局和内容。
2.4. DNSKEY RDATA 中的公钥字段
DNSKEY RR 的 PUBLIC KEY 字段包含公钥材料,其格式由 ALGORITHM 字段确定。对于本文档定义的算法,公钥材料以适合每种算法的格式提供(例如 RSA 的指数的长度前缀表示法,或 DSA 的按字段拼接)。
2.5. DNSKEY 表示格式
DNSKEY RR 的表示格式(presentation format)如下:
- 标志字段以十进制无符号整数表示。
- 协议字段以十进制无符号整数表示。此字段 MUST 始终为 3。
- 算法字段以十进制无符号整数表示。
- 公钥字段以 Base64 [RFC3548] 编码的字节串表示。
例如:
example.com. 3600 IN DNSKEY 257 3 5 (
AQPSKmynfzW4kyBv015MUG2DeIQ3Cbl+BBZH4b/0PY1kxkmvHjcZc8nokfzjib
kX1j8Lj+ZnSs8LzDHl+0PzHj7mVoMjWSbqHUUjWQSnJCvgkJ2WGlKjK/bBIf
... ) ; key id = 60485
2.6. 对于 DNSKEY RR 的特殊注意事项
DNSKEY RR 是区域签名所使用的关键记录。验证器 MUST 使用 RRSIG 记录指向的、且 ZONE 位被置位的 DNSKEY 来验证签名。
当 DNSKEY RRset 被签名时,用于验证该签名的 DNSKEY 本身 SHOULD 在父区域中以 DS 记录的形式发布,以建立信任链(chain of trust)。
相关章节导航:
- 上一节:1. 介绍
- 下一节:3. RRSIG 资源记录