Loading AI tools
使用密文的填充验证信息来进行解密的攻击方法 来自维基百科,自由的百科全书
在加密學中,密文填塞攻擊(Padding Oracle attack,字面譯為填充神諭攻擊)是指使用密文的填充驗證資訊來進行解密的攻擊方法。密碼學中,可變長度的明文資訊通常需要經填充後才能相容基礎的密碼原語。此攻擊方式依賴對密文是否被正確填充的反饋資訊。密文填塞攻擊常常與區塊加密法內的密碼塊連結解密模式有關。非對稱加密演算法,如最佳非對稱加密填充演算法,也可能易受到密文填充攻擊。[1]
在對稱加密中,填充神諭攻擊可應用在區塊加密法工作模式上,其反饋的「神諭」(通常為伺服器)資訊將返回泄漏密文填充的正確與否。攻擊者可在沒有加密金鑰的情況下,透過此資訊的神諭金鑰解密(或加密)資訊。
對密碼塊連結進行解密需要先解密所有密文組,再驗證填充,隨後移除PKCS7填充,最後再返回解密後的明文資訊。 若伺服器返回「填充無效」資訊而非「解密失敗」錯誤,則攻擊者可利用伺服器本身進行密文填塞來解密(或加密)資訊。
進行密碼塊連結解密的數學公式為
如上文所述,進行密碼塊連結解密時會將每個明文塊與先前的密文塊進行異或比較。 因此,若塊更改了一個位元組,則塊中的對應位元組也會被修改。
假設攻擊者擁有密文塊,且欲解密第二個密文塊來獲得明文。 攻擊者可以更改的最後一個位元組(即),並行送至伺服器。 伺服器隨後將返回最後一個解密塊()的填充是否正確(是否等於0x01)。 若填充正確,攻擊者則能確定的最後一個位元組是,即。 若填充不正確,攻擊者則可以將的最後一個位元組更改為下一個可能的值。 在最不理想的情況下,攻擊者需要進行256次嘗試(即嘗試每個位元組)來尋找的最後一個位元組。若解密的明文塊內包含填充資訊或用於填充的位元組,攻擊者則還需要進行額外的嘗試來排除不同的可能性。[2]
在確定的最後一個位元組後,攻擊者可以使用相同的手段來取得的倒數第二個位元組。 攻擊者可將的最後一個位元組設置為,進而可將的相應位元組設置為。 利用上述的相同方式,攻擊者可繼續更改倒數第二個位元組,直到填充正確為止(0x02, 0x02)。
若一個密文塊包含了128位元(或16位元組)的資訊(如AES),攻擊者可在255x16=4080次嘗試中取得到明文的資訊。這比使用暴力破解所需的次嘗試要快得多。
使用密文填塞的攻擊方法起初由塞爾日·瓦德奈於2002年發佈。[3]攻擊者隨後利用此方法投入實際,用於應對SSL[4] 和IPSec[5][6]。除此之外,此攻擊方法也用於多個網頁框架上,如JavaServer Faces、Ruby on Rails[7]、ASP.NET[8][9][10]和Steam遊戲客戶端。[11]2012年,此方法被證明為應對加固安全裝置的有效方式。[12]
雖然早期的攻擊方法均已被大多數TLS實現修復,但在2013年,網絡上出現了名為幸運十三攻擊的新變種,它使用側信道來重新利用軟件中的缺陷。截止2014年上半年,儘管幸運十三攻擊理論上對特定機器依然有效(參見信噪比),但研究學者們認為此方法在現實中已無威脅。截至2015年[update],對解密互聯網加密協定的最活躍攻擊方法為降級攻擊,如Logjam[13]和Export RSA/FREAK[14]攻擊,此類別方法會欺騙客戶端使用舊版安全性相對較低的但相容性較高的加密演算法。另外,一種名為POODLE[15](2014年下半年出現)將降級攻擊(降級至SSL 3.0)與對老版本不安全協定的密文填充攻擊相結合,進而破解傳輸中的數據。2016年5月,研究人員發現OpenSSL在修復幸運十三時引入了另一個填充神諭,此缺陷被標記為CVE-2016-2107。[16][17]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.