3

也许在这里问这个问题不太合适......无论如何,我正在尝试使用gmp库来实现DH,但我遇到的问题是:

有一次,当我进行测试以观察输出时,尽管选择了大的素数和私钥值:

  • p 大约有 300 多位十进制数
  • a、b 的长度约为 100 位

最后我得到了一个非常小的共享密钥,十进制可能小于 10^8 ......

这个问题并没有出现很多次,事实上,在所有的观察过程中,也只出现过一次……但是,这也不是那么好。

所以我想知道是否有一些方法可以避免这种情况......非常感谢

4

2 回答 2

2

Diffie-Hellman 密钥交换旨在生成秘密共享密钥。

通过使用较大的 p、a 和 b 值,您可以确保潜在共享密钥池非常大。

但是,共享密钥的实际值可以是该池中的任何值。结果,它的范围可以从零到(p - 1)......那是因为,关键是

G^(ab) mod p

因此,您在这里没有发现问题......您只是看到实例G^(ab)的值接近 的倍数p,因此mod是一个较低的数字。

于 2010-03-08T19:02:47.443 回答
1

DH 的部分要点是密钥可以是p 指定范围内的任何值。至少在理论上,消除其中一些可能性会降低安全性,而不是更安全(实际上,只要你留下足够大的密钥池,它就没有什么真正的区别)。

确实,如果攻击者决定尝试密钥耗尽(蛮力)攻击,并且从 0 开始并刚刚开始计数,他们会相对较快地击中这个。再说一次,如果您决定使用其他下限,并且(例如)如果密钥低于该下限,则重新协商密钥,它不会有任何真正的好处——攻击者不是从 0 开始,而是从指定下限,您将一无所获。

于 2010-03-08T19:05:39.667 回答