3. 密钥交换协议:Diffie-Hellman 密钥交换原理与中间人攻击

对称加密虽然高效,但面临一个根本性难题:通信双方如何在不安全的信道上安全地共享同一个密钥?如果密钥在传输过程中被窃听,加密便形同虚设。Diffie-Hellman 密钥交换协议(简称 DH)正是为解决这一难题而设计的里程碑式算法,它允许双方在不直接传输密钥的情况下,通过公开信道协商出一个共享秘密。

3.1 核心数学原理

DH 协议的安全性建立在离散对数问题的难解性之上。其核心运算涉及模幂运算与单向函数。

概念 符号 说明
公开参数(全局) p , g p 为大素数,g 为模 p 的原根(生成元)
私钥(秘密) a , b Alice 和 Bob 各自随机选取的整数
公钥(公开) A , B A = g^a mod p , B = g^b mod p
共享密钥 K K = B^a mod p = A^b mod p = g^(ab) mod p

单向性体现在:已知 g、p 和 A,在计算上无法在合理时间内反推出私钥 a。而双方各自计算出的 K 值完全相同,从而实现了密钥协商。

3.2 协议执行流程

以下为标准的 DH 密钥交换步骤,假设 Alice 与 Bob 希望建立安全通信:

  1. 参数协商:双方事先约定好大素数 p 和生成元 g(公开)。
  2. 生成私钥:Alice 随机选择私钥 a,Bob 随机选择私钥 b。
  3. 计算并交换公钥:Alice 计算 A = g^a mod p 并发送给 Bob;Bob 计算 B = g^b mod p 并发送给 Alice。
  4. 计算共享密钥:Alice 使用收到的 B 计算 K = B^a mod p;Bob 使用收到的 A 计算 K = A^b mod p。
  5. 密钥确认:双方得到相同的 K,后续通信使用 K 作为对称密钥。
关键洞察: 在整个过程中,私钥 a 和 b 从未在网络上传输,只有公钥 A 和 B 是公开可见的。即使攻击者截获了所有通信,也无法计算出共享密钥 K。
标准 Diffie-Hellman 密钥交换流程 Alice 私钥 a,公钥 A = g^a mod p Bob 私钥 b,公钥 B = g^b mod p 公开参数:p, g A = g^a mod p B = g^b mod p K = B^a mod p K = A^b mod p 共享密钥 K = g^(ab) mod p 双方得到相同的 K,用于后续对称加密

3.3 中间人攻击(MITM)

标准的 DH 协议虽然能抵抗被动窃听,但无法抵御主动攻击——中间人攻击(Man-in-the-Middle, MITM)。攻击者 Mallory 可以在 Alice 和 Bob 之间拦截并篡改公钥,从而与双方分别建立独立的共享密钥。

3.4 攻击过程详解

Mallory 通过以下步骤瓦解 DH 协议的安全性:

  1. 拦截公钥:Mallory 截获 Alice 发送给 Bob 的公钥 A,以及 Bob 发送给 Alice 的公钥 B。
  2. 伪造公钥:Mallory 生成自己的私钥 m,计算公钥 M = g^m mod p。
  3. 替换并转发:Mallory 将 M 分别发送给 Alice 和 Bob,冒充对方的公钥。
  4. 建立双重密钥:
    • Alice 计算 K1 = M^a mod p(以为是与 Bob 共享)。
    • Bob 计算 K2 = M^b mod p(以为是与 Alice 共享)。
    • Mallory 分别计算 K1 = A^m mod p 和 K2 = B^m mod p。
  5. 透明转发:Mallory 使用 K1 解密 Alice 的消息,读取或篡改后,再用 K2 加密转发给 Bob,反之亦然。双方完全察觉不到中间人的存在。
安全警示: 未经身份认证的 DH 协议对 MITM 攻击毫无防御能力。攻击者不需要破解离散对数,只需要在密钥协商阶段插入自己的公钥即可。这是 DH 协议在实际部署中必须结合数字签名或证书认证的根本原因。
中间人攻击(MITM)下的 DH 密钥交换 Alice 私钥 a,公钥 A Mallory(攻击者) 私钥 m,公钥 M Bob 私钥 b,公钥 B A M(冒充 Bob) B M(冒充 Alice) K1 = M^a mod p K1 = A^m mod p K2 = B^m mod p K2 = M^b mod p 攻击结果:Mallory 拥有两个独立的共享密钥 Alice ↔ Mallory 使用 K1 通信 Mallory ↔ Bob 使用 K2 通信 Alice 和 Bob 完全不知情,所有消息均被 Mallory 窃听或篡改

3.5 防御策略

要抵御中间人攻击,必须在密钥交换过程中引入身份认证机制。以下是主流的防御方案:

方案 核心思想 典型协议
数字签名 使用私钥对公钥进行签名,接收方用公钥证书验证身份 DHE / ECDHE + 证书
预共享密钥(PSK) 双方预先共享一个秘密,用于认证 DH 公钥 TLS-PSK
口令认证密钥交换(PAKE) 使用低熵口令抵抗离线字典攻击,同时完成认证与密钥协商 SRP, OPAQUE
静态 Diffie-Hellman 使用长期固定的 DH 公钥,并通过证书绑定身份 IKE(IPsec)
工程实践: 现代 TLS 1.3 协议使用 (EC)DHE 进行密钥交换,同时通过证书对服务器(及可选客户端)进行身份认证,从根本上杜绝了中间人攻击。在实现端到端加密时,务必在 DH 协商之上叠加签名或 MAC 认证,切勿单独使用裸 DH。

3.6 本章小结

Diffie-Hellman 协议解决了对称密钥分发中的窃听问题,但其自身缺乏身份认证,导致中间人攻击成为最大威胁。理解 DH 的数学原理与攻击模型,是设计安全通信系统的必修课。在实际工程中,DH 必须与数字证书、签名或预共享密钥等认证机制结合,才能构建真正安全的端到端加密通道。