经过搜索,我发现自己对Diffie Hellman算法中使用P和G感到困惑。有必要P是素数,而G是P的原始根。
我理解安全性是基于分解两个非常大的素数的结果的难度,所以我没有问题。然而,似乎没有关于G是P的原始根的目的的可用信息很少。任何人都可以回答为什么存在这种要求(如果可能的话,引用)?它只是增加了安全性吗?鉴于可以使用p和g的任何组合创建共享密钥,即使是不是素数的组合,我发现这很有趣。它肯定只是为了安全吗?如果是这样,它如何增加呢?
提前致谢
丹尼尔
答案 0 :(得分:13)
如果 g 不是 p 的原始根, g 只会生成GFp的子组。这会对系统的安全属性产生影响:系统的安全性只会与 GF p 中 g 的顺序成比例与 GF p 的完整顺序成比例。
举一个小例子:选择 p = 13且 g = 3.
GF_13 中的3的顺序为3(3 ^ 1 = 3,3 ^ 2 = 9,3 ^ 3 = 1)。
遵循Diffie-Hellman的常规步骤,Alice和Bob应该在1和 p -1之间选择整数 a , b 并且计算得分。 A = g a 和 B = g b 。为了暴力破解,攻击者应该尝试在1和 p -1之间尝试 a (或 b )的所有可能值,直到找到产生 A (或 B )的值。但由于 g 不是原始的根模 p ,他只需要尝试值1,2和3以找到解决方案 a'使 A = g a' 。秘密是 s = g ab = (g a ) b = (g a') b = g a'b < / strong> = (g b ) a' = B a' ,攻击者现在可以计算出来。
答案 1 :(得分:5)
不要求用于Diffie-Hellman的生成器g是原始根,这也不是常见的选择。更受欢迎的是选择g以使其生成主要订单子组。即g的阶数是素数q,它是p-1的一个主要因子。
例如,为IKE提出的Diffie-Hellman群被选择为p是安全素数,g生成有序子群(p-1)/ 2。
选择g作为大素数子群的生成器的一个动机是允许这样做 decisional Diffie-Hellman assumption。如果g是原始根,则该假设不成立,这使得对实现的协议的分析更加困难。
答案 2 :(得分:2)
根据分解的难度,Diffie-Hellman的安全性不。它基于(假设的)计算一般离散对数的难度。
g 必须是 p 的原始根,才能使算法正确且可用。它确保每个数字 0&lt; = x&lt; p ,有一个明显的 g x mod p 值。也就是说,它确保 g 可以“生成”有限域中的每个值。