Diffie-Hellman
密钥的配送一直是一个难以解决的问题,我们始终无法保证在不安全的线路中安全传递密钥。直到 Diffie-Hellman 密钥交换算法出现:一种确保共享密钥安全穿越不安全网络的方法。
Diffie-Hellman 密钥交换算法,是由 Whitfield Diffie 和 Martin Hellman 在1976年共同提出的一个奇妙的密钥交换协议。这个算法的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥,然后可以用这个密钥进行加密和解密。(注意:Diffie-Hellman 算法是一种建立密钥的方法,而不是加密方法,只能用于密钥的交换,而不能进行消息的加密和解密)
Diffie-Hellman 算法描述
- 有两个全局公开的参数,一个素数 p 和一个整数 a,其中 a 是 p 的本原元(a mod p,a2 mod p,a3 mod p…是互不相同的数,而且以某种排列包含从 1 到 p-1 的所有整数)。
- 假设有用户 A 和 B 希望安全交换一个密钥。
- A 用户生成一个作为私有密钥的随机数 XA(XA < p),这个随机数只能 A 知道,然后计算公开密钥 YA = aXA mod p,并发送给 B 用户。
- B 用户生成一个作为私有密钥的随机数 XB(XB < p),这个随机数只能 B 知道,然后计算公开密钥 YB = aXB mod p,并发送给 A 用户。
- A 用户使用 XA 和收到的 YB 计算共享密钥 K = YBXA mod p = (aXB mod p)XA mod p = aXB*XA mod p。
- B 用户使用 XB 和收到的 YA 计算共享密钥 K = YAXB mod p = (aXA mod p)XB mod p = aXA*XB mod p。
- 此时双方计算出相同密钥 K,成功交换共享密钥,使用密钥 K 进行通信。
Diffie-Hellman 安全性
在 Diffie-Hellman 算法中,公开的变量是 p、a、YA、YB ,共享密钥 K = aXA*XB mod p。其中 p、a 变量已知,问题在于已知 YA、YB求 XA、XB。这个问题涉及到离散对数问题,要解决是非常困难的。所以,我们可以相信 Diffie-Hellman 算法是非常安全的。
Diffie-Hellman 缺点
- 没有提供双方身份的任何信息。
- 它是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥。
- 受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在做真正的工作。
- 没办法防止重演攻击。
- 容易遭受中间人的攻击。
Oakley 算法是对 Diffie-Hellman 密钥交换算法的优化,它保留了后者的优点,同时克服了其弱点。