Aes

Java 函式 AES/CBC/PKCS5Padding 是否容易受到 padding oracle 的攻擊?

  • March 2, 2022

我有一個在設備上儲存數據的應用程序。目前AES/CBC/PKCS5Padding來自javax.crypto.Cipher參見參考資料)用於加密儲存的數據。

填充未手動驗證。這是否會使程序容易受到 Padding Oracle 攻擊?

該過程是否會從使用 AES/GCM 中受益?

CBC 模式的問題是填充。當出現填充錯誤時,伺服器必須向您回復一條消息,以便您可以再次發回消息或從頭開始加密消息。

填充預言機攻擊完全基於這個想法。攻擊者更改字節並查看伺服器的響應以執行攻擊。

正如我們所見,攻擊者需要一個預言機來執行填充預言機攻擊。靜態數據或加密數據庫沒有預言機。因此它們不易受到填充預言機攻擊。


CBC 模式沒有像所有基本(古老)分組密碼操作模式那樣的完整性和身份驗證,它通常與 HMAC 一起使用。CBC已從 TLS 1.3中刪除。我們可以在 2019 年的作品中看到一個很好的理由。

他們掃描了前 100 萬個站點並得出結論,使用 MAC-than-Encrypt 的 CBC 很難安全地實施。他們發現了 93 個不同的漏洞。他們的

TLS 1.3 中的 AES-GCM 具有經過身份驗證的加密方案,可提供完整性和身份驗證。內部 GCM 模式使用 CTR 模式進行加密,不需要填充。因此填充 oracle 不適用。

簡而言之,在 GCM 模式下,您將擁有

  1. 正直
  2. 身份驗證,以及
  3. 沒有容易受到填充預言的填充。

由於您將使用 AES/GCM,您的下一個問題將是 IV。您可以使用增量 IV 代替隨機 IV,從而減輕IV 重用災難。有關 IV 建議的更多資訊,請參閱NIST-800-38D的第 8 節

在 Java 中,您可以使用AES/GCM/NoPaddingfrom javax.crypto.Cipherpackage。

引用自:https://crypto.stackexchange.com/questions/72444