0Pricing
Cryptology Academy · 课时

DNSSEC:验证 DNS 响应

了解 DNSSEC 如何使用数字签名保护 DNS,防止欺骗和缓存投毒攻击

DNSSEC:验证 DNS 响应 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

DNS 缓存中毒:Kaminsky 攻击

2008 年,研究人员 Dan Kaminsky 披露了针对 DNS 解析器的一项严重攻击。该攻击利用了 DNS 响应中仅有 16 位的事务 ID 字段。攻击者向解析器大量发送包含随机事务 ID 的伪造响应,便可能在真实响应到达之前,凭概率成功匹配合法事务 ID。缓存一旦被污染,就会将该解析器的所有用户重定向到攻击者控制的服务器,持续数周,直到缓存过期。

DNSSEC 为 DNS 添加了什么

DNSSEC(DNS 安全扩展)为 DNS 响应添加密码学认证。已使用 DNSSEC 签名的区域中的每个 DNS 记录集都附带数字签名。验证解析器在接受记录前会检查这些签名。伪造或修改的响应将包含无效签名并被拒绝。DNSSEC 可以防范缓存中毒和响应伪造,但不会加密 DNS 查询。

区域签名密钥与密钥签名密钥

DNSSEC 为每个区域使用双密钥层次结构。区域签名密钥(ZSK)用于对单个 DNS 记录集进行日常签名。密钥签名密钥(KSK)只对 DNSKEY 记录集签名,该记录集包含 ZSK 和 KSK 的公钥。ZSK 可以频繁轮换(每月一次),而 KSK 更少更换(每年一次),因为 KSK 哈希必须在父区域中注册,且轮换在运维上较为复杂。

RRSIG:资源记录签名

每个已签名的 DNS 记录集(称为资源记录集)都有对应的 RRSIG 记录,其中包含针对该资源记录集的密码学签名。解析器请求 DNS 记录时,响应会同时包含记录及其 RRSIG。解析器使用区域的公钥验证 RRSIG。该签名涵盖记录内容、类型、类和过期时间,从而防止篡改以及重放旧的有效签名。

DS 记录:连接父区域与子区域

DNSSEC 中的信任链通过委派签名者(DS)记录建立。区域将查询委派给子区域时,父区域会发布 DS 记录,其中包含子区域 KSK 的哈希。信任父区域的解析器可以验证子区域 KSK 的哈希是否与 DS 记录匹配,从而建立对该子区域签名的信任。这条链从 DNS 根区域向下延伸,经过顶级域,直至各个域名区域。

DNSKEY 记录:发布区域的公钥

每个采用 DNSSEC 签名的区域都会在 DNSKEY 记录中发布其公共签名密钥。通常有两个 DNSKEY 记录:一个用于 ZSK,一个用于 KSK。KSK 的公钥哈希会作为 DS 记录注册在父区域中,将该区域的信任锚定到父区域。根区域 KSK 的哈希被硬编码到验证解析器中,作为最终信任锚,称为根区域信任锚。

从根到叶的信任链

DNSSEC 验证从根区域开始,解析器中硬编码了根区域的 KSK 信任锚。根区域的 DNSKEY 用于验证其 RRSIG,而该 RRSIG 会认证 .com 等顶级域的 DS 记录。.com 区域的 DNSKEY 会验证其针对各个域的 DS 记录所生成的 RRSIG。这条密码学验证链从根延伸到所查询的域,确保每个环节都经过认证。

解析器中的 DNSSEC 验证

当支持 DNSSEC 验证的解析器收到响应时,它会执行完整的信任链验证。它获取 DNSKEY 记录,验证 RRSIG 签名,沿 DS 记录向上追溯到根锚点,并检查签名过期时间。如果验证失败,解析器会返回 SERVFAIL 错误,而不是返回可能伪造的记录。包括 Cloudflare 的 1.1.1.1 和 Google 的 8.8.8.8 在内,大多数主要公共解析器都会执行 DNSSEC 验证。

DNSSEC 的部署挑战

尽管 DNSSEC 具有安全优势,其部署速度仍然缓慢。密钥轮换需要区域运营者与父级注册机构协调。KSK 轮换期间的错误可能使整个区域无法访问。2019 年 ICANN 根区域 KSK 轮换需要多年的准备。签名会显著增加区域大小。运营者必须实现自动密钥轮换和监控。这些运维复杂性导致许多较小的域名运营者选择不采用 DNSSEC。

DNSSEC 不会加密 DNS 流量

一个常见误解是 DNSSEC 可以保护 DNS 查询的隐私。事实并非如此。DNSSEC 只认证响应;查询和响应仍会以明文 UDP 数据包的形式通过 53 端口传输。任何监控网络的人仍然可以看到查询过的每个域名。DNS-over-TLS(DoT)和 DNS-over-HTTPS(DoH)通过加密 DNS 流量来保护查询隐私。DNSSEC 与 DoH/DoT 互为补充:前者提供真实性,后者提供机密性。

现实世界中的 DNSSEC

截至 2024 年,大约 90% 的 DNS 根区域和主要顶级域已使用 DNSSEC 签名。然而,只有约 20% 至 30% 的单个域名完成签名。浏览器和应用对 DNSSEC 验证的采用程度不一。当与 DANE(基于 DNS 的命名实体身份验证)结合时,DNSSEC 的安全收益最大;DANE 利用 DNSSEC 发布 TLS 证书指纹,使客户端无需完全依赖证书颁发机构即可验证证书。

DNSSEC 信任链

DNSSEC 验证解析器如何从零开始建立对某个域的 DNS 记录的信任?

DNSSEC:关键要点

DNSSEC 为 DNS 响应添加密码学签名,以防止缓存中毒和响应伪造。ZSK 对记录集签名;KSK 对 DNSKEY 记录签名;DS 记录在父区域与子区域之间串联信任。验证从硬编码的根区域信任锚开始。DNSSEC 不会加密 DNS 流量;DoH 和 DoT 提供隐私,而 DNSSEC 提供真实性。包括密钥轮换在内的运维复杂性减缓了广泛采用。

常见问题解答

「DNSSEC:验证 DNS 响应」课时是免费的吗?

是的 — 「DNSSEC:验证 DNS 响应」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「DNSSEC:验证 DNS 响应」这节课中我会学到什么?

了解 DNSSEC 如何使用数字签名保护 DNS,防止欺骗和缓存投毒攻击 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「DNSSEC:验证 DNS 响应」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么样的协议才安全
  2. SSH:保护远程访问
  3. SFTP 与 SCP:安全文件传输
  4. DNSSEC:验证 DNS 响应
← 返回 Cryptology Academy