迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
迪菲-赫尔曼通过公共信道交换一个信息,就可以创建一个可以用于在公共信道上安全通信的共享秘密(shared secret)。
交换信息的整个过程:
其中g、p、A、B是公开在网络中传输,a、b是秘密的。
最早提出这个协议使用一个素数p的整数模n乘法群以及其原根g。下面展示这个算法,绿色表示非秘密信息,红色表示秘密信息。
爱丽丝和鲍勃最终都得到了相同的值,因为在模p下g^ab和g^ba相等,注意a,b和g^ab = g^ba mod p 是秘密的,其他所有的值-p,g,g^a mod p以及g^b mod p-都可以在公共信道上传递,一旦爱丽丝和鲍勃得出了公共秘密。他们就可以把它用作对称密钥,进行双方的加密通信,因为这个密钥只有他们才能得到,当然,为了是这个例子变得安全,必须使用非常大的a,b以及p,否则以实验所有g^ab mod 23的可能取值(总共有最多22个这样的值,计算a和b很大也无济于事)。如果p是至少300位的质数,并且a和b至少有100位长,那么即使使用全人类所有的计算资源和当今最好的算法也不可能从g,p和g^b mod p 中计算出a,这个问题就是著名的离散对数问题,注意g则不需要很大,并且在一般的实践中通常是2或者5,IETF RFC3256文档中有几个常用的大素数可供使用。
算法理论证明:
设 A(Alice)、B(Bob)分别为爱丽丝和鲍勃两人
1、A: g^a mod p = m (eg:g=5,p= 23;)
2、B: g^b mod p = n
之后A、B两人交换m,n再次进行运算
3、A: n^a mob p = m^b mob p :B
下面对上式进行证明,先证明一个引理
假设有 g mod p = c ,则 g^a mod p = c^a mod p
因为:g mod p = c ,则必然存在唯一整数x, 使 g = px +c
g^a = (px +c )^a = ………(二项式定理展开)
两边同时除以p 我们发现等式右边(二项式展开部分)除去项c^a外,p的次数都大于0,所以除以p的余数必然由c^a这一项产生。
所以: g^a mod p = c^a mod p
引理证明完毕。
所以 (g mod p)^a = c^a
于是 (g mod p)^a mod p = c^a mod p = g^a mod p
以上过程主要证明:
(g mod p) ^a mod p = g^a mod p
所有对于任意的a,b都有以下式成立
(g^a mod p)^b mod p = (g^a)^b mod p = (g^b mod p)^a mod p
注:二项式分解过程
(px+c)^a = C(a,0)(px)^a + C(a,1)(px)^(a-1)*c + C(a,2)(px)^(a-2)*c^2 + … +C(a,a-2)(px)^2*c^(a-2) + C(a,a-1)(px)*c(a-1) + C(a,a)n^a