Diffie-Hellman(DH)密钥交换算法是密码学中第一个实用的公钥协议,由Whitfield Diffie和Martin Hellman于1976年提出。它允许双方在不安全的信道上协商出一个共享密钥,无需预先共享秘密,其安全性依赖于离散对数问题(Discrete Logarithm Problem, DLP)。

核心思想

  • 目标:双方(Alice和Bob)无需预先共享任何秘密,通过公开交换参数生成相同的密钥,用于后续加密通信
  • 数学原理:基于离散对数问题(Discrete Logarithm Problem, DLP)的计算复杂性。已知大质数 p、生成元 g、以及
    A = gamod p,计算私钥 a 是困难的

算法过程

  1. 公共参数选择
  • Alice、Bob双方共享一个大素数q,以及证书a,且aq的原根

原根即 a mod q,a 2 mod q,…… a n-1 mod q 可以得到1 ~ n-1 的所有整数

  1. 密钥生成
  • Alice生成私钥XA:随机选择整数 a(1 < a < p-1),并计算公钥 YA = gXA mod q

  • Bob生成私钥XB:随机选择整数 b(1 < b < p-1),计算公钥 YB = gXB mod q

  1. 交换密钥
  • Alice发送公钥YA给Bob,Bob发送公钥YB 给Alice。
  • Alice收到Bobde公钥YB,Bob收到Alice的公钥YA
  1. 共享密钥计算
  • Alice计算共享密钥 S = (YB)XA mod q
  • Bob计算共享密钥 S = (YA)XB mod q
  1. 双方得到相同的共享密钥S,可用于对称加密(如AES)

实际变种与优化

椭圆曲线DH(ECDH)

  1. 数学基础:将模幂运算替换为椭圆曲线上的标量乘法。
  2. 优势:更短的密钥长度(如256位ECC等效于3072位RSA/DH),适用于资源受限环境。
  3. 加密流程:
    • 双方约定椭圆曲线参数G。
    • 私钥为随机整数 a, b、公钥为椭圆曲线点 aG, bG
    • 共享密钥为 a(bG) = b(aG) = abG

认证DH(如STS协议)

  1. 问题:基础DH易受中间人攻击(MITM)。
  2. 解决方案:引入数字签名或预共享证书,验证双方身份。
  3. 流程
    • Alice和Bob交换公钥和签名
    • 验证签名后计算共享密钥

应用场景

  1. TLS/SSL:用于协商会话密钥(如DHE_RSA或ECDHE_RSA密码套件)。
  2. VPN:IPsec中常用DH或ECDH建立安全隧道。
  3. SSH:密钥交换阶段使用DH生成会话密钥。
  4. 区块链:部分隐私保护方案利用DH实现加密通信

Diffie-Hellman vs RSA

特性 Diffie-Hellman RSA
用途 密钥交换 加密/签名/密钥交换
数学难题 离散对数问题(DLP) 大数分解(IFP)
计算开销 较高(模幂运算) 高(大数运算
密钥长度 2048位(等效RSA 2048位) 2048位(推荐)

Diffie-Hellman通过离散对数难题实现了安全的密钥协商,是互联网安全的基石之一。其变种ECDH进一步提升了效率,而结合认证机制和临时密钥可防御中间人攻击并支持前向保密。尽管面临量子计算的威胁,DH及其衍生协议在可预见的未来仍将是主流密钥交换技术。