1976年, DiffieHellman 提出了一种方法, 这种方法与以前四千年来密码学中的所有方法有着根本区别, 它是密码学中的一个惊人成就.  (参见参考文献 DIFF76 a, b) 虽然 Diffie 和 Hellman 是首次公开提出的人, 不过, 国家安全局 (NSA) 负责人 Admiral Bobby Inman 声称 NSA 早在 1960 年代中期就已提出 (参见参考文献 SIMM93). 这个概念的最早文字记录来自 James Ellis 于 1970 年代写成的一份机密报告 (参见参考文献 ELLI70) , 这概念出自于 NSA 类似的联合王国机构: 即通信电子安全研究组 (The Communications-Electronics Security Group), Ellis 称这种技术为非保密的加密方法, 他在 (参考文献 ELLI99) 中也描述了这一发现.


简单步骤

步骤1: 消息源 A 产生明文消息 X=[X1, X2, ... XM], 其中 X 的 M 个元素是某有穷字母表上的字符, A 欲将消息 X 发送给 B. B 产生公钥 KUb 和私钥 KRb, 其中只有 B 知道 KRb, 而 KUb 是公开发布的. 所以 A 可以访问 KUb.

步骤2: 对作为输入消息的 X 和加密密钥 KUb , A 生成密文 Y=[Y1, Y2, ... , YN], 所以:

Y=EKUb(X)

            期望的接受方拥有相应的私钥, 可以进行如下逆变换:

 X=DKRb(Y)

(步骤2接受攻击): 攻击者可以观察到 Y 并访问 KUb, 但不能访问 KRb 或 X,  所以攻击者必然会想要设法恢复 X 和/或 KRb.假定攻击者知道加密 (E) 和解密 (D) 算法, 如果他只关心 X 这一条消息, 则他会集中精力试图产生明文估计值 X' 来恢复 X. 但实际情况下, 攻击者通常试图获得其他消息, 所以他会通过产生估计值 K'Rb 来试图恢复 KRb.

Diffie-Hellman key agreement protocol 是由Diffie和Hellman在1976年开发。

这个协议允许两个用户在不安全的介质上交换secret key。
协议有两个系统参数p和g,这们是公开的,并且在一个系统中被所有用户使用。参数p是主要参数,参数g(也称为generator)是比p小的整数。对于一个介于1和p-1之间的数n,n = (gk) mod p。

假设A和B两人同意使用Diffie-Hellman key agreement protocol来共享secret key。处理过程如下:
1. A生成随机的私有值a,B生成随机的私有值b,a和b都是整数。
2. A和B通过使用参数p和g,以及他们的私有值来获得他们的公共值,A的公共值是(g^a) mod p,B的公共值是(g^b) mod p,然后他们交换各自的公共值。
3. 最后,A计算g(ab) = (gb)a mod p,b计算g(ba) = (ga)b mod p,直到gab = gba = k时,A和B就拥有了一个共享的secret key,即k。

这个协议依赖于离散对数的安全性。它假定当p足够大时,通过公共值(ga) mod p和(gb) mod p无法计算出共享的secret key,即k = g(ab) mod p。

D-H的key交换容易被中间人攻击。在这个攻击中,敌人C截取A的公共值,然后发送自己的公共值给C,当B传递自己的公共值时,C代替B发送它自己的公共值给A,因此C和A同意彼此的共享key,C和B同意彼此的共享key。
经过这个交换,C只需简单的解密任何由A或B发送的数据,然后在再次被使用合适的key加密以前读取并且修改这些数据,然后传输这些数据到另一方。
D-H之所以有这个弱点,是因为key在交换时并不对其参与者进行认证。可能的解决办法是使用数字签名,以及使用其它的协议变种。

1992年Diffie, van Oorschot和Wiener开发了authenticated Diffie-Hellman key agreement protocol,或称为Station-to-Station (STS)协议,它用于防止在Diffie-Hellman key agreement protocol上的中间人攻击。它对中间人攻击的免疫来自于两方面,一个是使用数字签名来相互认证,另一个是使用public-key certificate。
使用STS协议时,A与B都提供自己的公钥/密钥对和共钥的证书,A根据一些消息来计算一个签名,其中包括公共值g^a mod p,B也做类似的运算。即使C仍然能够截取A与B之间的信息,但他并不能在没有A和B的密钥的情况下伪造签名,因此,这个增强的协议抵挡了中间人攻击。

近几年,原始的D-H协议被认为是很多普通加密技术的一个范例,the common element being the derivation of a shared secret value (that is, key) from one party's public key and another party's private key. 双方的钥对在每次运行这协议时都会重新生成。公钥能够被认证,所以双方能够被认证,并且他们能够被组合。

小节1: 这种方法中, A 向 B 发送消息前, 先用 A 的私钥对消息进行加密, B则用 A 的公钥对消息进行解密. 由于是用 A 的私钥对消息加密, 所以只有 A 可加密消息, 因此, 整个加密後的消息就是数字签名. 此外, 因为只有拥有 A 的私钥才能产生上述加密後的密文, 因为该消息可认证源和数据完整性.

小节2: 公钥密码体系应用可分为三类:

  • 加密/解密: 发送方用接受方的公钥对消息加密
  • 签名: 发送方用其私钥对消息签名. 签名可以对全部消息或只对一个小数据段加密产生, 这个小数据段是整条消息的函数.
  • 密钥交换: 同学双方交换回话密钥. 有几种不同的方法可用于密钥交换, 这些方法都使用了通信一方或双方的私钥.

有些算法可以用于三种应用, 有些不行. 

返回上层