跳到主要内容

5. NSEC 资源记录

NSEC(Next SECure,下一个安全)资源记录(RR)用于证明在已签名区域内不存在某个所有者名称(owner name),或不存在某种特定的资源记录类型。NSEC RR 通过列举在区域中按规范顺序排列的下一个所有者名称来实现此目的。

NSEC 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Next Domain Name /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Type Bit Maps /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

  • 下一个域名(NEXT DOMAIN NAME)是区域中按规范顺序排列的下一个所有者名称(该名称 MUST 与该 NSEC RR 的所有者名称不同),以域名的规范形式(wire format)表示。
  • 类型位图(TYPE BIT MAPS)标识了与 NSEC RR 所有者名称相关联的资源记录类型集合。类型位图以紧凑的位图形式编码,其格式在第 5.1 节中描述。

5.1. NSEC RDATA 中的类型位图字段​

类型位图以一个或多个(窗口块,window block)的序列进行编码。每个窗口块的结构如下:

    +--------+--------+--------+--------+--------+--------+
| Window| Bitmap Length | Bitmap |
+--------+--------+--------+--------+--------+--------+

其中:

  • Window 是一个 8 位无符号整数,标识类型码的高 8 位(即类型码除以 256 的商)。
  • Bitmap Length 是一个 8 位无符号整数,标识该窗口块中位图的长度(以字节为单位),取值范围为 1 至 32。
  • Bitmap 是 Bitmap Length 个字节的位图,涵盖该窗口内的类型码。位图中的每一位对应一个类型码;第 0 位(最高有效位)对应 Window × 256 处的类型码,第 7 位(最低有效位)对应 Window × 256 + 7 处的类型码。

类型位图 MUST 包含与 NSEC RR 所有者名称相关联的每个 RR 类型的对应位。如果所有者名称与多个 RR 类型相关联,则这些类型都必须在类型位图中表示。

类型位图 MUST 按照 Window 字段递增的顺序排列,且 MUST NOT 包含重叠或超出 32 字节长度的窗口块。

NSEC RR 的验证器使用类型位图检查:

  • NSEC RR 的所有者名称是否存在给定的 RR 类型(类型存在性证明)。
  • 在 NSEC RR 的所有者名称与下一个域名之间,规范顺序中是否不存在其他名称(名称不存在证明)。

5.2. NSEC RDATA 中的下一个域名字段​

NEXT DOMAIN NAME 字段 MUST 包含区域中按规范顺序(canonical order)排列的、紧接在 NSEC RR 所有者名称之后的所有者名称。区域中最后一个 NSEC RR 的 NEXT DOMAIN NAME 字段 MUST 包含该区域中第一个 NSEC RR 的所有者名称(即环绕到区域起点)。

这用于在验证器请求一个不存在的名称时,证明该名称不在区域中:验证器找到一条 NSEC RR,其所有者名称在规范顺序中位于所请求名称之前,且其 NEXT DOMAIN NAME 在规范顺序中位于所请求名称之后。

5.3. NSEC 表示格式​

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

  • 下一个域名以规范形式(即不含任何压缩)的域名文本表示。
  • 类型位图以空格分隔的资源记录类型列表表示(例如,RRSIG NSEC SOA NS A)。未知类型使用 RFC 3597 表示法。

例如:

    example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC

5.4. 对于 NSEC RR 的特殊注意事项​

NSEC RR 会暴露区域中名称的存在性,这可能带来隐私方面的考虑。NSEC RR MUST 由负责区域的签名方生成,并且 MUST 使用与区域 DNSKEY 一致的密钥进行签名。

验证器 MUST 在证明名称或类型不存在时,检查 NSEC RR 所指示的规范顺序区间确实不包含被证明不存在的名称或类型。


相关章节导航: