在加密学中，**密文填塞攻击**（，字面译为填充神谕攻击）是指使用密文的填充验证信息来进行解密的攻击方法。密码学中，可变长度的明文信息通常需要经填充后才能兼容基础的密码原语（英语：）。此攻击方式依赖对密文是否被正确填充的反馈信息。密文填塞攻击常常与分组密码内的密码块链接解密模式有关。非对称加密算法，如最优非对称加密填充算法，也可能易受到密文填充攻击。

对称加密
----

在对称加密中，填充神谕攻击（英语：）可应用在分组密码工作模式上，其反馈的"神谕"（通常为服务器）信息将返回泄漏密文填充的正确与否。攻击者可在没有加密密钥的情况下，透过此信息的神谕密钥解密（或加密）信息。

### 对密码块链接进行密文填充攻击

对密码块链接进行解密需要先解密所有密文组，再验证填充，随后移除PKCS7填充，最后再返回解密后的明文信息。
若服务器返回"填充无效"信息而非"解密失败"错误，则攻击者可利用服务器本身进行密文填塞来解密（或加密）信息。

进行密码块链接解密的数学公式为

{\displaystyle P\_{i}=D\_{K}(C\_{i})\oplus C\_{i-1},}
{\displaystyle C\_{0}=IV.}
如上文所述，进行密码块链接解密时会将每个明文块与先前的密文块进行异或比较。
因此，若块C\_{1}更改了一个字节，则块P\_2中的对应字节也会被修改。

