是否需要定期重新创建 Diffie-Hellman 参数?

信息安全 diffie-hellman
2021-09-09 20:41:17

生成 2048 位 DH 参数后,是否需要定期重新生成它们?如果是这样,我应该多久执行一次?

1个回答

一般来说,不,您不必定期重新创建参数。

Diffie-Hellam 通过解决离散对数问题获得突破(从技术上讲,没有证据表明必须解决 DL 才能打破 DH,但这仍然是最知名的方法)。碰巧的是,如果您能够破坏 DL 的一个实例,那么您可以重用大部分工作来破坏 DL 的其他实例,前提是它们都使用相同的模数(即相同的“DH 参数”)。在最近的“ Logjam 攻击”中,这被使用了:因为一些客户端和服务器同意使用弱模数(512 位),而且,它们似乎都使用相同的模数,攻击者在破坏了 DL 一次(通过大量努力)之后,现在可以准实时地再次对特定模数执行相同的操作,这使得MitM 变得实用。

不过,最初的“如果”很大。通常,您会使用足够大的 DH 参数来完全阻止最初的 DL 破坏工作发生。您不希望攻击者将最初的成功扩展到简单的中间人,但您也不希望他们获得最初的成功。使用 2048 位模数会使您在“无法破坏”区域中已经很远了。有关详细信息,请参阅本网站此外,即使在你的 DH 被破坏的科幻场景中,这仍然是你的参数,并且攻击努力将不适用于其他服务器 - 这意味着对其他人的 DH 参数的破坏努力不会影响. 通过使用您自己生成的参数,您已经获得了大部分保护。事实上,即使使用 512 位模数,使用您自己的参数而不是“标准”参数已经提供了很大的保护,因为虽然 512 位模数的初始中断是可行的,但它仍然是一个实质性的如果仅解锁对单个服务器(您的)的访问,则攻击者不太可能做出努力。


查看该问题的另一种方法是考虑服务器密钥。在带有 DHE 的 SSL/TLS 中,客户端和服务器进行 Diffie-Hellman 密钥交换,但服务器也对其发送的内容进行签名(通常使用 RSA)。服务器的密钥也不能被攻击者破解,否则攻击者可能会冒充服务器并再次进行简单的中间人攻击。因此,无论您如何处理 DH 参数,您仍然需要注意服务器密钥;换句话说,让 DH 部分真的比(RSA)签名部分更强大是没有用的。这延伸到密钥更新的概念:如果您觉得必须每三年更新一次 RSA 密钥(这是一个示例),那么您可以想在同一时间更新您的 DH 参数。比这更频繁地更新它是没有用的。同样,由于 DH 和 RSA 密钥似乎对相同长度提供了相似的阻力,因此如果您还使用 2048 位 RSA 密钥,您将需要使用 2048 位 DH 模数。

从技术上讲,密钥更新是无用的,但人们倾向于认为密钥更新以某种模糊指定的方式提供了最高的安全利益,并且他们非常喜欢它。如果你觉得你需要定期更新你的 RSA 密钥,这样你晚上可以睡得更好,那就去吧。同样的心理原因也适用于 DH 参数,因此如果您需要更新,请在同一天更新参数。

(如果我们想深入了解一些棘手的细节,那么我们可能会争辩说,服务器 RSA 密钥用于与 DH 参数不同的安全模型,因为签名用于即时服务器身份验证,而 DH 必须抵制记录和不可告人的破坏,可能在数年后, 取决于受保护数据的类型和价值。但是,根据定义,过去记录的对话不受以后更新的影响,因此该论点最终不适用于当前问题。)