0

当我阅读有关 DH 密钥交换如何工作的描述时,没有提到密钥交换器如何就应该使用哪个“组”(pg参数)来计算公共和私有值达成一致。查看RFC 5114,似乎有很多选择。

我想知道这种协商是否通常是在交换过程中完成的,如果没有,是否在某处描述了如果包含该步骤,算法会有什么不同。

谢谢阅读。

4

1 回答 1

1

p 和 g 值可以安全地通过未加密的方式传递。如果客户端/服务器在网络上,则客户端或服务器都会生成 p/g 值并通过网络套接字传递它们。只要每个客户端/服务器的秘密号码都是秘密的(duh..),Diffie-Hellman 交换可以说是安全的,因为攻击者必须计算 g^(ab) mod p = g^(ba) mod p(这会导致无限量的解决方案,因为 p 值足够大,所以无法计算)。

本质上,最基本的 DH 交换如下:

甲方产生p、g、a值。其中 g 是基数/生成器,p 是素数模数,a 是秘密幂。

B 方(同时)生成秘密值 b。

甲方计算 g^a mod p(我们称此值为 A)

甲方通过传输介质发送 p、g 和 A。

乙方收到 p、g、A。

B 方计算 g^b mod p(我们此后将此值称为 B)。

B 方通过传输介质发送 B。

甲方收到乙。

甲方计算 B^a mod p 并获得共享密钥。

B 方(同时)计算 A^b mod p 并获得共享密钥。

注意:如果 p 值太小,仅通过 0 到 p - 1 迭代可能会更便宜,但这完全取决于您在生成公共秘密后所做的事情。

于 2013-08-08T06:17:10.660 回答