迪菲-赫尔曼密钥交换( Diffie–Hellman key exchange ,简称「D–H」) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
1、离散对数的数学概念
协议基于离散对数的概念:
如果$ a$是素数$ p$的一个原根,那么数值:
是各不相同的整数,且以某种排列方式组成了从 1 到 p-1 的所有整数。
如果对于一个整数$ b$和素数$ p$的一个原根$ a$,可以找到一个唯一的指数$i$,使得:
那么指数$ i$称为$ b$的以$ a$为基数的模$ p$的离散对数。
Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数$ p$和它的一个原根$ a$后,对给定的$ b$,要计算 $ i$ ,被认为是很困难的,而给定$ i$ 计算$ b$ 却相对容易 。
2、具体的 Diffie-Hellman 算法
假如用户 A 和用户 B 希望交换一个密钥。取素数$ p$和整数$ a$,$ a$是$ p$ 的一个原根,公开$ a$和$ p$。
- A 选择随机数$ X_A<p$,并计算$ Y_A=a^{X_A} \mod p$。
- B 选择随机数$ X_B<p$,并计算$ Y_B=a^{X_B} \mod p$。
每一方都将 X 保密而将 Y 公开让另一方得到。
- A 计算密钥:$ K=Y_B^{X_A} \mod p$。
- B 计算密钥:$ K=Y_A^{X_B} \mod p$。
密钥的有效性:
由于$ X_A$和$ X_B$是保密的,而第三方只有$ p$, $ a$, $ Y_B$、$ Y_A$可以利用,只有通过取离散对数来确定密钥,但对于大的素数$ p$,计算离散对数是十分困难的。
3、优势和缺陷
DH 协议可以让通信双方平等地协商密钥,而且可以很简单地扩充到多方协商。
该协议可以防止中间人偷窥,恶意中间人对数据流的截获并不会计算出双方协商出的密钥。但该协议无法完全防止中间人攻击。如果中间人仿冒 A ,和 B 协商一份密钥$ K_{AB}$;再仿冒 B 和 A 协商一份密钥$ K_{BA}$。然后 A 发送给 B 的信息用$ K_{AB}$加密,中间人截获解密后再用$ K_{BA}$加密发送给 B ,此时 B 无法意识到信息被人查看。
因此,现代密码学中, DH 协议通常配合公钥体系( RSA 或者DSA)共同使用。协议双方会使用私钥签名,对方可以验证,从而防范中间人攻击。
Q. E. D.