Diffie-Hellman 密钥交换
在使用对称加密中,有一些无法避免的问题:
-
密钥如何从加密方传递给解密方。窃听者如果可以劫获密文,那么也可能劫获密钥。
-
如果窃听者破解了密钥,加密方如何将新的密钥安全地交给解密方
1. DH 密钥交换
解决上述问题的一种方法就是 DH 密钥交换 技术 。
DH 密钥交换全称为 Diffie-Hellman 密钥交换 ,是1976年由 Whitfiedl Diffle 和 Martin Hellman 共同发明的一种算法。使用这种方法,通信双方可以在窃听者眼皮子底下来安全地传输密码。
DH 交换的步骤如下:

-
E 向 D 发送两个数 : 是一个非常大的质数, 是一个与 相关的数,称为
生成元(generator)(这个概念在会后面讲到). 和 不需要保密 。(其实这两个数也可以由 D 来生成) -
E 生成随机数 : 是一个介于 之间的数,这个数是只有 E 知道的私密数字
-
D 生成随机数 :同样, 也介于 , 且这个数只能由 D 知道
-
E 将 发送给 D : 是可以公开的
-
D 将 发送给 E :同样, 可以公开
-
E 计算共享密钥 :
-
D 计算共享密钥 :
由此可以得出
2 DH交换的安全性
在上述步骤中,窃听者可以得到的信息有4 个: . 由这 4 个数字计算出 是非常困难的。要计算 ,则要算出 。如果知道 算出 并不难,而根据 算出 则是不可能的(当 足够大时,至少在现在不可能)。 由 计算 的问题称为 有限域上的离散对数问题, 其复杂度即是 DH 密钥交换的基础。
生成元
生成元是 数论 中的概念。如果整数 满足 (即 互质), 那么根据欧拉定理, 必然存在正整数解。若 为所有解中的最小正整数,那么称 是 的阶,记作 。 对于整数 , 存在正整数 满足 , 则称 是 的一个原根 ,也可以称 是 的一个生成元。
对于 群 , 存在 , 那么 ,即是 的生成元。结合此文, 即为与 互质的有限域,即 , 即为 .
3 实践
-
**E 选择质数 , 生成元 **,并发送给 D
-
E 生成随机数 A . 假如 A = 9
-
D 生成随机数 B, 假如 B = 7
-
E 发送RA 给 D, RA =
-
D 发送RB 给 E, RB =
-
E 算出 KA, KA =
-
D 算出 KB, KB =
通过上述步骤,E 和 D 都生成了共享密钥 8.
4. 椭圆曲线的 DH 密钥交换
关于椭圆曲线的原理可以看这里。椭圆曲线的DH密钥交换在原理上和上面所讲的没有什么不同,只不过生成圆G和质数P是椭圆曲线的参数。加解密双方只需要协商使用同一条曲线即可获得同样的基点G 与常量 P. 在椭圆曲线中,知道 求 是一件很困难的事,这就是椭圆曲线 DH 密钥交换的理论基础。
