术语表

3DES (三重 DES,Triple DES)

最后核实

定义

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

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 研究证明,攻击者可借此从使用 3DES 的长连接 HTTPS 会话中还原 Cookie。3DES 速度也远不如 AES-GCM,NIST 已不再批准用它加密,TLS 1.3 中更是没有它。国内不少安全扫描报告里的"SWEET32"漏洞项,指的就是服务器仍开着 3DES 套件。

例子

找出并去掉 3DES 套件:

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 兜底。

延伸阅读