假设攻击者拥有密文块{\displaystyle C\_{1},C\_{2}}，且欲解密第二个密文块来获得明文P\_2。
攻击者可以更改C\_{1}的最后一个字节（即{\displaystyle C\_{1}'}），并发送{\displaystyle (IV,C\_{1}',C\_{2})}至服务器。
服务器随后将返回最后一个解密块（{\displaystyle P\_{2}'}）的填充是否正确（是否等于0x01）。
若填充正确，攻击者则能确定{\displaystyle D\_{K}(C\_{2})\oplus C\_{1}'}的最后一个字节是{\displaystyle \mathrm {0x01} }，即{\displaystyle D\_{K}(C\_{2})=C\_{1}'\oplus \mathrm {0x01} }。
若填充不正确，攻击者则可以将{\displaystyle C\_{1}'}的最后一个字节更改为下一个可能的值。
在最不理想的情况下，攻击者需要进行256次尝试（即尝试每个字节）来寻找P\_2的最后一个字节。若解密的明文块内包含填充信息或用于填充的字节，攻击者则还需要进行额外的尝试来排除不同的可能性。

在确定P\_2的最后一个字节后，攻击者可以使用相同的手段来获取P\_2的倒数第二个字节。
攻击者可将C\_{1}的最后一个字节设置为{\displaystyle D\_{K}(C\_{2})\oplus \mathrm {0x02} }，进而可将P\_2的相应字节设置为{\displaystyle \mathrm {0x02} }。
利用上述的相同方式，攻击者可继续更改倒数第二个字节，直到填充正确为止（0x02, 0x02）。

若一个密文块包含了128比特（或16字节）的信息（如AES），攻击者可在255x16=4080次尝试中获取到明文的P\_2信息。这比使用暴力破解所需的{\displaystyle 2^{128}}次尝试要快得多。

使用密文填塞进行攻击
----------

使用密文填塞的攻击方法起初由塞尔日·瓦德奈（英语：）于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（英语：）（2014年下半年出现）将降级攻击（降级至SSL 3.0）与对老版本不安全协议的密文填充攻击相结合，进而破解传输中的数据。2016年5月，研究人员发现OpenSSL在修复幸运十三时引入了另一个填充神谕，此缺陷被标记为CVE-2016-2107。

参考文献
----

1. ↑  Manger, James.  (PDF). Telstra Research Laboratories.  [2019-07-08]. （原始内容 (PDF)存档于2013-01-14）.
2. ↑  ,  [2019-07-08], （原始内容存档于2019-07-08）
3. ↑  Serge Vaudenay.  (PDF). EUROCRYPT 2002. 2002  [2019-07-08]. （原始内容存档 (PDF)于2019-06-05）.
4. ↑  Brice Canvel; Alain Hiltgen; Serge Vaudenay; Martin Vuagnoux,  (PDF), 2003  [2019-07-08], （原始内容存档 (PDF)于2019-06-05） .
5. ↑  Jean Paul Degabriele; Kenneth G. Paterson,  (PDF), 2007  [2019-07-08], （原始内容 (PDF)存档于2018-12-19） .
6. ↑  Jean Paul Degabriele; Kenneth G. Paterson, 2010  [2019-07-08], （原始内容存档于2018-09-25） .
7. ↑  Juliano Rizzo; Thai Duong.  (PDF). USENIX WOOT 2010. 2010-05-25  [2019-07-08]. （原始内容存档 (PDF)于2011-01-03）.
8. ↑  Thai Duong; Juliano Rizzo.  (PDF). IEEE Symposium on Security and Privacy 2011. 2011  [2019-07-08]. （原始内容存档 (PDF)于2018-11-23）.
9. ↑  Dennis Fisher.. Threat Post. 2010-09-13  [2019-07-08]. （原始内容存档于2010-10-13）.
10. ↑  Vlad Azarkhin.. 2010-09-19  [2019-07-08]. （原始内容存档于2010-10-23）.
11. ↑ . Steam Database.  [2016-05-01]. （原始内容存档于2016-04-27）.
12. ↑  Romain Bardou; Riccardo Focardi; Yusuke Kawamoto; Lorenzo Simionato; Graham Steel; Joe-Kai Tsay,  (PDF), 2012  [2019-07-08], （原始内容存档 (PDF)于2014-08-11）
13. ↑  Matthew Green; Nadia Heninger; Paul Zimmerman; et al,  (PDF), 2015  [2019-07-08], （原始内容 (PDF)存档于2020-02-27） . For further information see  （页面存档备份，存于）.
14. ↑  Matthew Green.. 2015-03-03  [2019-07-08]. （原始内容存档于2015-06-23）. ; see  （页面存档备份，存于） for more information.
15. ↑  Matthew Green.. 2014-10-14  [2019-07-08]. （原始内容存档于2015-06-23）. ; for further information, see  （页面存档备份，存于）
16. ↑  , 2016-05-03  [2019-07-08], （原始内容存档于2019-07-16）
17. ↑  , Cloudflare, 2016-05-04  [2019-07-08], （原始内容存档于2019-07-16）

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
TLS和SSL |
| --- |
|  |
| 协议和技术 | 
* 传输层安全 / 安全套接层（TLS/SSL）
* 資料包傳輸層安全（DTLS）
* DNS验证颁发机构（CAA）
* 基于DNS的名称实体身份验证（英语：）（DANE）
* 超文本传输安全协议
* HTTP严格传输安全（HSTS）
* HTTP公钥固定（HPKP）
* OCSP装订
* 前向保密
* 服务器名称指示（SNI）
* STARTTLS
* 应用层协议协商（ALPN）

 |
|  |
| 公钥基础设施 | 
* 自动化证书管理环境（英语：）（ACME）
* 数字证书认证机构（CA）
* CA/浏览器论坛
* 证书策略（英语：）
* 证书吊销列表（CRL）
* 域名验证型证书（DV）
* 扩展验证证书（EV）
* 在线证书状态协议（OCSP）
* 组织验证型证书（英语：）（OV）
* 公開金鑰認證
* 公开密钥加密
* 公开密钥指纹
* 公開金鑰基礎建設（PKI）
* 信任鏈
* 根证书
* 自签名证书
* 授權憑證
* 通配符证书
* X.509

 |
|  |
| 另见 | 
* 域名系统安全扩展（DNSSEC）
* IPsec
* Secure Shell（SSH）

 |
|  |
| 历史 | 
* 美國的加密技術出口管制
* Server-Gated Cryptography（英语：）（SGC）

 |
|  |
| 实现 | 
* 充气城堡（英语：）
* Botan（英语：）
* cryptlib（英语：）
* GnuTLS
* JSSE（英语：）
* LibreSSL
* MatrixSSL
* NSS
* OpenSSL
* mbed TLS
* RSA BSAFE（英语：）
* SChannel（英语：）
* SSLeay
* Stunnel
* wolfSSL

 |
|  |
| 公证 | 
* 证书透明度
* Convergence（英语：）
* HTTPS Everywhere / SSL Observatory

 |
|  |
| 漏洞 | 

|  |  |
| --- | --- |
| 理论 | 
* 中间人攻击
* 密文填塞攻击
* 幸运十三攻击

 |
|  |
| 密码本 | 
* 受诫礼攻击（英语：）

 |
|  |
| 协议 | 
* BEAST（英语：）
* BREACH（英语：）
* CRIME
* DROWN（英语：）
* Logjam（英语：）

 |
|  |
| 实现 | 
* 随机数发生器攻击（英语：）
* FREAK漏洞
* goto失败（英语：）
* 心脏出血漏洞
* 贵宾犬漏洞（由于TLS 1.0）

 |

 |

 |