SSL 到 TLS:攻击驱动的版本演进
TLS 的发展史是一部攻防迭代史,每一次版本升级几乎都是应对某个被公开的攻击:
SSL 2.0(1995) 是最早公开部署的版本,存在根本性设计缺陷:握手不防降级(攻击者可强制连接退化为弱密码)、使用相同的 MAC 密钥应对加解密方向(缺少密钥方向分离)、无防截断保护。SSL 2.0 于 2011 年被 RFC 6176 正式宣布废弃,2016 年 DROWN 攻击利用了 SSLv2 的 40 位出口弱密码(Export-grade cipher)来攻击仍使用同一 RSA 密钥对的 TLS 服务器,影响约 33% 的 HTTPS 站点。
SSL 3.0(1996) 修复了 SSL 2.0 的多项弱点,但引入了 CBC 块模式填充——这正是 18 年后 POODLE 攻击的祸根。2014 年 10 月 Google 安全团队的 Bodo Möller、Thai Duong 和 Krzysztof Kotowicz 发布 POODLE(Padding Oracle On Downgraded Legacy Encryption),利用 SSL 3.0 的 CBC 填充不验证最后一字节以外的填充字节的设计缺陷,每字节只需 256 次请求即可恢复明文。SSL 3.0 随后被 RFC 7568 正式废弃。
TLS 1.0(1999) 和 TLS 1.1(2006) 是渐进式修补——引入显式初始化向量(IV)防 CBC 攻击、加入 BEAST 对抗填充(但未根治)。2020 年四大浏览器厂商(Chrome/Firefox/Safari/Edge)联合宣布于 2020 年底停止支持 TLS 1.0/1.1。PCI DSS 3.1(2015)已禁止支付卡环境使用 TLS 1.0。2021 年 3 月 IETF 正式废弃 TLS 1.0 和 1.1(RFC 8996)。
TLS 1.2(2008) 服役超过 15 年,引入了 AEAD 加密套件(AES-GCM)、支持 SHA-256 哈希替换 MD5/SHA-1 组合、提供更灵活的密码协商扩展。但 TLS 1.2 仍允许不安全的 RSA 密钥传输(非前向保密)、仍兼容 CBC 模式——正确实现难度大(Lucky13 计时攻击、Lucky Microseconds 等 padding oracle 变体持续涌现)。