迪菲-赫尔曼密钥交换

Diffie–Hellman(DH)密钥交换协议是现代密码学的基础性成果之一,由图灵奖得主惠特菲尔德·迪菲(Whitfield Diffie)与马丁·赫尔曼于 1976 年提出,首次实现了在不安全信道中建立共享密钥的机制,奠定了非对称加密体系的安全通信基石。

迪菲-赫尔曼密钥交换的同义词包括:

  • 迪菲-赫尔曼密钥协商

  • 迪菲-赫尔曼密钥建立

  • 指数密钥交换

  • 迪菲-赫尔曼协议

虽然迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础。

迪菲-赫尔曼通过公共信道交换一个信息,就可以建立一个可以用于在公共信道上安全通信的共享秘密。

以下解释它的过程(包括算法的数学部分):

下面的图示可以方便你理解每个信息都只有谁知道。

伊芙是一个窃听者——她可以看到爱丽丝和鲍伯的通讯内容,但是无法改变它们)

  • Let s = 共享密钥。 s = 2

  • Let a = 爱丽丝的私钥。如 a = 6

  • Let A = 爱丽丝的公钥。如 A = ga mod p = 8

  • Let b = 鲍伯的私钥。如 b = 15

  • Let B = 鲍伯的公钥。如 B = gb mod p = 19

  • Let g = 公共原根。如 g=5

  • Let p = 公共素数. 如 p = 23

爱丽丝: 鲍伯:

知道
不知道

p = 23

base g = 5

a = 6

b = 15

A = 56 mod 23 = 8

B = 5b mod 23 = 19

s = 196 mod 23 = 2

s = 8b mod 23 = 2

s = 196 mod 23 = 8b mod 23

s = 2

知道
不知道

p = 23

base g = 5

a = 6

b = 15

B = 515 mod 23 = 19

A = 5a mod 23 = 8

s = 815 mod 23 = 2

s = 19a mod 23 = 2

s = 815 mod 23 = 19a mod 23

s = 2

伊芙(窃听者):

知道
不知道

p = 23

base g = 5

a = 6

b = 15

A = 5a mod 23 = 8

B = 5b mod 23 = 19

s = 19a mod 23

s = 8b mod 23

s = 19a mod 23 = 8b mod 23

s = 2

注意:对爱丽丝来说解开鲍伯的私钥或鲍伯要解开爱丽丝的私钥应该都很困难。如果对爱丽丝来说解开鲍伯的私钥不难的话(反之亦然),伊芙可以轻易地替换掉她自己的私钥/公钥对,把鲍伯的公钥插到她自己的私钥,产生出一个假的共享密钥,并解开鲍伯的私钥(然后用这个解开共享私钥。伊芙可以试着选择一个能让她轻松解开鲍伯的私钥的公钥/私钥对)。

安全性

在选择了合适的Gg时,这个协议被认为是窃听安全的。偷听者伊芙可能必须通过求解迪菲-赫尔曼问题来得到gab。在当前,这被认为是一个困难问题。如果出现了一个高效的解决离散对数问题的算法,那么可以用它来简化a或者b的计算,那么也就可以用来解决迪菲-赫尔曼问题,使得包括本系统在内的很多公钥密码学系统变得不安全。

G应当是一个素数,或者它有一个足够大的素因子以防止使用Pohlig–Hellman算法来得到a或者b。由于这个原因,一个索菲热尔曼素数 q可以用来计算素数p=2q+1,这样的p称为安全素数,因为使用它之后G的阶只能被2和q整除。g有时被选择成Gq阶子群的生成元,而不是G本身的生成元,这样ga的勒让德符号将不会显示出a的低位。

如果Alice和Bob使用的随机数生成器不能做到完全随机并且从某种程度上讲是可预测的,那么Eve的工作将简单的多。

临时DH(D-H Ephemeral,DHE)能够提供前向安全性。

身份验证

在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。

有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名,也可以像MQV那样签名gagb;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分;当Alice和Bob共享一个口令时,他们还可以从迪菲-赫尔曼算法使用口令认证密钥协商,类似于ITU-T的建议X.1035。这已经被用作了G.hn的家庭网络标准。

在DF协议中的应用

在 DF 协议中,我们采用椭圆曲线变种 ECDH(Elliptic Curve Diffie–Hellman)协议作为通信加密层的核心算法,通过如下步骤建立节点间端到端共享密钥:

  1. 每个节点生成一对椭圆曲线公私钥(使用如 Curve25519 或 secp256r1 曲线);

  2. 节点交换公钥,私钥保持本地存储不公开;

  3. 双方各自使用对方公钥与自身私钥计算出一致的共享密钥;

  4. 共享密钥用于派生对称密钥(如 AES-256 session key)加密后续数据传输。

由于 ECDH 的计算安全基于椭圆曲线离散对数问题(ECDLP),即使在面对现代计算资源也难以被破解。此外,DF 协议还通过频繁更新会话密钥、引入前向保密机制(Perfect Forward Secrecy)和可选的格密码辅助通道,进一步增强协议在抗中间人攻击、抗量子计算场景下的长期安全性。

这一机制确保了在无需第三方信任的前提下,通信两端可建立对称密钥,并实现端到端的安全链路,构成 DF 协议可信通信体系的加密底座。

Last updated