Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 121

Bleichenbacher 攻击

审核人Cybersecurity entrepreneur & security researcher

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]

示例

  1. 01

    对一台 1990 年代的 Web 服务器,通过不同的填充错误告警恢复 SSL 预主密钥。

  2. 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 攻击 还有哪些其他名称?

常见的别称包括: 百万消息攻击。

相关术语