NSA 如何破解数以万亿计的加密 Web 和 VPN 连接

信息安全 加密 密码学 虚拟专用网 密码分析 国家安全局
2021-08-20 12:41:26

基于 Diffie-Hellman 的密钥交换协商,为什么会发现只有少数素数是常用的?什么和谁决定了质数?

使用安全素数不是更安全吗?(例如:p = 2q + 1)

*问题基于这篇文章:

http://arstechnica.com/security/2015/10/how-the-nsa-can-break-trillions-of-encrypted-web-and-vpn-connections/?utm_source=pocket&utm_medium=email&utm_campaign=pockethits

2个回答

编辑#2 (11/09/15) - 我通读了几篇文章和一篇论文。请参阅底部以获取更多评论。

我阅读了这篇文章,虽然我没有关于以下内容的直接数据,所以猜测我的工作。

这里有多种因素。

  1. DH 交换的性质。
  2. 预配置密钥。
  3. 不可更改的键。
  4. 对 DH 算法的已知攻击。

DH 交换

交易所要求双方拥有 Base Prime。它应该是 Safe Prime(或 Sophie-Germain Prime)。如果客户端没有,服务器会发送过来。双方都应该使用安全的随机数生成器来创建他们的指数。计算的结构应该使得成功和失败花费相同的挂钟时间。

预置密钥

生成大型 Primes 并不难,但它适用于初学者。最好有一个软件为你做这件事。该软件必须使用安全的随机数生成器。大多数人只会使用出于习惯、无知或懒惰而预先提供的任何键(质数)。

不可更改的键(素数)

很可能大部分有问题的软件都没有设计为允许更改素数。编写软件的工程师通常与用户一样不了解适当的安全方法。我不是贬义的意思;无知,如“缺乏知识”。

已知的 DH 攻击

从哪儿开始!

几十年前,几个研究生计算部分离散对数矩阵并攻击 Sun 的网络密码验证方案,一个较短的密钥 (768) 完全在能力范围内。请参阅本答案末尾的参考资料。如果 NSA(或任何人)今天有能力计算已知 1024 位密钥的部分,我不会感到惊讶。

如果客户端没有 Prime 并从服务器请求它,则可以通过替换传输到客户端的 Prime 来攻击该协议。

更好的是,DH 容易受到中间人攻击,特别是对于从服务器请求 Prime 的客户端,但即使它没有DH 算法依赖于计算的安全指数。但是,它不依赖任何其他数据——服务器和客户端无需相互证明即可建立安全会话。如果客户端的密码(或它的哈希)以某种方式混合到 DH 密钥协商中而没有任何信息泄漏并保持完美的前向保密,那么客户端可以确信服务器是合法的。查找 SPEKE 和 DHEKE 算法以了解这一点。无论如何,作为 MITM 的 NSA 会创建两个 DH 会话,一个与客户端,另一个与服务器,并在两者之间传输时记录所有数据。十分简单。

文章指出,NSA 依靠众所周知的 Prime 来攻击会话。我参考了我提到的关于计算离散对数部分矩阵的论文。如果现在可以通过硬件改进,1024 位密钥将不会为观察者攻击提供保密性。

谁说运行 DH 算法的机器没有以其他方式受到损害?也许,他们泄露了关键数据或在以正确方式查询时放弃了它?已经发布了很多关于 NSA 如何破坏每一个计算硬件的信息,也许除非他们需要,否则他们不会费心破坏算法,而是闯入机器并直接获取会话加密密钥?

编辑

其他 DH 攻击:

  • 引入一个不安全的素数(不符合 P=2Q+1 的 Sophie-Germain Prime 标准,其中 Q & P 是素数)。不安全的素数 P(Q 不是素数)限制了 DH 函数的范围,从而简化了观察者攻击(离散对数计算),有时是微不足道的。在算法的上下文中,g^(A*B)%P应该在 P 的场上以 1:1 或 2:1 映射;一个糟糕的 P 可以将大量数字映射到一个计算上可行的小集合。
  • 依赖编码不佳的 DH 算法,这些算法允许(或强制!)小指数,从而更容易攻击会话。
  • 依赖编码不良的安全随机数生成器和/或种子不良的 RNG(使用当前时间或进程 ID 的 RNG)。
  • 计时攻击,观察者观察参与者计算结果的难度(按时间测量),并根据密钥的工作属性进行猜测(使用该信息来破解密钥)。这是一般攻击,并非针对 Diffie-Hellman。

编辑#2

我阅读了一篇链接的文章,并发布了十二篇作者的论文

如上所述,这是它的要点。最后,我将添加更多关于 TLS+DH+RSA 密码套件的内容,以展示另一个漏洞。

