# 3DES（三重 DES，Triple DES）是什么？

> 3DES 是把 DES 连续执行三次的分组密码，分组长度只有 64 位，主要因 Sweet32 攻击而在 TLS 中被视为应淘汰的旧算法。

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

3DES 按"加密-解密-加密"的顺序把 DES 执行三次，使用两把或三把密钥，以弥补 DES 只有 56 位密钥的不足。三密钥版本虽有 168 位密钥，但由于中间相遇攻击，实际安全强度只有约 112 位；分组长度仍是 64 位。TLS 中典型的 3DES 套件是 TLS_RSA_WITH_3DES_EDE_CBC_SHA，OpenSSL 名称为 DES-CBC3-SHA。

## 为什么重要
真正的问题在 64 位分组。同一密钥加密约 2^32 个分组（32 GiB）后，CBC 模式下出现分组碰撞的概率就很高，每次碰撞都会泄露两个明文分组的异或值。2016 年的 [Sweet32](https://ssl.sh/zh/glossary/sweet32/) 研究证明，攻击者可借此从使用 3DES 的长连接 HTTPS 会话中还原 Cookie。3DES 速度也远不如 [AES-GCM](https://ssl.sh/zh/glossary/aes-gcm/)，NIST 已不再批准用它加密，[TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/) 中更是没有它。国内不少安全扫描报告里的"SWEET32"漏洞项，指的就是服务器仍开着 3DES 套件。

## 例子
找出并去掉 3DES 套件：

```bash
nmap --script ssl-enum-ciphers -p 443 example.com
```

nmap 脚本发现 64 位分组密码时会给出警告。如果你维护的是显式的 OpenSSL 套件字符串，确认其中没有 DES-CBC3 开头的套件，或在末尾加上 `!3DES`。

## 常见误区
- **3DES 有 168 位安全强度。** 中间相遇攻击把它降到约 112 位，而 Sweet32 的问题与密钥长度完全无关。
- **Sweet32 要先破解密钥。** 它利用的是大量数据后的分组碰撞，攻击者根本不需要密钥。
- **为了兼容必须保留 3DES。** RFC 5246 规定 TLS 1.2 必须实现 TLS_RSA_WITH_AES_128_CBC_SHA，所以凡是支持 TLS 1.2 的客户端都有 AES 可用，不需要 3DES 兜底。

## 相关术语

- [Sweet32](https://ssl.sh/zh/glossary/sweet32/): Sweet32 是 2016 年公布的生日攻击（CVE-2016-2183），针对 3DES 等 64 位分组密码的 CBC 模式，可从超长连接中还原 Cookie 等秘密。
- [密码套件](https://ssl.sh/zh/glossary/cipher-suite/): 密码套件是 TLS 客户端和服务器协商使用的一组命名的加密算法组合，例如 TLS_AES_128_GCM_SHA256，决定连接用什么算法保护数据。
- [AES-GCM](https://ssl.sh/zh/glossary/aes-gcm/): AES-GCM 是以伽罗瓦/计数器模式运行的 AES 分组密码，属于 AEAD 算法，用计数器模式加密、用 GHASH 认证标签保证完整性。
- [RC4](https://ssl.sh/zh/glossary/rc4/): RC4 是 Ron Rivest 在 1987 年设计的流密码，曾在 SSL/TLS 中广泛使用，因密钥流存在统计偏差，2015 年被 RFC 7465 禁止用于 TLS。
- [TLS 1.0](https://ssl.sh/zh/glossary/tls-1-0/): TLS 1.0 是传输层安全协议的第一个版本，1999 年以 RFC 2246 发布，2021 年被 RFC 8996 正式废弃，主流浏览器已不再支持。
- [AEAD](https://ssl.sh/zh/glossary/aead/): AEAD 是带关联数据的认证加密算法，一次运算同时完成数据加密和完整性认证，并能保护不加密的附加数据不被篡改。
