Diffie-Hellman(DH)密钥交换是密码学中里程碑式的协议,由 Whitfield Diffie 和 Martin Hellman 于 1976 年提出。它首次解决了在不安全信道上安全交换共享密钥的问题,为后续加密通信(如 SSL/TLS、VPN)奠定了基础。其核心思想是利用数学中的离散对数问题和模运算的交换律,让通信双方在不泄露私钥的情况下,通过公开信息计算出相同的共享密钥。
核心原理
DH 协议的安全性基于离散对数难题:对于大素数 p、生成元 g 以及公开值 A=gamodp,在已知 p,g,A 的情况下,求解私钥 a(即离散对数 a=logqA(modp))在计算上是不可行的。
在DH 密钥交换中,模幂运算的交换律是确保双方能计算出相同共享密钥的核心数学基础。它描述了模运算环境下,指数运算的顺序不影响最终结果的特性,具体表现为:对于底数、指数和模数满足特定条件时,(gamodp)bmodp=(gbmodp)amodp,且两者最终都等于 gabmodp。关于模运算及模幂运算交换律更多细节可以查看密码学-基础理论-模运算及模幂运算交换律模运算。
基本步骤
-
公共参数协商
通信双方(假设为Alice和Bob)首先约定两个公开参数:
- 一个大素数 p(通常长度为 2048 位或更长,确保安全性);
- 一个模 p 的生成元 g(即 g 的幂次能生成模 p 的所有非零元素,也称 “原根”)。
这两个参数可以预先设定或通过公开信道传输,无需保密。
-
私钥生成与公钥计算
- Alice随机选择一个私钥 a(满足 1<a<p−1),并计算公钥 A=gamodp,然后将 A 发送给Bob;
- Bob随机选择一个私钥 b(满足 1<b<p−1),并计算公钥 B=gbmodp,然后将 B 发送给Alice。
注意:私钥 a 和 b 必须严格保密,仅各自持有;公钥 A 和 B 可公开传输。
-
共享密钥计算
- Alice收到Bob的公钥 B 后,用自己的私钥 a 计算共享密钥:KAlice=Bamodp=(gb)amodp=gabmodp;
- Bob收到Alice的公钥 A 后,用自己的私钥 b 计算共享密钥:KBob=Abmodp=(ga)bmodp=gabmodp;
由于模幂运算满足交换律(gab=gba),双方计算出的共享密钥 KAlice=KBob=gabmodp,至此密钥交换完成。
示例
为直观理解,以下用小数值举例(实际应用中参数需足够大):
-
公共参数:p=23(素数),g=5(模 23 的生成元);
-
Alice私钥 a=6,计算公钥 A=56mod23=15625mod23=8,发送 A=8 给乙方;
-
Bob私钥 b=15,计算公钥 B=515mod23=30517578125mod23=19,发送 B=19 给甲方;
-
Alice计算共享密钥:K=196mod23=47045881mod23=2;
-
Bob计算共享密钥:K=815mod23=327685mod23=2。
双方最终得到相同的共享密钥 K=2。
总结
DH 密钥交换的核心贡献是首次实现了不安全信道上的安全密钥协商,其设计巧妙利用了数学难题和运算交换性。尽管原始协议存在安全缺陷,但通过结合认证机制和椭圆曲线技术,衍生出的 ECDH 等方案已成为现代密码学的重要基础,广泛支撑着互联网通信的安全性。