密文填塞攻击

在加密学中，密文填塞攻击（Padding Oracle attack，字面译为填充神谕攻击）是指使用密文的填充验证信息来进行解密的攻击方法。密码学中，可变长度的明文信息通常需要经填充后才能兼容基础的密码原语（英语：cryptographic primitive）。此攻击方式依赖对密文是否被正确填充的反馈信息。密文填塞攻击常常与分组密码内的密码块链接解密模式有关。非对称加密算法，如最优非对称加密填充算法，也可能易受到密文填充攻击。 在对称加密中，填充神谕攻击（英语：oracle attack）可应用在分组密码工作模式上，其反馈的“神谕”（通常为服务器）信息将返回泄漏密文填充的正确与否。攻击者可在没有加密密钥的情况下，透过此信息的神谕密钥解密（或加密）信息。 对密码块链接进行解密需要先解密所有密文组，再验证填充，随后移除PKCS7填充，最后再返回解密后的明文信息。 若服务器返回“填充无效”信息而非“解密失败”错误，则攻击者可利用服务器本身进行密文填塞来解密（或加密）信息。 进行密码块链接解密的数学公式为 P i = D K ( C i ) ⊕ C i − 1 , {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},} C 0 = I V . {\displaystyle C_{0}=IV.} 如上文所述，进行密码块链接解密时会将每个明文块与先前的密文块进行异或比较。 因此，若块 C 1 {\displaystyle C_{1}} 更改了一个字节，则块 P 2 {\displaystyle P_{2}} 中的对应字节也会被修改。 假设攻击者拥有密文块 C 1 , C 2 {\displaystyle C_{1},C_{2}} ，且欲解密第二个密文块来获得明文 P 2 {\displaystyle P_{2}} 。 攻击者可以更改 C 1 {\displaystyle C_{1}} 的最后一个字节（即 C 1 ′ {\displaystyle C_{1}'} ），并发送 ( I V , C 1 ′ , C 2 ) {\displaystyle (IV,C_{1}',C_{2})} 至服务器。 服务器随后将返回最后一个解密块（ P 2 ′ {\displaystyle P_{2}'} ）的填充是否正确（是否等于0x01）。 若填充正确，攻击者则能确定 D K ( C 2 ) ⊕ C 1 ′ {\displaystyle D_{K}(C_{2})\oplus C_{1}'} 的最后一个字节是 0 x 01 {\displaystyle \mathrm {0x01} } ，即 D K ( C 2 ) = C 1 ′ ⊕ 0 x 01 {\displaystyle D_{K}(C_{2})=C_{1}'\oplus \mathrm {0x01} } 。 若填充不正确，攻击者则可以将 C 1 ′ {\displaystyle C_{1}'} 的最后一个字节更改为下一个可能的值。 在最不理想的情况下，攻击者需要进行256次尝试（即尝试每个字节）来寻找 P 2 {\displaystyle P_{2}} 的最后一个字节。若解密的明文块内包含填充信息或用于填充的字节，攻击者则还需要进行额外的尝试来排除不同的可能性。 在确定 P 2 {\displaystyle P_{2}} 的最后一个字节后，攻击者可以使用相同的手段来获取 P 2 {\displaystyle P_{2}} 的倒数第二个字节。 攻击者可将 C 1 {\displaystyle C_{1}} 的最后一个字节设置为 D K ( C 2 ) ⊕ 0 x 02 {\displaystyle D_{K}(C_{2})\oplus \mathrm {0x02} } ，进而可将 P 2 {\displaystyle P_{2}} 的相应字节设置为 0 x 02 {\displaystyle \mathrm {0x02} } 。 利用上述的相同方式，攻击者可继续更改倒数第二个字节，直到填充正确为止（0x02, 0x02）。 若一个密文块包含了128比特（或16字节）的信息（如AES），攻击者可在255x16=4080次尝试中获取到明文的 P 2 {\displaystyle P_{2}} 信息。这比使用暴力破解所需的 2 128 {\displaystyle 2^{128}} 次尝试要快得多。 使用密文填塞的攻击方法起初由塞尔日·瓦德奈（英语：Serge Vaudenay）于2002年发布。攻击者随后利用此方法投入实际，用于应对SSL 和IPSec。除此之外，此攻击方法也用于多个网页框架上，如JavaServer Faces、Ruby on Rails、ASP.NET和Steam游戏客户端。2012年，此方法被证明为应对加固安全设备的有效方式。 虽然早期的攻击方法均已被大多数TLS实现修复，但在2013年，网络上出现了名为幸运十三攻击的新变种，它使用侧信道来重新利用软件中的缺陷。截止2014年上半年，尽管幸运十三攻击理论上对特定机器依然有效（参见信噪比），但研究学者们认为此方法在现实中已无威胁。截至2015年 (2015-Missing required parameter 1=month!)[update]，对解密互联网加密协议的最活跃攻击方法为降级攻击，如Logjam和Export RSA/FREAK攻击，此类方法会欺骗客户端使用旧版安全性相对较低的但兼容性较高的加密算法。另外，一种名为POODLE（英语：POODLE）（2014年下半年出现）将降级攻击（降级至SSL 3.0）与对老版本不安全协议的密文填充攻击相结合，进而破解传输中的数据。2016年5月，研究人员发现OpenSSL在修复幸运十三时引入了另一个填充神谕，此缺陷被标记为CVE-2016-2107。 Manger, James. A Chosen Ciphertext Attack on RSA Optimal Asymmetric Encryption Padding (OAEP) as Standardized in PKCS #1 v2.0 (PDF). Telstra Research Laboratories. [2019-07-08]. （原始内容 (PDF)存档于2013-01-14）.  Is the padding oracle attack deterministic, [2019-07-08], （原始内容存档于2019-07-08）  Serge Vaudenay. Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS... (PDF). EUROCRYPT 2002. 2002 [2019-07-08]. （原始内容存档 (PDF)于2019-06-05）.  Brice Canvel; Alain Hiltgen; Serge Vaudenay; Martin Vuagnoux, Password Interception in a SSL/TLS Channel (PDF), 2003 [2019-07-08], （原始内容存档 (PDF)于2019-06-05） . Jean Paul Degabriele; Kenneth G. Paterson, Attacking the IPsec Standards in Encryption-only Configurations (PDF), 2007 [2019-07-08], （原始内容 (PDF)存档于2018-12-19） . Jean Paul Degabriele; Kenneth G. Paterson, On the (In)Security of IPsec in MAC-then-Encrypt Configurations, 2010 [2019-07-08], （原始内容存档于2018-09-25） . Juliano Rizzo; Thai Duong. Practical Padding Oracle Attacks (PDF). USENIX WOOT 2010. 2010-05-25 [2019-07-08]. （原始内容存档 (PDF)于2011-01-03）.  Thai Duong; Juliano Rizzo. Cryptography in the Web: The Case of Cryptographic Design Flaws in ASP.NET (PDF). IEEE Symposium on Security and Privacy 2011. 2011 [2019-07-08]. （原始内容存档 (PDF)于2018-11-23）.  Dennis Fisher. 'Padding Oracle' Crypto Attack Affects Millions of ASP.NET Apps. Threat Post. 2010-09-13 [2019-07-08]. （原始内容存档于2010-10-13）.  Vlad Azarkhin. "Padding Oracle" ASP.NET Vulnerability Explanation. 2010-09-19 [2019-07-08]. （原始内容存档于2010-10-23）.  Breaking Steam Client Cryptography. Steam Database. [2016-05-01]. （原始内容存档于2016-04-27）.  Romain Bardou; Riccardo Focardi; Yusuke Kawamoto; Lorenzo Simionato; Graham Steel; Joe-Kai Tsay, Efficient Padding Oracle Attacks on Cryptographic Hardware (PDF), 2012 [2019-07-08], （原始内容存档 (PDF)于2014-08-11）  Matthew Green; Nadia Heninger; Paul Zimmerman; et al, Imperfect Forward Secrecy: How Diffie–Hellman Fails in Practice (PDF), 2015 [2019-07-08], （原始内容 (PDF)存档于2020-02-27） . For further information see https://www.weakdh.org （页面存档备份，存于互联网档案馆）. Matthew Green. Attack of the week: FREAK (or 'factoring the NSA for fun and profit'). 2015-03-03 [2019-07-08]. （原始内容存档于2015-06-23）. ; see https://www.freakattack.com （页面存档备份，存于互联网档案馆） for more information. Matthew Green. Attack of the week: POODLE. 2014-10-14 [2019-07-08]. （原始内容存档于2015-06-23）. ; for further information, see https://www.poodle.io （页面存档备份，存于互联网档案馆） OpenSSL Security Advisory [3rd May 2016], 2016-05-03 [2019-07-08], （原始内容存档于2019-07-16）  Yet Another Padding Oracle in OpenSSL CBC Ciphersuites, Cloudflare, 2016-05-04 [2019-07-08], （原始内容存档于2019-07-16）