我目前正在编写代码来实现基于RFC 2631和RFC 3526的Diffie-Hellman密钥交换。
正如您在RFC 3526中所看到的,有许多组如 1536位MODP组// 2048位MODP组// 3072位MODP组// 4096位MODP组// 6144位MODP组// 8192位MODP组
从这些组中选择一个组时,我应该做什么?
您能告诉我如何从这些组中选择一组进行Diffie-Hellman密钥交换和原因吗?
答案 0 :(得分:0)
您应该注意的第一件事是使用来自标准carries some risk的固定素数。话虽如此,我相信国家安全局不能破解其中的任何一项,但这并不意味着他们将无法在XXX年后达到最小的一年。
您选择的密钥大小归结为您需要的安全性。我们知道用于打破Diffie Hellman的最佳算法与我们用于分解的最佳算法没有太大区别。简而言之,1024位及以下是禁止,但2048位及以上不会很快下降(除非有数学突破或量子计算机变得实用,如果后者发生,那么DH完全注定了。)
那么我们对什么是可裂解的了解呢?
正如您所看到的,没有迹象表明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破坏你的加密,而不是根据它的大小让某人破解这个数字。