迪菲-赫尔曼通过公共信道交换一个信息,就可以创建一个可以用于在公共信道上安全通信的共享秘密(shared secret)。
以下解释它的过程(包括算法的数学部分):
最简单,最早提出的这个协议使用一个素数p的整数模n乘法群以及其原根g。下面展示这个算法,绿色表示非秘密信息, and红色粗体表示秘密信息:
|
|
|
|
爱丽丝和鲍伯最终都得到了同样的值,因为在mod p下gab 和 gba相等。 注意a, b 和 gab = gba mod p 是秘密的。 其他所有的值 – p, g, ga mod p, 以及 gb mod p – 都可以在公共信道上传递。 一旦爱丽丝和鲍伯得出了公共秘密,他们就可以把它用作对称密钥,以进行双方的加密通讯,因为这个密钥只有他们才能得到。 当然,为了使这个例子变得安全,必须使用非常大的a, b 以及 p, 否则可以实验所有gab mod 23 的可能取值(总共有最多22个这样的值, 就算a和b很大也无济于事)。 如果 p 是一个至少 300 位的质数,并且a和b至少有100位长, 那么即使使用全人类所有的计算资源和当今最好的算法也不可能从g, p和ga mod p 中计算出 a。这个问题就是著名的离散对数问题。注意g则不需要很大, 并且在一般的实践中通常是2或者5。
以下是一个更为一般的描述:
- 爱丽丝和鲍伯写上一个有限循环群 G 和它的一个生成元生成元 g。 (这通常在协议开始很久以前就已经规定好;g是公开的,并可以被所有的攻击者看到。)
- 爱丽丝选择一个随机自然数 a 并且将 ga mod p 发送给鲍伯。
- 鲍伯选择一个随机自然数 b 并且将 gb mod p 发送给爱丽丝。
- 爱丽丝 计算 (gb)a.
- 鲍伯 计算 (ga)b.
爱丽丝和鲍伯就同时协商出群元素gab,他可以被用作共享秘密。(gb)a 和(ga)b因为群是乘法交换的。 (见幂.)
身份验证
在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名,也可以像MQV那样签名ga和gb;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分;当Alice和Bob共享一个口令时,他们还可以从迪菲-赫尔曼算法使用口令认证密钥协商,类似于ITU-T的建议X.1035。这已经被用作了G.hn的家庭网络标准。