摘要

  • RFC 5155 允许在覆盖记录设置 Opt-Out 标志时,把符合条件的未签名委派从 NSEC3 链中省略。
  • 覆盖这些不安全委派的 Opt-Out 记录不声明它们存在或不存在,只认证范围更窄的否定结论。
  • 安全委派需要带签名的 DS RRset 和经验证的信任链,不能仅凭查询哈希附近存在有效 NSEC3 签名判断。
  • 运维记录必须保留安全、不安全和无法判定三种结果,而不能一律压缩成“DNSSEC 已通过”。

设想一份递归解析器跟踪记录:所有 RRSIG 验证成功,NSEC3 哈希区间也完全匹配,状态显示绿色。审计导出随后把这行绿色状态转写为“子域委派已受保护”。然而,被查询名称落在 Opt-Out 区间内。证明是真实的,结论却超出了证明范围。

这是一个假设场景,不对应任何注册管理机构或运营商。问题在于范围:密码学验证成功不会扩大签名记录原本表达的命题。

Opt-Out 改变了什么

RFC 5155 把 NSEC3 定义为经过哈希处理的认证不存在证明。区域不再按可读名称的规范顺序列出记录,而是签署按哈希顺序连接的所有者名称与下一所有者位置。

对于以委派为主的区域,为每个未签名子域维护 NSEC3 记录及签名可能代价很高。Opt-Out 允许省略符合条件的不安全委派名称。设置该标志的记录可能覆盖零个或多个此类委派,使其能够在不重建相应 NSEC3 链段的情况下加入或移除。

这种运维便利改变了证明含义。RFC 5155 明确指出,Opt-Out NSEC3 记录不声明其所覆盖的不安全委派存在或不存在。它仍能对区间内其他权威 RRset 作出认证声明,但未签名子域被有意排除在完整密码学清单之外。

有效证明可能得出“不安全”

委派点的父区证据决定安全状态。RFC 5155 把同时包含 NS RRset 与带签名 DS RRset 的情况定义为安全委派;只有 NS 而缺少 DS 的委派指向未签名子区,属于不安全委派。DS 才是把父区认证数据连接到子区 DNSKEY 的记录。

验证 NSEC3 的 RRSIG,只能证明父区签署了这条 NSEC3 声明;它不会为被覆盖子域生成 DS。Opt-Out 标志本身也不说明某个具体委派是否存在。RFC 7129 直接说明:Opt-Out NSEC3 无法证明或否定所覆盖不安全委派的存在,而这些委派并未获得 DNSSEC 提供的密码学保护。

因此,解析器不能只输出一个绿色密码学标志。它必须确定委派点,找到 DS 或认证 DS 缺失,评估相关 NSEC3 证明,并在存在信任链时继续验证。安全、不安全、bogus(验证失败)和无法判定是不同结果。

让证明范围始终跟随结论

证据应记录具体查询、响应码、区域与委派点。对于 NSEC3,要保留哈希算法、迭代次数、盐值、所有者哈希、下一哈希所有者、类型位图和 Opt-Out 标志;若使用最接近可证明祖先,还要保存相应记录,以及 DNSKEY、RRSIG 验证结果和信任锚。

缓存与时间同样重要。TTL、签名生效和到期时间、父区发布时间以及解析器缓存年龄都限制证明有效范围。之后新增或删除 DS 可能改变委派状态,即使旧观察仍留在审计库中。

可辩护的说法应当具体:这条带签名的 NSEC3 响应在这个时刻对这次查询验证成功,并支持当时的安全或不安全分类。它不代表覆盖范围内所有委派都安全。