Aes
Java 函式 AES/CBC/PKCS5Padding 是否容易受到 padding oracle 的攻擊?
我有一個在設備上儲存數據的應用程序。目前
AES/CBC/PKCS5Padding
來自javax.crypto.Cipher
(參見參考資料)用於加密儲存的數據。填充未手動驗證。這是否會使程序容易受到 Padding Oracle 攻擊?
該過程是否會從使用 AES/GCM 中受益?
CBC 模式的問題是填充。當出現填充錯誤時,伺服器必須向您回復一條消息,以便您可以再次發回消息或從頭開始加密消息。
填充預言機攻擊完全基於這個想法。攻擊者更改字節並查看伺服器的響應以執行攻擊。
正如我們所見,攻擊者需要一個預言機來執行填充預言機攻擊。靜態數據或加密數據庫沒有預言機。因此它們不易受到填充預言機攻擊。
CBC 模式沒有像所有基本(古老)分組密碼操作模式那樣的完整性和身份驗證,它通常與 HMAC 一起使用。CBC已從 TLS 1.3中刪除。我們可以在 2019 年的作品中看到一個很好的理由。
- Merget 等人的 TLS 填充 Oracle 漏洞的可擴展掃描和自動分類。人。
他們掃描了前 100 萬個站點並得出結論,使用 MAC-than-Encrypt 的 CBC 很難安全地實施。他們發現了 93 個不同的漏洞。他們的
TLS 1.3 中的 AES-GCM 具有經過身份驗證的加密方案,可提供完整性和身份驗證。內部 GCM 模式使用 CTR 模式進行加密,不需要填充。因此填充 oracle 不適用。
簡而言之,在 GCM 模式下,您將擁有
- 正直
- 身份驗證,以及
- 沒有容易受到填充預言的填充。
由於您將使用 AES/GCM,您的下一個問題將是 IV。您可以使用增量 IV 代替隨機 IV,從而減輕IV 重用災難。有關 IV 建議的更多資訊,請參閱NIST-800-38D的第 8 節
在 Java 中,您可以使用
AES/GCM/NoPadding
fromjavax.crypto.Cipher
package。