首页/安全/加密与证书速查/DH 参数安全与 Logjam 教训
加密算法基础95 条

DH 参数安全与 Logjam 教训

2015 年公开的 Logjam 研究表明大量服务共用弱 DH 参数可被降级与预计算;修复方向是 2048 位以上参数并使用标准组。

加密与证书速查安全更新于 2026-10-13

DH 参数与 Logjam 教训

Diffie-Hellman 密钥交换的安全性完全取决于所用素数群。2015 年公开的 Logjam 研究表明,大量 HTTPS 与 VPN 服务共用同一批 1024 位素数,攻击者可以预先计算离散对数表,再对单条连接做降级攻击,把强度拉到可破解的档位。修复方向很明确:只启用 2048 位及以上的群,并优先使用 RFC 7919 定义的命名组,不再让服务端自己生成素数。

基本信息

事件Logjam(2015),针对 DHE_EXPORT 与共享弱素数
弱参数1024 位及以下的自定义群
修复一仅启用 2048 位及以上的群,套件中排除 EXPORT
修复二优先使用 RFC 7919 命名组:ffdhe2048 / ffdhe3072 / ffdhe4096
影响范围TLS、SSH、IPsec 与各类 VPN 都可能受同一类问题影响
验证方式套件扫描加实际协商测试,确认最小群强度

典型使用场景

  • 加固 Nginx、Apache 与 OpenSSL 的 DHE 套件和参数配置
  • 排查 VPN(IPsec/IKE)与 SSH 实际协商的密钥交换群强度
  • 内网设备升级评估:老旧固件只支持 1024 位时判断能否替换或隔离
  • 合规审计取证:提交实际协商群与最小强度要求的对照结论

测试服务端是否接受 DHE 及协商组

测试服务端是否接受 DHE 及协商组
# 只看临时密钥与协商组(Windows PowerShell 用 Select-String,Linux 用 grep)
openssl s_client -connect example.com:443 -cipher 'DHE-RSA-AES256-GCM-SHA384' </dev/null | Select-String 'Server Temp Key'
# 列出服务端是否还保留弱套件(EXPORT 级必须消失)
openssl s_client -connect example.com:443 -cipher 'DHE:!EXPORT' </dev/null
# 指定命名组手测:协商成功说明服务端至少支持该强度
openssl s_client -connect example.com:443 -groups ffdhe2048 </dev/null | Select-String 'Server Temp Key'

群强度对照

群或长度安全评估处置建议
ffdhe2048当前可接受下限面向公网的服务至少使用该强度
ffdhe3072中长期安全新部署优先选择
1024 位自定义群可被预计算攻击命中立即停用并换成命名组
512 位或 export 级已被实际破解必须关闭,套件中排除 EXPORT
把 1024 位参数当成兼容必需是常见误判:主流浏览器与 OpenSSL 早已支持 2048 位及以上,保留弱群只会把降级空间留给攻击者。
与 ECDHE 的取舍:ECDHE(如 X25519)握手更短、性能更好,是当前 TLS 的默认选择;但 DH 仍广泛存在于 SSH、IPsec 与部分合规要求中,两套都要会看会改。
命名组的优势在于参数公开固定:服务端不再生成随机素数,既避免弱群,也避免启动时生成大素数造成的抖动。只有确有合规要求时才自建参数,且必须校验为安全素数。

易错点

  • 部分设备固件内置固定 DH 参数,升级 TLS 配置时需同步评估设备兼容性
  • 把私钥与 DH 参数混在一处管理会导致轮换困难,建议分开维护
  • 只排除 EXPORT 套件却不提高群长度,攻击者仍可针对共享的 1024 位群做预计算
  • 自建参数若素数非安全素数,实际强度会低于标称位数,通常得不偿失

数据来源与参考

  • Logjam 研究(Adrian et al., 2015,公开论文)
  • RFC 7919
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