DNSCurve 与 DNSSEC

DNSCurve 与 DNSSEC

有哪位知情人士能详细解答一下这两种方法的区别和优点/缺点吗?

我不是 DNS 专家,也不是程序员。我对 DNS 有基本的了解,并且有足够的知识来理解 Kaminsky 漏洞之类的东西是如何工作的。据我所知,DNSCurve 具有更强的加密功能,设置起来要简单得多,而且总体来说是一个更好的解决方案。

DNSSEC 过于复杂,而且使用易破解的加密,但它提供了端到端的安全性,而 DNSCurve 则没有。不过,我读过的许多文章似乎都表明端到端安全性没什么用或没有区别。

那么哪一个是正确的呢?哪一个是更好的解决方案,或者每个解决方案的缺点/优点是什么?

编辑:

当目标是身份验证而不是保密性时,如果有人可以解释通过加密消息内容可以获得什么,我将不胜感激。

密钥是 1024 位 RSA 密钥的证明是这里

答案1

DNSCurve 为 DNS 数据包提供实际加密,尽管仅限于逐跳加密,特别是递归服务器和权威服务器之间的跳跃加密。

当在该路径上使用时,它可以提供区域数据的身份验证。但是,任何下游的客户端都无法从此身份验证中受益,因为安全性只是“逐跳”的。位于解析路径中间的恶意解析器仍然可以提供虚假数据。

另一方面,DNSSEC 提供端到端可验证的加密签名,证明收到的数据与权威服务器上的数据相同。DNSSEC 使用加密技术,但实际上并不加密任何 DNS 流量。

DNSCurve 使用椭圆曲线加密算法,允许使用比 RSA 更小的密钥来实现相同级别的加密强度。不过,有人提议将类似算法纳入 DNSSEC 假定的列表中。

DNSSEC 由 IETF 标准化(RFC 4034 和 RFC 4035,由 RFC 5155 更新),并在几个非常流行的名称服务器实现中实现,包括 BIND(当然)和 NSD/Unbound。PowerDNS 将很快提供 DNSSEC 支持。

