密文填塞攻擊

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

在加密學中,密文填塞攻擊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)