首先,NSA 似乎破坏了一些用于 Diffie-Hellman 密钥交换的常用 DH 组(Safe Prime P + Generator g)。正如我上面所指出的,至少在十年左右之前,这次攻击是由几个研究生(仍然没有参考资料)对 Sun 用于网络密码验证的 768 DH 密钥完成的。攻击是观察者攻击,因此不需要中间人。破坏任何特定组所需的工作量非常大。但是,一旦被破坏,所有使用它的交易所现在都可能受到损害。

从理论上讲,DH 密钥交换提供了完美的前向保密(而 RSA 则没有)。一旦 DH 组被破坏,任何使用该组的交换都不会被破坏,它也会被破坏(即记录的交换可以被破坏),因此该组不再具有完美的前向保密性。这也意味着专门的攻击者可以破解不常见的 DH 密钥。假设这对于 1024 位密钥是可能的,因此对于 DH,将密钥长度增加到 2048。您应该已经为 RSA 使用了更大的密钥长度。

接下来,研究人员提出了一些值得注意的观点。这篇论文涵盖了 Logjam,我不会详细解释它,只是说它是 MITM,密码套件降级攻击。聪明,但在算法上并不复杂。

我强烈敦促任何有兴趣阅读这篇论文的人。这是梦幻般的。这是摘要的第二段。

我们继续考虑具有 768 位和 1024 位组的 Diffie-Hellman。我们估计,即使在 1024 位的情况下,在给定民族国家资源的情况下,计算也是合理的。数以百万计的服务器使用少量固定或标准化的组;对单个 1024 位组执行预计算将允许对 18% 的流行 HTTPS 站点进行被动窃听,第二组将允许解密到 66% 的 IPsec VPN 和 26% 的 SSH 服务器的流量。仔细阅读已发布的 NSA 泄密文件表明,该机构对 VPN 的攻击与实现这样的突破是一致的。我们得出结论,转向更强大的密钥交换方法应该是 Internet 社区的优先事项。

这几乎说明了一切。被 NSA 破解的固定密钥允许观察者(被动)破解许多安全网络协议。因此,请勿使用预配置或通用密钥(如果可能)和/或延长您的密钥长度。

至于 TLS+DH+RSA 密码套件,这在更高的密钥长度下是否安全?

我敢说它不会受到观察者的攻击,但是,它仍然会受到中间人攻击,这就是方法。

在这种模式下,服务器使用其 RSA 密钥 ( ) 签署其 DH 临时文件Sign((g^B)%P,RSA_Key_Server)这意味着,DH 交换的服务器部分已通过身份验证。假设签名在到达客户端时是有效的并且服务器证书没有被撤销,客户端可以安全地进行 DH 交换,知道只有服务器可以完成它。

那么,MITM 怎么可能呢?两种方式,一种比另一种更有可能。两者都依赖于客户端未能进行正确的签名检查。

首先,客户端在其密钥库中有太多的根证书颁发机构(许多浏览器有超过 100 个)。其中一些根 CA 不可信。MITM 获取相关远程站点的服务器证书,位于中间并使用自己的证书 ( Sign((g^B2)%P,RSA_Key_Middle_Server)) 进行签名。客户端将验证签名,假设服务器是真实的并完成与服务器的 DH 交换。同时,中间服务器可以运行自己的客户端与真实服务器进行交换,并观察其间的所有数据。

其次,我认为这种可能性较小。客户端无法检查已撤销的证书,而 MITM 拥有已撤销的私钥,因此它可以像原来的真实服务器一样进行签名。客户不会知道,因为它没有检查撤销。中间服务器,再次与远程真实服务器运行另一个 DH 交换并位于中间。

故事的寓意是注意您的客户端配置并增加您的密钥长度。


编辑#3:在几十年前找到了对 DH 攻击的引用:

BA LaMacchia 和 AM Odlyzko。计算素数域中的离散对数。设计、代码和密码学,1:46-62,1991。

打破它们的一种方法是找到绕过它的方法。几乎总是有各种方法可以绕过所有类型的安全性。我赞同“如果人能建造它,人就能摧毁它”的心态

您可以在常见的软件中,例如当然,在. 我们不要忘记然后你有一些东西,比如预装了后门的硬件。Install backdoorsAdobe FlashPDFJavaWindows services

您所要做的就是正确执行。在许多平台和几乎任何编程语言中都有很多方法可以做到这一点。implement something that allowsto run arbitrary code

有目的地实施安全漏洞是某些机构真正喜欢做的事情之一。

然后甚至不需要加密。当有许多不同的方法时,谁会关心您的四层 Dalek 博士加密 VPN 连接?