跳到主要内容

3. RRSIG 资源记录

RRSIG 资源记录(RR)携带对资源记录集合(RRset)的密码学签名。RRSIG RR 必须与由其对 RRset 进行签名的 DNSKEY RR 一起使用。RRSIG RR 不得被链(chain)到其自身签名的 RRset 类型之外的其他 RR 类型。

RRSIG 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type Covered | Algorithm | Labels |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Original TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Expiration |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Inception |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Tag | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Signer's Name /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Signature /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RRSIG RR 的 RDATA 按如下方式表示和编码:

  • 类型覆盖(TYPE COVERED)是一个 16 位的类型码,按网络字节序排列,标识该签名所覆盖的 RRset 的类型。
  • 算法(ALGORITHM)是一个 8 位无符号整数,标识用于该签名的公钥算法。
  • 标签数(LABELS)是一个 8 位无符号整数,等于 RRSIG RR 所有者名称中标签的数量,不包括星号(*,用于通配记录)。
  • 原始 TTL(ORIGINAL TTL)是一个 32 位无符号整数,按网络字节序排列,指示被签名 RRset 中记录的 TTL。
  • 签名有效期(SIGNATURE EXPIRATION)是一个 32 位无符号整数,按网络字节序排列,指示签名不再有效的日期和时间(自 UTC 1970 年 1 月 1 日 00:00 起以秒计)。
  • 签名起始期(SIGNATURE INCEPTION)是一个 32 位无符号整数,按网络字节序排列,指示签名开始生效的日期和时间(自 UTC 1970 年 1 月 1 日 00:00 起以秒计)。
  • 密钥标记(KEY TAG)是一个 16 位无符号整数,按网络字节序排列,标识用于验证该签名的 DNSKEY RR。
  • 签名者名称(SIGNER'S NAME)是签名该 RRset 的区域的 DNS 名称,以规范形式的域名(wire format,域名的线上格式)表示。
  • 签名(SIGNATURE)是可变长度的字节串,包含对 RRset 的密码学签名。

3.1. RRSIG RDATA 中的类型覆盖字段​

TYPE COVERED 字段标识该 RRSIG 记录所签名的 RRset 的资源记录类型。该字段 MUST NOT 为 0(该值保留,不用于标识任何现有 RR 类型)。

3.2. RRSIG RDATA 中的算法字段​

ALGORITHM 字段标识用于该签名的公钥算法。该字段的值 MUST 与用于验证该签名的 DNSKEY RR 中的 ALGORITHM 字段相同。

3.3. RRSIG RDATA 中的标签数字段​

LABELS 字段是一个 8 位无符号整数,等于 RRSIG 所有者名称中标签的数量,不包括用于通配记录的任何初始标签 *(星号)。LABELS 字段 MUST 对于非通配名称设置为所有者名称中标签的数量,或者对于通配名称设置为该数量减 1。LABELS 字段 MUST NOT 为 0。

验证解析器 MUST 检查 LABELS 字段与 RRSIG 所有者名称的标签数是否一致(考虑通配情况),否则 MUST 拒绝该签名。

3.4. RRSIG RDATA 中的原始 TTL 字段​

ORIGINAL TTL 字段是签名创建时被签名 RRset 中 RR 的 TTL。验证器 MUST 验证该 RRset 中每条记录的 TTL 与该值在验证之前相符(可按 [RFC4035] 中的说明处理);否则签名验证 MUST 失败。

3.5. RRSIG RDATA 中的签名有效期和签名起始期字段​

SIGNATURE EXPIRATION 和 SIGNATURE INCEPTION 字段以自 UTC 1970 年 1 月 1 日 00:00 起以秒计的时间给出。验证器 MUST 仅在当前时间处于 [SIGNATURE INCEPTION, SIGNATURE EXPIRATION] 区间内时才接受签名。

若 SIGNATURE INCEPTION 大于 SIGNATURE EXPIRATION,则签名 MUST NOT 被接受。

3.6. RRSIG RDATA 中的密钥标记字段​

KEY TAG 字段包含用于验证该签名的 DNSKEY 资源记录的密钥标记。它用于高效选择 DNSKEY RRset 中正确的 DNSKEY RR。

3.7. RRSIG RDATA 中的签名者名称字段​

SIGNER'S NAME 字段包含签名该 RRset 的区域的名称。它 MUST 是包含用于验证的 DNSKEY 的区域的名称(或其祖先区域,依据 [RFC4035] 中的信任链规则)。

3.8. RRSIG RDATA 中的签名字段​

SIGNATURE 字段包含以二进制形式表示的加密签名,该签名是使用与 DNSKEY RR 相关联的私钥、依据 [RFC4035] 中规定的签名计算流程,对 RRset 的规范形式计算得出的。

3.9. RRSIG 表示格式​

RRSIG RR 的表示格式(presentation format)如下:

  • 类型覆盖以文本形式表示(例如,A、NS、SOA),或者以 RFC 3597 表示法表示未知类型。
  • 算法以十进制无符号整数表示。
  • 标签数以十进制无符号整数表示。
  • 原始 TTL 以十进制无符号整数表示。
  • 签名有效期和签名起始期以 YYYYMMDDHHmmSS 格式表示(UTC)。
  • 密钥标记以十进制无符号整数表示。
  • 签名者名称以规范形式的域名文本表示。
  • 签名以 Base64 [RFC3548] 编码的字节串表示,不包含空格。

3.10. 对于 RRSIG RR 的特殊注意事项​

一条 RRSIG 记录只签名一个 RRset;每个 RRset 的每种算法 SHOULD 存在一条对应的 RRSIG 记录。RRSIG 记录本身 MUST NOT 被包含在被其签名的 RRset 中。验证器 MUST 使用与签名 DNSKEY 的 ZONE 位一致的密钥来验证 RRSIG。


相关章节导航: