Diffie–Hellman (以下简称DH)密钥交换是一个特殊的交换密钥的方法。它是密码学领域内最早付诸实践的密钥交换方法之一。 DH可以让双方在完全缺乏对方(私有)信息的前提条件下通过不安全的信道达成一个共享的密钥。此密钥用于对后续信息交换进行对称加密。
DH 算法的安全性依赖于计算离散对数的困难程度。离散对数问题可简单解释如下:
如果p 是一个素数,g 和x 是整数,计算 y = gx mod p 非常快。但是相反的过程:先知道 p, g 和y,要求某个x(离散对数),满足等式y = gx modp,通常十分困难。此相反求离散对数的过程称为“离散对数问题”。例如:如果15 = 3xmod17, 则x = 6。
g和p的选择对此类系统的安全性影响很大。为了保证无法求解离散对数问题,p应该是一个很大的素数,例如1024bit的,而且 (p-1)/2也应该是素数。G要求是p的primitive root,也就是讲整数序列: g mod p,g mod p, g2mod p, …., gp-1 modp中的p个元素均是不同的整数。
DH方法针对的是以下困难的局面:Alice和Bob 想共有一个密钥,用于对称加密。但是他们之间的通信渠道是不安全的。所有经过此渠道的信息均会被敌对方:Eve看到。哪他们要如何交换信息,才能不让Eve知道这个密钥呢?
以下是DH协议的方案:
1. Alice和Bob先对p 和g达成一致,而且公开出来。Eve也就知道它们的值了。
2. Alice取一个私密的整数a,不让任何人知道,发给Bob 计算结果:A=ga modp. Eve 也看到了A的值。
3. 类似,Bob 取一私密的整数b,发给Alice计算结果B=gb mod p.同样Eve也会看见传递的B是什么。
4. Alice 计算出S=B a mod p=(gb)a modp=gabmod p.
5. Bob 也能计算出S=Ab mod p=(ga)bmodp=gabmod p.
6. Alice 和 Bob 现在就拥有了一个共用的密钥S.
7. 虽然Eve看见了p,g, A and B, 但是鉴于计算离散对数的困难性,她无法知道a和b 的具体值。所以Eve就无从知晓密钥S 是什么了。
1. Diffie–Hellman key exchange
http://en.wikipedia.org/wiki/Diffie-Hellman_Key_Exchange
2. Bruce Schneier,AppliedCryptography, Second Edition: Protocols, Algorthms, and Source Code in C. ,John Wiley & Sons, Publication Date: 01/01/96