DNSSEC 确实很复杂,但人们正在努力简化它(例如http://opendnssec.org/) 并且部署一直在增加。各种 TLD(.se、.br、.org、.gov 等)已经使用 DNSSEC 签名,并且已经宣布根区域将在年底前使用 DNSSEC 签名。

DNSCurve 非常有趣,但由于其开发方式独立,因此几乎没有机会看到任何重大部署。在我看来,它在根服务器上部署的机会。

顺便说一句,您关于 DNSSEC 使用“可破解加密”的断言似乎完全没有根据。您这么说的依据是什么?

区域签名密钥通常(但不一定)为 1024 位长。这些密钥通常每月左右滚动一次,目前最佳估计是至少需要几年时间才能蛮力一个 1024 位密钥。

目前,对 1024 位 RSA 进行暴力攻击需要大约两年的时间,需要几百万个计算核心,每个处理器或主板有几十 GB 的内存

这并不是典型的僵尸网络。摘自同一篇论文:

接下来考虑专用硬件,最乐观的方法是,筛选 1024 位 RSA 模数一年仅需花费约 10,000,000 美元,加上一次性开发成本约 20,000,000 美元,而矩阵所需的时间和成本也相当。我们认为,这种设计所遭遇的(普遍)怀疑无关紧要。这些数字不应被解释为上限,即“小心,1024 位 RSA 可以在两年内被破解,花费约 2000 万美元(假设免费开发)”,而应被解释为下限,即“没有理由过于担心:即使在非常有利的攻击条件下,分解 1024 位 RSA 模数仍然需要大量资源。”因此,这些估计不应被解读为威胁,而应被解读为鼓舞人心。

或者来自一岁大的PCPro 文章

卡巴斯基估计,要破解 RSA 1,024 位密钥,大约需要 1500 万台计算机全速运行一年才能成功

坦率地说,没有人会花那么多精力去破解一个域名的 ZSK!

此外,真正的安全性在于密钥签名密钥,这些密钥通常至少为 2048 位,通常更长(4096 位)。破解 RSA 密钥所需的时间会随着密钥长度呈指数增长,而不是线性增长。

答案2

A对 LWN 的评论索赔

DNSCurve 保护的是管道,而不是消息。它不能用于防范恶意缓存,并且功能上不等同于 DNSSEC。

并链接到法语讨论

答案3

重要的是要明白“信任”而不是“加密”才是安全的关键。你可以使用“加密”与某人进行“安全”对话,但如果另一端的人不是你认为的那个人,那这对你有什么好处呢?

DNSSec 和 DNSCurve 之间最主要的区别在于 DNSSec 对所有内容进行签名,从根一直到每个运营商 DNS 服务器提供的主机记录都有一条清晰的信任链。

DNSCurve 不会签署任何内容,因此根本没有信任链。DNSCurve 的重点是防止被动或盲目地攻击 DNS 响应。

归根结底还是实用性问题……DNSSec 存在巨大的操作挑战——如何实际创建一个与地球大小相当的信任锚?当对数以百万计的域名进行签名时,使用什么机制来确保伪造任何签名所需的密钥材料不会落入坏人之手或被不当使用?从操作角度来看,大规模的信任很难实现和维持。

DNSCurve 甚至没有尝试。

现在已经回答了基本问题,以下是我对实际要解决的问题是什么以及哪一种技术更适合的看法。

互联网本质上既是胡言乱语的场所,也是重要讨论和启迪的场所。在我看来,一个完全值得信赖的互联网不是一个合理或可实现的目标,如果互联网真的如此,那么在自由和匿名言论及行动方面可能会产生负面影响。

我认为所需要的只是一个 DNS 解决方案至少与底层传输一样值得信赖。它需要切实防止攻击者盲目注入虚假消息或被动嗅探请求并伪造 UDP 响应来毒害 DNS 记录。它不需要保证超出此范围的安全性。这样,互联网就可以继续以可靠但不一定安全的方式路由数据包并提供 DNS 服务。

我认为 DNSSec 及其全球信任锚是愚蠢之举,几乎只着眼于解决不存在的问题。(互联网上所有可用的端到端加密系统都已经有自己的身份验证方法)

DNSSec 速度慢、成本高,并且会严重延迟 DNS 的明显和当前问题(例如迁移到 IPv6)的解决,而这些问题本应在昨天就得到解决。

DNSCurve 所做的就是保护网络,以便命名服务至少与网络上的底层数据包传输一样可靠,但不会更可靠。在我看来,它解决了现实世界中实际面临的确切问题。DNSCurve 可以防止被动 MITM,但如果没有 ssh 风格的“信念飞跃”签名缓存,它实际上无法防止主动 MITM。

扮演魔鬼代言人的角色,大规模部署 DNSSec 可能会产生积极的影响。PKI 基础结构可以取代 SSL 安全服务器 CA,并为 IPSec 和其他对等方之间的加密对话提供一些信任绑定。

答案4

我得出的结论是,DNSCurve 是一个更好的选择。

因为:

DNSSEC 使用 1024 位 RSA 密钥进行签名,大型网络和僵尸网络早在 2003 年就认为该密钥牢不可破。如今情况依然如此。

为了正确实现,必须重写大量代码。

根服务器不会签署完整的数据库,因此无法提供全面的保护。

域名过期后 30 天内可能会遭受重放攻击。

为了实现安全,必须公开所有域名。

DNSCurve 没有这些问题,并且允许身份验证、可用性和机密性(因为不必公开名称),而 DNSSEC 则不需要。此外,它不需要修改代码,只需添加软件即可。

它还具有针对伪造数据包的保护功能(DNSSEC 不具备此功能),并且由于使用了随机数,因此还可以防止重放攻击。DNSCurve 可能会受到 MITM 攻击,而 DNSSec 不会受到这种攻击,但据我了解,如果 DNSCurve 一直实施到根目录,就不会出现这种情况。

相关内容