我一直在阅读示例代码,展示如何执行DH密钥交换。超级简单,我理解它。然而,我不知道的是p和q的适当大小应该是什么。在样本中,数字非常小。但我认为,在实践中,它们应该更大。多大了? 16-22位数的素数是否足够?
答案 0 :(得分:5)
为DH选择安全组需要的不仅仅是使用足够大的素数。 由于素数可以重复使用,因此可以重用预先计算的参数。 例如。 IETF RFC 3526有许多提议的小组。 第8节估计了每个拟议组的安全性。
请注意,Diffie-Hellman实现通常会避免小q(不幸的是,SquareRootOfTwentyThree提出)。原因是subgroup confinement attacks。该 已选择上述IETF组以避免此类攻击。
答案 1 :(得分:2)
假设 q 表示模块 p 的子组大小,2013年的一些安全值对于前者为224位,后者为2048位。以十进制数字表示,分别表示68和309。
检查有关加密密钥长度的各种意见的好网站是(不开玩笑)http://www.keylength.com。在您的情况下,关于离散对数的那些与您相关。