密钥交换算法
DH(Diffie-Hellman)
-
Diffie-Hellman(DH)算法详解
Diffie-Hellman(DH)算法 是一种用于安全密钥交换的加密协议,允许两个通信方在不直接传递密钥的情况下生成一个共享的对称加密密钥。DH 算法的核心思想是使用数学上的离散对数问题,使得即使第三方拦截通信,也无法推导出共享的密钥。
基本流程
- 公共参数生成:
- 双方协商并选择一个大素数 ( p ) 和一个基数(生成元) ( g ),这两个数是公开的,任何人都可以知道。
- ( p ):大素数,定义一个有限域。
-
( g ):生成元,定义在这个有限域上的一个数,通常是 ( g < p )。0双方生成私钥:
- 客户端 A 随机生成一个私钥 ( a ) 并保密。
- 服务器 B 随机生成一个私钥 ( b ) 并保密。
- 公共参数生成:
- 双方生成公钥并交换:
- 客户端 A 计算公钥 ( A = g^a \mod p ),并将其发送给服务器。
- 服务器 B 计算公钥 ( B = g^b \mod p ),并将其发送给客户端。
- 生成共享密钥:
- 客户端 A 使用服务器的公钥 ( B ) 计算共享密钥: [ K = B^a \mod p = (g^b)^a \mod p ]
- 服务器 B 使用客户端的公钥 ( A ) 计算共享密钥: [ K = A^b \mod p = (g^a)^b \mod p ]
- 由于 ( (g^b)^a \equiv (g^a)^b \mod p ),因此双方计算的共享密钥 ( K ) 是相同的。
安全性
DH 算法的安全性依赖于离散对数问题的难解性。即使攻击者知道公共参数 ( p )、( g ),以及双方交换的公钥 ( A ) 和 ( B ),计算出私钥 ( a ) 或 ( b ) 依然非常困难。
优点
- 安全性高:即使通信内容被第三方截获,攻击者也无法轻易计算出密钥。
- 密钥共享:双方可以在不直接传递对称密钥的情况下生成共享的加密密钥。
变种:Ephemeral Diffie-Hellman (DHE) 和 Elliptic Curve Diffie-Hellman (ECDHE)
- DHE:使用临时密钥进行每次会话的密钥交换,提供前向安全性。
- ECDHE:基于椭圆曲线的 Diffie-Hellman 算法,相比传统的 DH 提供相同的安全性但计算更高效。
应用场景
Diffie-Hellman 算法广泛应用于需要安全密钥交换的场景中,特别是在 HTTPS、VPN、SSH 等加密通信协议中,用于确保通信双方可以安全地生成会话密钥,而无需担心密钥被窃取。
https流程
1
2
3
4
5
6
7
8
9
10
11
1. ClientHello ---> 客户端发起握手,发送加密参数。
2. ServerHello <--- 服务器响应握手,选择加密参数。
3. Server Certificate <--- 服务器发送证书。
4. ServerKeyExchange <--- (可选)服务器发送密钥交换参数。
5. CertificateRequest <--- (可选)服务器请求客户端证书。
6. ServerHelloDone <--- 服务器告知客户端其握手消息结束。
7. Client Certificate ---> (可选)客户端发送自己的证书。
8. ClientKeyExchange ---> 客户端发送密钥交换参数。
9. Finished ---> 客户端发送加密的 Finished 消息。
10. Finished <--- 服务器发送加密的 Finished 消息。
11. **加密通信开始** ---> 双方使用会话密钥加密通信。