一 什么是DH密钥交换
DH密钥交换是1976年由Diffie和Hellman共同发明的一种算法。使用这种算法,通信双方仅通过交换一些可以公开的信息就能够生成出共享的密码数字,而这一密码数字就可以被用作对称密码的密钥。IPsec中就使用了经过改良的DH密钥交换。
虽然这种方法的名字叫“密钥交换”,但实际上双方并没有真正交换密钥,而是通过计算生成出一个相同的共享密钥。因此,这种方法也称DH密钥协商。
二 DH密钥交换的步骤
现在假设Alice和Bob需要共享一个对称密码的密钥,然而双方之间的通信线路已经被窃听者窃听。这时,Alice和Bob可以通过下面的方法进行DH密钥交换,从而生成共享密钥。
1 Alice向Bob发送两个质数P和G
P必须是一个非常大的质数,而G则是一个和P相关的数,称为生成元。G可以是一个较小的数字。
P和G不需要保密,被窃听者获取了也没关系。
此外,P和G可以由Alice和Bob中的任意一方生成。
2 Alice生成一个随机数A
A是一个1~P-2之间的整数。这个数是一个只有Alice知道的秘密数字,没有必要告诉Bob,也不能让窃听者知道。
3 Bob生成一个随机数B
B是一个1~P-2之间的整数。这个数是一个只有Bob知道的秘密数字,没有必要高数Alice,也不能让窃听者知道。
4 Alice将 G的A次方 mod P 这个数发送给Bob
这个数让窃听者知道也没关系。
5 Bob 将 G的B次方 mod P 这个数发送给Alice
这个数让窃听者知道也没关系。
6 Alice用Bob发过来的数计算A次方并求 mod P
这个数就是共享密钥。
上面将mod P的“G的B次方的A次方” 改写成了“G的A*B次方”
7 Bob用Alice发过来的数计算B次方并求 mod P
上面将mod P的“G的A次方的B次方”改写成了“G的A*B次方”
于是Alice和Bob就计算出相等的共享密钥了。