如何选择Prime来实现Diffie-hellman密钥交换

时间:2017-04-23 08:08:13

标签: python security

我目前正在编写代码来实现基于RFC 2631和RFC 3526的Diffie-Hellman密钥交换。

正如您在RFC 3526中所看到的,有许多组如 1536位MODP组// 2048位MODP组// 3072位MODP组// 4096位MODP组// 6144位MODP组// 8192位MODP组

从这些组中选择一个组时,我应该做什么?

您能告诉我如何从这些组中选择一组进行Diffie-Hellman密钥交换和原因吗?

1 个答案:

答案 0 :(得分:0)

您应该注意的第一件事是使用来自标准carries some risk的固定素数。话虽如此,我相信国家安全局不能破解其中的任何一项,但这并不意味着他们将无法在XXX年后达到最小的一年。

您选择的密钥大小归结为您需要的安全性。我们知道用于打破Diffie Hellman的最佳算法与我们用于分解的最佳算法没有太大区别。简而言之,1024位及以下是禁止,但2048位及以上不会很快下降(除非有数学突破或量子计算机变得实用,如果后者发生,那么DH完全注定了。)

那么我们对什么是可裂解的了解呢?

  • 2010年,768-bit number was factored。作者总结说:“我们工作的另一个结论是,如果我们限制自己,我们可以自信地说 对于一个开放的社区,作为我们的学术努力,除非在保理中发生戏剧性的事情,否则我们将无法在未来五年内考虑1024位RSA模数(参见[30])。之后,所有赌注都已关闭。“
  • 今年,768-bit prime discrete logarithm was computed(证明768位DH是易碎的)。作者写道:“另外,我们在第3节中明确说明 继续使用1024位素数字段ElGamal或DSA密钥比1024位RSA(所有仍然常用)风险更大,因为一旦针对单个精心挑选的素数字段对所有用户进行了成功的攻击那个素数领域可能会受到一点额外的影响。“

正如您所看到的,没有迹象表明1536位接近受到攻击,这可能表明任何密钥大小都没问题。但是,考虑到我们对使用硬编码素数的危险性的了解,您可能希望在安全方面犯错,并使用至少2048位。

老实说,我不会因为超越这一点而感到恐慌。是的,有很多人认为应该使用至少4096位或更高。但是,我还没有看到任何人理解打破这些算法的数学。最大的讽刺是,当那些人建议使用4096位RSA或DH来交换256位AES密钥时,没有意识到他们已经降低了AES密钥的安全性。正如Unbelievable Security Matching AES security using public key systems中所述,“将AES-192或AES-256安全级别与公钥系统相匹配,要求公钥密度远远超过当前常规使用的任何内容。”即192位AES密钥对应7000位RSA / DH,256位AES对应16000位RSA / DH。

底线:使用2048位MODP组,不要惊慌。你更有可能让implementation problems破坏你的加密,而不是根据它的大小让某人破解这个数字。