跳过内容

MASWE-0023: 风险填充

Beta 版内容

此内容处于 beta 版,仍在积极开发中,因此随时可能发生变化(例如结构、ID、内容、URL 等)。

发送反馈

概述

填充预言攻击是一种侧信道攻击,它允许攻击者在不知道密钥的情况下解密或篡改数据。这些攻击并非由于填充方案本身存在缺陷,而是当应用程序泄露填充错误是否发生(通过错误消息或时间差)时产生,从而创建一个预言机。通过提交修改后的密文并观察应用程序的响应,攻击者可以逐步恢复明文或伪造密文,从而损害机密性和完整性。

以下是风险填充可能成为问题的两种常见密码学场景:

  • 对称加密:在分组密码模式(例如 AES-CBC)中,PKCS#7 填充被广泛使用,且其本身并未被破解(未被 NIST 禁止)。然而,如果系统泄露详细的错误消息或时间差,它将变得容易受到填充预言攻击。为缓解此问题,密码学家通常使用认证加密模式,如 AES-GCM,或将 AES-CBC 与单独的完整性检查(例如,在“加密再认证”(Encrypt-then-MAC)方案中的 HMAC)结合使用。
  • 非对称加密:对于 RSA,PKCS#1 v1.5 已知易受诸如 Bleichenbacher(基于填充预言)之类的攻击。这种较旧的方案目前已被各种标准不鼓励或禁用(例如,请参阅 2016 年 11 月的 RFC 8017 第 7.2 节 或 2019 年 3 月的 NIST SP 800-131A 修订版 2 第 6 节)。

然而,仅仅使用一个易受填充预言攻击的填充方案并不能保证存在漏洞。如上所述,应用程序还必须泄露指示填充错误是否发生的信息(即“预言机”)。如果这两个条件都满足,攻击者就可以利用这些信号来恢复敏感数据或构造恶意密文。

影响

  • 完整性丧失:攻击者可以修改密文,利用填充预言机欺骗系统接受恶意篡改的数据,导致未经授权的数据修改。
  • 机密性丧失:攻击者可以利用填充预言机迭代解密敏感信息,例如密码或会话令牌,从而导致机密数据泄露。

引入方式

  • 对称加密中未认证的填充:在使用 PKCS#7 等填充方案时,如果不对密文进行认证(例如,使用 HMAC),则在 AES-CBC 等模式下可能发生填充预言攻击。
  • 非对称加密中的风险填充:在 RSA 加密中使用 PKCS#1 v1.5 等方案时,如果未对无效密文进行严格统一的处理,则会启用预言攻击。
  • 加密错误暴露:在解密过程中泄露详细的错误消息或时间变化可能会泄露可被攻击者利用的信息。

缓解措施

  • 使用认证对称加密模式:优先使用认证加密模式,如 AES-GCM,它消除了单独填充验证的需要,并整合了完整性检查。如果必须使用 AES-CBC,请采用“加密再认证”(Encrypt-then-MAC)范式(例如,附加 HMAC)。请参阅 NIST SP 800-175B 修订版 1,第 4.3 节
  • 使用安全的非对称加密填充方案:将 PKCS#1 v1.5 等风险方案替换为安全的方案,例如 OAEP(Optimal Asymmetric Encryption Padding,最佳非对称加密填充)。请参阅 NIST SP 800-56B 修订版 2,第 7.2.2 节
  • 不要暴露加密错误:不要向用户暴露加密错误消息,例如填充错误。这可以防止攻击者获取有关填充正确性的线索。