首页/网络/协议速查/NSEC3 记录(哈希化否定证明)
DNS 与域名解析60 条

NSEC3 记录(哈希化否定证明)

NSEC 的隐私增强版:owner name 用哈希表示(SHA-1 + 盐),既证明不存在,又不暴露真实名字列表。

协议速查网络更新于 2026-10-13

NSEC3 是什么

NSEC3(TYPE 50)是 NSEC 的隐私增强版:owner name 与「下一个名字」都用哈希表示(默认 SHA-1 加盐与迭代次数),既保留证明名字不存在的能力,又不把真实名字直接暴露在响应里(RFC 5155)。配套的 NSEC3PARAM(TYPE 51)用来声明本区域使用的哈希参数。

基本信息

类型NSEC3(TYPE 50)、NSEC3PARAM(TYPE 51)
字段哈希算法、标志、迭代次数、盐、下一哈希、类型位图
规范RFC 5155
迭代建议RFC 9276 建议取 0,避免被用于放大攻击
标志位bit 0 为 opt-out,用于跳过不签名的委托
部署位置公网区域的常见选择

典型使用场景

  • 公网区域的 DNSSEC 部署(优先选择 NSEC3)
  • opt-out 场景:跳过不签名的委托,减少记录数量
  • 排障:验证失败时核对两侧的哈希参数是否一致
  • 安全评估:评估区域枚举的实际难度与成本
  • 成本控制:迭代次数与记录体积对解析延迟的影响
  • 迁移实施:从 NSEC 切换到 NSEC3 的步骤与验证

观察参数与记录

观察参数与记录
# 查看区域声明的 NSEC3 参数
dig +short example.com NSEC3PARAM
# 1 0 5 AABBCCDD   → 算法 1(SHA-1)、flags 0、迭代 5、盐 AABBCCDD

# 观察 NSEC3 记录(owner name 已哈希,看不到真实名字)
dig +dnssec +noall +answer example.com NSEC3 | head

NSEC3 参数读法

参数含义建议
哈希算法1 表示 SHA-1实际部署仍以 1 为主
flagsbit 0 为 opt-out需要跳过不签名委托时使用
迭代次数额外的哈希轮数RFC 9276 建议取 0
盐附加到哈希的随机串轮换需整体重签,不建议频繁变更
迭代次数过高会让验证解析器承担额外 CPU 开销,历史上曾被用于放大攻击;当前建议是取 0 次迭代。
opt-out 会让「不存在的名字」在某些情况下得不到完整否定证明,配置前要理解它对安全性的影响。
NSEC3 只是提高了枚举成本,并没有完全阻止枚举:哈希后的名字仍可被字典与爆破离线攻击。
盐的轮换需要整体重签区域,操作窗口内容易出现签名不一致,非必要不要频繁变更。
NSEC3 不是 NSEC 的语法升级,而是另一套记录类型;切换时需要重新生成整条否定证明链。

易错点

  • 把迭代次数设得很大(例如几百)会显著增加解析器负担,还可能被判定为攻击特征
  • 频繁轮换盐会让区域需要整体重签,操作中容易造成签名不一致与验证失败
  • 以为 NSEC3 完全防枚举:哈希名字仍可被字典或爆破攻击,只是成本更高
  • 误配 opt-out 标志会让部分名字缺少否定证明,验证解析器返回 SERVFAIL
  • 从 NSEC 迁移到 NSEC3 时未重新生成否定证明链,验证会间歇性失败

数据来源与参考

  • RFC 5155 NSEC3
  • RFC 9276(NSEC 迭代使用建议)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