Aes

AEAD 如何保證經過身份驗證的加密而普通 AES 不保證?

  • December 11, 2019

這是對我之前的問題的跟進。與其他模式(如 CBC 或 ECB)中的加密相比,這更多是出於對 AEAD(如 CCM 或 GCM)如何工作的好奇。

假設您有 AES-256-CBC 加密的數據塊,每個數據塊都使用適當的 nonce 加密(無衝突)。與使用 AES-256-GCM 加密的相同數據塊相比,它的安全性和未經身份驗證如何?AEAD 能阻止什麼樣的對手攻擊,這是其他模式無法阻止的?

我知道如果對手用另一個有效的密文替換整個密文塊,這在不支持 AEAD 的模式下不會被檢測到,但會被 AEAD 檢測到。

但是,如果數據使用清晰可見的隨機數編碼(一種常見的實現在密文前面加上隨機數),則可以用先前有效的密文替換整個密文(因為隨機數是已知的)。

我是否正確理解正確的實現要求您儲存所有以前使用的 nonce 並且永遠不要重用它們?

但是,如果數據使用清晰可見的隨機數編碼(一種常見的實現在密文前面加上隨機數),則可以用先前有效的密文替換整個密文(因為隨機數是已知的)。

這被稱為“重放攻擊”,通常在更高級別進行處理。

一種簡單的方法是 TLS 方法;它只是在兩側保留一個記錄計數器,並且計數器(每條記錄遞增)包含在 AAD 中。如果有人要重放記錄,原始加密器的計數器(處於某個原始值)和解密器的計數器(將處於某個更大的值)將不相同,因此完整性檢查將失敗.

另一種方法是 DTLS 和 IPsec 方法;他們不假設可靠的傳輸(一側發送的數據包可能無法到達接收器,或者數據包可能被亂序接收),因此兩側的計數器不一定會同步。因此,要做的就是讓加密器保留一個計數器,該計數器在數據包中顯式發送(並且包含在 AAD 中)。然後,接收者檢查計數器,看看它是否是它以前見過​​的;如果是,則拒絕該數據包。這可以防止重放攻擊;如果攻擊者使用原始計數器值重放數據包,則該數據包將被上述邏輯拒絕;如果它調整計數器,則 GCM 完整性檢查將失敗。

當然,還有其他可能的策略;這些只是在實踐中使用的兩個。

假設您有 AES-256-CBC 加密的數據塊,每個數據塊都使用適當的 nonce 加密(無衝突)。與使用 AES-256-GCM 加密的相同數據塊相比,它的安全性和未經身份驗證如何?

我剛剛向您展示了 GCM 如何防止重放攻擊;還有更高級別的協議需要防範的消息重新排序攻擊。GCM 本身可以保護您免受其他攻擊,這些攻擊會將消息修改為有效加密器未生成的內容。相比之下,CBC 模式沒有;攻擊者可以在不被發現的情況下對 CBC 加密的消息進行大量修改(除非您還包括某種 MAC,任何理智的人都會這樣做)

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