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。
相关章节导航:
- 上一节:2. DNSKEY 资源记录
- 下一节:4. DS 资源记录