DH 密钥交换算法

DH 密钥交换算法

Diffie-Hellman-Merkle(DH) 算法是最早的公钥交换算法之一。DH 算法在公共网络中建立了一个可靠的通信通道。

一般地,可用颜色交换来解释这个算法。首先双方有共识部分(黄色),各自的私钥(红色、蓝绿色),双方各自用自己的密钥和共识部分混合,形成用于交换的密钥(橙色、蓝色),互相交换,最后各自将收到的颜色和各自的私钥再进行混合,形成双方的通信密钥(棕色)。

Illustration of the concept behind Diffie-Hellman key exchange
Illustration of the concept behind Diffie-Hellman key exchange

一个最简单、最原始的实现方法是基于离散对数问题构造的。首先给定一个大素数 \(p\),并给出模 p 的原根 g。g 与 p 就是共识部分。g 与 p 保证了私钥可以从 1-p-1 中任意选取。

  1. 通信双方 Alice 和 Bob 达成共识,选取大素数 p 和其原根 g。
  2. Alice 选取密钥 a,向 Bob 发送 \(A = g^a\ mod(p)\)
  3. Bob 选取密钥 b,向 Alice 发送 \(B = g^b\ mod(p)\)
  4. Alice 收到 B,计算 \(s=B^a\ mod(p)=g^{ab}\ mod(p)\)
  5. Bob 收到 A,计算 \(s=A^b\ mod(p)=g^{ab}\ mod(p)\)
  6. Alice 和 Bob 现在享有通信密钥 s

在通信过程中,g 、p、\(g^a\ mod(p)\)\(g^b\ mod(p)\) 作为共识部分,可以公开,即公钥,但在每次通信时需要重新选取。a、b、\(g^{ab}\ mod(p)\) 是通信过程中的私钥。

已知 g 、p、\(g^a\ mod(p)\)\(g^b\ mod(p)\) 计算 a 和 b 十分困难,这就是基于离散对数分解问题。这是十分困难的。

DH 共识不仅只适用于双方通信,它允许任意多的通信方加入进来。以三方为例:

  1. 通信三方 Alice、Bob 和 Carol 达成共识,选取大素数 p 和其原根 g。
  2. Alice 选取密钥 a,向 Bob 发送 \(g^a\)
  3. Bob 选取密钥 b,向 Carol 发送 \(g^{ab}\)
  4. Carol 选取密钥 c,计算 \(g^{abc}\) 作为通信密钥
  5. Bob 向 Carol 发送 \(g^b\)
  6. Carol 向 Alice 发送 \(g^{bc}\)
  7. Alice 计算 \(g^{abc}\) 作为通信密钥
  8. Carol 向 Alice发送 \(g^c\)
  9. Alice 向 Bob发送 \(g^{ac}\)
  10. Bob 计算 \(g^{abc}\) 作为通信密钥

同样地,\(g^a、g^b、g^c、g^{ab}、g^{ac}、g^{bc}、g、p\) 被通信以外的人知道,也无法计算密钥 \(a、b、c、g^{abc}\)

DH 协议一个巨大的缺陷是不能抵抗中间人攻击。DH 协议是没有对收到的信息进行验证的。如果第三方截获了信道内双方的通信,完全可以假冒成通信的另一方,截获双方的通信内容。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×