# Logjam（CVE-2015-4000）是什么？

> Logjam 是 2015 年公布的攻击（CVE-2015-4000），可把 TLS 降级到 512 位出口级 Diffie-Hellman，并威胁使用过小或被大量共用 DH 参数的服务器。

Source: https://ssl.sh/zh/glossary/logjam/
Last updated: 2026-11-10

Logjam 由一个学术研究团队于 2015 年 5 月在论文《Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice》中公布，包含两部分。其一，服务器若仍支持出口级套件，中间人可以骗客户端接受 512 位的 DHE_EXPORT 参数，因为在 TLS 1.2 及更早版本中，服务器的签名并不覆盖所选的密码套件。其二，破解有限域 Diffie-Hellman 需要针对每个素数做一次大规模预计算，之后单个连接就能很快攻破；由于大量服务器共用少数几个素数，512 位的组已可实际破解，论文还认为 1024 位的组在国家级攻击者的能力范围之内。

## 为什么重要
Logjam 说明 [Diffie-Hellman](https://ssl.sh/zh/glossary/diffie-hellman/) 的安全性取决于组的大小，而被广泛共用的小组是诱人的目标。缓解办法：禁用所有出口级套件；优先使用 [ECDHE](https://ssl.sh/zh/glossary/ecdhe/)；确需有限域 DHE 时，使用不小于 2048 位的 [DH 参数](https://ssl.sh/zh/glossary/dh-parameters/)，例如 RFC 7919 中标准化的 ffdhe 组。浏览器随后也提高了可接受的最小 DH 长度。TLS 1.3 只协商具名组，也没有出口级密码，因此不受影响。扫描报告里的“DH 参数过弱”通常就是指这一类问题。

## 例子
```bash
openssl s_client -connect example.com:443 -servername example.com -tls1_2 -cipher 'EDH' </dev/null 2>/dev/null \
  | grep -i 'Server Temp Key'
# Server Temp Key: DH, 2048 bits   （握手失败、即完全不提供 DHE，也没问题）
```

```nginx
ssl_dhparam /etc/nginx/ffdhe2048.pem;   # 只有启用了 DHE 套件时才起作用
```

## 常见误区
- **每台服务器都必须生成自己独有的 DH 素数。** 使用经过审查、不小于 2048 位的标准组（如 ffdhe2048）即可；危险在于组太小，而不在于足够大的组被共用。
- **只有提供出口级套件的服务器才受 Logjam 影响。** 预计算的风险适用于任何仍在用 1024 位及以下 DH 组的服务器。
- **Logjam 也影响 ECDHE。** 它针对的是有限域 Diffie-Hellman，使用标准曲线的 ECDHE 正是推荐的替代方案。

## 相关术语

- [Diffie-Hellman](https://ssl.sh/zh/glossary/diffie-hellman/): Diffie-Hellman 是 1976 年提出的密钥协商方法，让通信双方在公开信道上各自算出相同的共享秘密，而无需传输这个秘密本身。
- [DH 参数](https://ssl.sh/zh/glossary/dh-parameters/): DH 参数是定义有限域 Diffie-Hellman 群的大素数模数和生成元，TLS 服务器要提供 DHE 密码套件就必须配置它。
- [ECDHE](https://ssl.sh/zh/glossary/ecdhe/): ECDHE 是椭圆曲线上的临时 Diffie-Hellman 密钥交换，TLS 双方每次握手都生成新的椭圆曲线密钥对，并据此协商出共享密钥。
- [FREAK](https://ssl.sh/zh/glossary/freak/): FREAK 是 2015 年公布的攻击，中间人诱使有漏洞的 TLS 客户端接受可被分解的 512 位出口级 RSA 密钥，从而解密和篡改流量。
- [降级攻击](https://ssl.sh/zh/glossary/downgrade-attack/): 降级攻击是指攻击者迫使客户端和服务器协商出比双方实际支持的更旧的协议版本或更弱的算法，从而利用其中的弱点。
- [前向保密](https://ssl.sh/zh/glossary/forward-secrecy/): 前向保密是密钥交换的一种安全属性：即使服务器的长期私钥日后泄露，过去连接的会话密钥也不会因此暴露。
