跳到主要内容

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)。


相关章节导航: