密文填塞攻擊

使用密文的填充验证信息来进行解密的攻击方法

在加密學中,密文填塞攻擊Padding Oracle attack,字面譯為填充神諭攻擊)是指使用密文的填充驗證資訊來進行解密的攻擊方法。密碼學中,可變長度的明文資訊通常需要經填充後才能相容基礎的密碼原語英語cryptographic primitive。此攻擊方式依賴對密文是否被正確填充的回饋資訊。密文填塞攻擊常常與區塊加密法內的密碼塊連結解密模式有關。非對稱加密演算法,如最佳非對稱加密填充演算法,也可能易受到密文填充攻擊。[1]

對稱加密

在對稱加密中,填充神諭攻擊英語oracle attack可應用在區塊加密法工作模式上,其回饋的「神諭」(通常為伺服器)資訊將返回洩漏密文填充的正確與否。攻擊者可在沒有加密金鑰的情況下,透過此資訊的神諭金鑰解密(或加密)資訊。

對密碼塊連結進行密文填充攻擊

對密碼塊連結進行解密需要先解密所有密文組,再驗證填充,隨後移除PKCS7填充,最後再返回解密後的明文資訊。 若伺服器返回「填充無效」資訊而非「解密失敗」錯誤,則攻擊者可利用伺服器本身進行密文填塞來解密(或加密)資訊。

 

進行密碼塊連結解密的數學公式為

 
 

如上文所述,進行密碼塊連結解密時會將每個明文塊與先前的密文塊進行互斥或比較。 因此,若塊 更改了一個位元組,則塊 中的對應位元組也會被修改。

假設攻擊者擁有密文塊 ,且欲解密第二個密文塊來獲得明文 。 攻擊者可以更改 的最後一個位元組(即 ),並行送 至伺服器。 伺服器隨後將返回最後一個解密塊( )的填充是否正確(是否等於0x01)。 若填充正確,攻擊者則能確定 的最後一個位元組是 ,即 。 若填充不正確,攻擊者則可以將 的最後一個位元組更改為下一個可能的值。 在最不理想的情況下,攻擊者需要進行256次嘗試(即嘗試每個位元組)來尋找 的最後一個位元組。若解密的明文塊內包含填充資訊或用於填充的位元組,攻擊者則還需要進行額外的嘗試來排除不同的可能性。[2]

在確定 的最後一個位元組後,攻擊者可以使用相同的手段來取得 的倒數第二個位元組。 攻擊者可將 的最後一個位元組設定為 ,進而可將 的相應位元組設定為 。 利用上述的相同方式,攻擊者可繼續更改倒數第二個位元組,直到填充正確為止(0x02, 0x02)。

若一個密文塊包含了128位元(或16位元組)的資訊(如AES),攻擊者可在255x16=4080次嘗試中取得到明文的 資訊。這比使用暴力破解所需的 次嘗試要快得多。

使用密文填塞進行攻擊

使用密文填塞的攻擊方法起初由塞爾日·瓦德奈英語Serge Vaudenay於2002年發布。[3]攻擊者隨後利用此方法投入實際,用於應對SSL[4] 和IPSec[5][6]。除此之外,此攻擊方法也用於多個網頁框架上,如JavaServer FacesRuby on Rails[7]ASP.NET[8][9][10]Steam遊戲客戶端。[11]2012年,此方法被證明為應對加固安全裝置的有效方式。[12]

雖然早期的攻擊方法均已被大多數TLS實現修復,但在2013年,網路上出現了名為幸運十三攻擊的新變種,它使用側信道來重新利用軟體中的缺陷。截止2014年上半年,儘管幸運十三攻擊理論上對特定機器依然有效(參見信噪比),但研究學者們認為此方法在現實中已無威脅。截至2015年 (2015-Missing required parameter 1=month!),對解密網際網路加密協定的最活躍攻擊方法為降級攻擊,如Logjam[13]和Export RSA/FREAK[14]攻擊,此類別方法會欺騙客戶端使用舊版安全性相對較低的但相容性較高的加密演算法。另外,一種名為POODLE英語POODLE[15](2014年下半年出現)將降級攻擊(降級至SSL 3.0)與對老版本不安全協定的密文填充攻擊相結合,進而破解傳輸中的資料。2016年5月,研究人員發現OpenSSL在修復幸運十三時引入了另一個填充神諭,此缺陷被標記為CVE-2016-2107。[16][17]

參考文獻

  1. ^ 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). 
  2. ^ Is the padding oracle attack deterministic, [2019-07-08], (原始內容存檔於2019-07-08) 
  3. ^ Serge Vaudenay. Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS... (PDF). EUROCRYPT 2002. 2002 [2019-07-08]. (原始內容存檔 (PDF)於2019-06-05). 
  4. ^ Brice Canvel; Alain Hiltgen; Serge Vaudenay; Martin Vuagnoux, Password Interception in a SSL/TLS Channel (PDF), 2003 [2019-07-08], (原始內容存檔 (PDF)於2019-06-05) .
  5. ^ Jean Paul Degabriele; Kenneth G. Paterson, Attacking the IPsec Standards in Encryption-only Configurations (PDF), 2007 [2019-07-08], (原始內容 (PDF)存檔於2018-12-19) .
  6. ^ Jean Paul Degabriele; Kenneth G. Paterson, On the (In)Security of IPsec in MAC-then-Encrypt Configurations, 2010 [2019-07-08], (原始內容存檔於2018-09-25) .
  7. ^ Juliano Rizzo; Thai Duong. Practical Padding Oracle Attacks (PDF). USENIX WOOT 2010. 2010-05-25 [2019-07-08]. (原始內容存檔 (PDF)於2011-01-03). 
  8. ^ 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). 
  9. ^ Dennis Fisher. 'Padding Oracle' Crypto Attack Affects Millions of ASP.NET Apps. Threat Post. 2010-09-13 [2019-07-08]. (原始內容存檔於2010-10-13). 
  10. ^ Vlad Azarkhin. "Padding Oracle" ASP.NET Vulnerability Explanation. 2010-09-19 [2019-07-08]. (原始內容存檔於2010-10-23). 
  11. ^ Breaking Steam Client Cryptography. Steam Database. [2016-05-01]. (原始內容存檔於2016-04-27). 
  12. ^ 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) 
  13. ^ 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頁面存檔備份,存於網際網路檔案館).
  14. ^ 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.
  15. ^ Matthew Green. Attack of the week: POODLE. 2014-10-14 [2019-07-08]. (原始內容存檔於2015-06-23). ; for further information, see https://www.poodle.io頁面存檔備份,存於網際網路檔案館
  16. ^ OpenSSL Security Advisory [3rd May 2016], 2016-05-03 [2019-07-08], (原始內容存檔於2019-07-16) 
  17. ^ Yet Another Padding Oracle in OpenSSL CBC Ciphersuites, Cloudflare, 2016-05-04 [2019-07-08], (原始內容存檔於2019-07-16)