有一个网站weakdh.org,仅凭其名称肯定会在非专家恕我直言的人中使用DH 时产生一些不确定感。可否请有识之士谈一谈卫生署现时的保安状况,即今日应用卫生署时须注意的主要预防措施是什么?
我对在 SSL 中使用所需的最小密钥大小特别感兴趣,但会感谢其他信息。
有一个网站weakdh.org,仅凭其名称肯定会在非专家恕我直言的人中使用DH 时产生一些不确定感。可否请有识之士谈一谈卫生署现时的保安状况,即今日应用卫生署时须注意的主要预防措施是什么?
我对在 SSL 中使用所需的最小密钥大小特别感兴趣,但会感谢其他信息。
weakdh.org网站是关于Logjam攻击的。与网站名称可能暗示粗心的人相反,这并不是 DH 软弱;它更多的是在使用 DH 时做事弱。
Diffie-Hellman在以给定素数p为模的整数乘法子群中工作。做一些 DH,你使用一些DH 参数,它们是:
为了 DH 的安全,您需要以下内容:
p必须通过Index Calculus击败离散对数的尝试。这意味着p必须足够大,并且不能有任何“特殊结构”,例如非常接近 2 的幂,因为这样的结构可以改进索引演算。碰巧 DH 的大小要求与 RSA 的大小要求大致相同,尽管其根本原因是错综复杂的,部分是巧合。所以,基本上,使用 2048 位的随机p,你会没事的。
q应该是素数或有一个素数除数,其大小足以击败离散对数的通用算法。如果q的最大素数除数的大小(以位为单位)为z,则通用算法的成本为 2 z /2。为获得最佳结果,请将q安排为256 位或更多位的素数。
当然,使用参数执行 DH 密钥交换的系统必须使用加密的强随机源统一生成介于 1 和q -1 之间的随机整数。如果q是素数且大于 256 位,则选择 256 位随机值即可实现 128 位安全性。但是,如果q不是素数,事情就更复杂了:如果q的大小为r位,并且q的最大素数除数的大小为e位,并且e ≥ 256,那么可以选择大小为r的随机值x -( e -256) 位以获得通常的“128 位安全性”。
当p是所谓的“安全素数”时,对于素数r ,p = 2r +1 ,因此对于任何不是 1 或p -1 的生成器g , g的阶数将是r或 2 r,因此生成 DH 密钥x作为随机 257 位值就足够了。“安全素数”实际上并不比其他素数更安全,除了这一点:它们允许为任何生成器选择相对较小的 DH 密钥。
最后但同样重要的是,DH 是一种密钥交换算法,本质上不提供身份验证或机密性。只有在使用 DH和其他具有适当集成的算法以实现数据机密性和完整性等受追捧的特性的协议中使用 DH 时,DH 才是“安全的” 。
说到这一点,一些(许多)SSL/TLS 实现做的不正确,因为他们很乐意接受使用弱参数进行 DH,特别是 512 位模数。协议本身在处理 DH 方面不是最理想的,因为该ServerKeyExchange
消息允许服务器将 DH 参数p和g发送给客户端,但不发送q,让客户端有点不知所措。因此,客户端必须“安全行事”并在完整的 1.. p -1 范围内生成其密钥,或者尝试使用更短的指数(例如,256 位,而不是 2048)以降低计算成本,但可能在如果子组阶q不是素数,则存在弱点的风险。更好的设计应该允许服务器发送q的值以及q的最大素数除数的大小。在这方面,SSL/TLS 的 ECDHE 密码套件(DH 转换为椭圆曲线)具有更好的设计。
对于一个实际的答案,如果你配置你的SSL / TLS服务器:你应该使用至少2048位的模量和发电机摹这样的顺序摹是一个素数q至少256位; 或者,您可以使用作为“安全素数”的模数p(然后g的阶数将是一个非常大的素数,或者是一个非常大的素数的两倍,这几乎一样好)。有些人在“自己”(*)生成 DH 参数而不是重用现有值时感到更安全;如果这就是让你晚上睡觉所需要的,那就去做吧。
(*) 人们永远不会自己生成 DH 参数;他们使用电脑。但无论如何,我们在这里谈论的是心理学。
首先,不要惊慌,如果使用得当(使用正确的参数集),Diffie-Hellman 的算法完全没问题。
让我先解释一下:
它是 HTTPS 中使用的底层协议,可防止窃听和篡改通道中发送的数据。它使用 diffie-hellman 协议在客户端和服务器之间交换密钥。
SSL/TLS 协议是可扩展的,它能够使用多种算法对数据进行加密和签名,这些可互换的包称为密码套件,您可以使用 TLS_RSA_WITH_RC4_128_MD5 作为密码套件,使用 RSA 进行密钥交换,RC4 用于批量数据加密和 MD5 签名。
什么是 LogJam?
现在有一些称为 EXPORT-GRADE 的密码套件(例如 TLS_RSA_EXPORT_WITH_RC4_40_MD5),由于美国对密码算法的出口法规,它们故意很弱。这些密码套件的密钥长度很短并且很容易被破解,如果有人没有在他们的服务器上禁用它们并且客户端使用它们,那么共享密钥可能会泄露并且加密可能被攻击者破解。对 RSA 进行了一次名为 FREAK 的攻击,对 Diffie-Hellman 进行了一次名为 LogJam 的攻击。
现在,如果可以强制客户端使用 EXPORT-GRADE 密码套件,并且服务器恰好支持它们,那么由于使用短密钥长度,攻击者可以通过破坏 diffie-hellman 算法来进行 MITM 攻击。这就是 LogJam 的意义所在。
还有另一个漏洞,其中一些 Web 服务器使用长度为 1024 的默认 diffie-hellman 参数,该参数也被破坏。
注意:这都是关于算法中使用的参数,Diffie-Hellman 算法本身没有错。
现在要做什么?
如果您使用现代浏览器并保持更新,那么现在它们已经阻止了这种攻击的发生。
如果您正在运行网络服务器,请确保您使用最佳实践来配置启用 SSL/TLS 的版本和底层密码套件。
至于最小密钥大小,1024 位是普通攻击者无法触及的,但民族国家却不是。2048位是安全的。您还可以使用 ECDHE,它是椭圆曲线上的 diffie-hellman,基本上可以为您提供相同级别的安全性和更短的密钥长度。