Bleichenbacher 攻击
Bleichenbacher 攻击 是什么?
Bleichenbacher 攻击Daniel Bleichenbacher 在 1998 年提出的自适应选择密文攻击,当服务器泄露 PKCS#1 v1.5 填充是否合法时即可恢复 RSA 明文。
Daniel Bleichenbacher 在 1998 年的 CRYPTO 会议上针对使用 RSA-PKCS#1 v1.5 加密的 SSL 握手发表了这一攻击。服务器无意中充当了填充预言机:任何可区分的响应(TLS 告警码、连接重置或时序差异)都会告诉攻击者一段被篡改的密文是否会解密为以字节 0x00 0x02 开头的值。由于 RSA 具有乘法同态性,攻击者将捕获到的密文乘以选定的值 s,提交结果,并利用每一个"填充合法"的回答来缩小可能明文的集合。经过大约一百万次查询后,区间收敛为单个值,从而恢复出 RSA 加密的预主密钥——全程无需触碰私钥——使攻击者能够解密会话或伪造 RSA 签名。
由于 PKCS#1 v1.5 的去填充难以做到恒定时间实现,这一缺陷很难根除。它以 DROWN(CVE-2016-0800) 的形式卷土重来,利用 SSLv2 预言机攻破现代 TLS 会话;又以 ROBOT(Return Of Bleichenbacher's Oracle Threat,2017) 的形式再现——研究人员 Böck、Somorovsky 和 Young 发现 F5(CVE-2017-6168)、Citrix、Cisco 等厂商仍然存在漏洞,并针对 Facebook 与 PayPal 进行了演示。防御措施:对正确和错误的填充采用完全相同的错误处理,优先使用 RSA-OAEP,禁用 RSA 密钥交换密码套件,并采用将 RSA 加密彻底从握手中移除的 TLS 1.3。
flowchart TD
A[Attacker captures RSA ciphertext c] --> B["Pick multiplier s, send c·s^e mod n"]
B --> C{Server padding check}
C -->|"Starts 0x00 0x02 → valid"| D[Narrow plaintext interval]
C -->|"Invalid → distinct response"| E[Discard this s]
D --> F{Interval = 1 value?}
E --> B
F -->|No| B
F -->|Yes| G[Premaster secret recovered]● 示例
- 01
对一台 1990 年代的 Web 服务器,通过不同的填充错误告警恢复 SSL 预主密钥。
- 02
DROWN 与 ROBOT 都是在现代 TLS 实现中重新利用这一预言机。
● 常见问题
Bleichenbacher 攻击 是什么?
Daniel Bleichenbacher 在 1998 年提出的自适应选择密文攻击,当服务器泄露 PKCS#1 v1.5 填充是否合法时即可恢复 RSA 明文。 它属于网络安全的 攻击与威胁 分类。
Bleichenbacher 攻击 是什么意思?
Daniel Bleichenbacher 在 1998 年提出的自适应选择密文攻击,当服务器泄露 PKCS#1 v1.5 填充是否合法时即可恢复 RSA 明文。
如何防御 Bleichenbacher 攻击?
针对 Bleichenbacher 攻击 的防御通常结合技术控制与运营实践,详见上方完整定义。
Bleichenbacher 攻击 还有哪些其他名称?
常见的别称包括: 百万消息攻击。