跳到主要内容

8. Validator Considerations (验证器注意事项)

8. Validator Considerations (验证器注意事项)

8.1. Responses with Unknown Hash Types (具有未知哈希类型的响应)

验证器必须 (MUST) 忽略具有未知哈希类型的 NSEC3 RR。这样做的实际结果是, 仅包含此类 NSEC3 RR 的响应通常会被认为是伪造的 (bogus)。

8.2. Verifying NSEC3 RRs (验证 NSEC3 RR)

验证器必须 (MUST) 忽略标志字段 (Flag fields) 值不是零或一的 NSEC3 RR。

如果响应包含彼此在哈希算法 (hash algorithm), 迭代次数 (iterations) 或盐 (salt) 方面包含不同值的该区域的 NSEC3 RR, 验证器可以 (MAY) 将响应视为伪造的。

8.3. Closest Encloser Proof (最近封闭者证明)

为了验证最近封闭者证明, 验证器必须 (MUST) 找到最长的名称 X, 使得

  • X 是 QNAME 的祖先, 由响应中存在的 NSEC3 RR 匹配。这是最近封闭者的候选者, 并且

  • 比 X 长一个标签的名称 (但仍然是 QNAME 的祖先或等于 QNAME) 被响应中存在的 NSEC3 RR 覆盖。

验证此证明的一种可能算法如下:

  1. 设置 SNAME=QNAME。清除标志 (flag)。

  2. 检查 SNAME 是否存在:

    • 如果响应中没有匹配 SNAME 的 NSEC3 RR (即, 所有者名称与 SNAME 的哈希相同的 NSEC3 RR, 作为单个标签添加到区域名称之前), 则清除标志。

    • 如果响应中有覆盖 SNAME 的 NSEC3 RR, 则设置标志。

    • 如果响应中有匹配的 NSEC3 RR 并且设置了标志, 则证明完成, SNAME 是最近封闭者。

    • 如果响应中有匹配的 NSEC3 RR, 但未设置标志, 则响应是伪造的。

  3. 从左侧将 SNAME 截断一个标签, 转到步骤 2。

一旦发现最近封闭者, 验证器必须 (MUST) 检查将最近封闭者作为原始所有者名称的 NSEC3 RR 是否来自适当的区域。绝对不能 (MUST NOT) 设置 DNAME 类型位, 并且只有在设置了 SOA 类型位时才可以设置 NS 类型位。如果不是这种情况, 则表明攻击者正在使用它们虚假地否认服务器不具有权威性的 RR 的存在。

在以下描述中, 短语"X 的最近 (可证明的) 封闭者证明"意味着上述算法 (或等效算法) 通过证明 X 的祖先是其最近封闭者来证明 X 不存在。

8.4. Validating Name Error Responses (验证名称错误响应)

验证器必须 (MUST) 验证响应中存在 QNAME 的最近封闭者证明, 并且存在覆盖最近封闭者处通配符的 NSEC3 RR (即, 通过在最近封闭者前添加星号标签形成的名称)。

8.5. Validating No Data Responses, QTYPE is not DS (验证无数据响应, QTYPE 不是 DS)

验证器必须 (MUST) 验证存在匹配 QNAME 的 NSEC3 RR, 并且在其类型位图字段中未设置 QTYPE 和 CNAME 类型。

请注意, 此测试还涵盖了 NSEC3 RR 存在是因为它对应于空非终结符的情况, 在这种情况下, NSEC3 RR 将具有空的类型位图字段。

8.6. Validating No Data Responses, QTYPE is DS (验证无数据响应, QTYPE 是 DS)

如果响应中存在匹配 QNAME 的 NSEC3 RR, 则该 NSEC3 RR 在其类型位图字段中绝对不能 (MUST NOT) 设置与 DS 和 CNAME 对应的位。

如果不存在这样的 NSEC3 RR, 则验证器必须 (MUST) 验证响应中存在 QNAME 的最近可证明封闭者证明, 并且覆盖"下一个更近名称"的 NSEC3 RR 设置了 Opt-Out 位。

8.7. Validating Wildcard No Data Responses (验证通配符无数据响应)

验证器必须 (MUST) 验证 QNAME 的最近封闭者证明, 并且必须 (MUST) 在响应中找到一个 NSEC3 RR, 该 RR 匹配通过在最近封闭者前添加星号标签生成的通配符名称。此外, 在通配符匹配的 NSEC3 RR 中绝对不能 (MUST NOT) 设置与 QTYPE 和 CNAME 对应的位。

8.8. Validating Wildcard Answer Responses (验证通配符应答响应)

响应中已验证的通配符应答 RRSet 为验证器提供了 QNAME 的 (候选) 最近封闭者。此最近封闭者是生成通配符的直接祖先。

验证器必须 (MUST) 验证响应中存在覆盖到 QNAME 的"下一个更近名称"的 NSEC3 RR。这证明 QNAME 本身不存在, 并且使用了正确的通配符来生成响应。

8.9. Validating Referrals to Unsigned Subzones (验证到未签名子区域的引用)

引用中的委派名称是引用响应的授权部分中存在的 NS RRSet 的所有者名称。

如果响应中存在匹配委派名称的 NSEC3 RR, 则验证器必须 (MUST) 确保在 NSEC3 RR 的类型位图字段中设置了 NS 位且未设置 DS 位。验证器还必须 (MUST) 确保 NSEC3 RR 来自正确的 (即, 父) 区域。这是通过确保在此 NSEC3 RR 的类型位图字段中未设置 SOA 位来完成的。

请注意, NS 位的存在意味着 DNAME 位的缺失, 因此无需检查 NSEC3 RR 的类型位图字段中的 DNAME 位。

如果不存在匹配委派名称的 NSEC3 RR, 则验证器必须 (MUST) 验证委派名称的最近可证明封闭者证明。验证器必须 (MUST) 验证覆盖到委派名称的"下一个更近名称"的 NSEC3 RR 中设置了 Opt-Out 位。