是否有不能使用 AES-CBC 的區域?如果是這樣,為什麼?
我想知道由於 AES-CBC 的順序加密等任何缺點,不建議使用 AES-CBC 的域或特定應用程序?
CBC 不執行身份驗證
此屬性使其不太適合需要身份驗證的地方,基本上是任何傳輸協議。TLS 使用 CBC,但預設情況下通過純文字而不是密文執行身份驗證,這會引發大量攻擊。在這裡可以使用CBC ,但它容易出錯並且可能需要額外的密鑰來計算 (H)MAC。
即使填充預言(見下文)不可行,CBC 也比其他加密模式更容易出錯。有關詳細資訊,請參閱 Chris J. Mitchell 的論文“錯誤 Oracle 攻擊 CBC 模式”。
CBC 不允許您預先計算密鑰流
預先計算的密鑰流讓您可以將明文與預先計算的流進行異或以提供加密。例如,AES-CTR 可以讓您對協議使用非常低延遲的加密。
CBC 不允許您執行並行加密
由於每個塊都依賴於前一個塊,一直到最後一個塊,因此不可能同時使用多個執行緒執行 AES。這是一個性能瓶頸,可能會在許多需要性能的系統(並且沒有隱式並行性)上使 AES-CBC 失效。
CBC 不允許您跳過字節
由於每個塊都依賴於前一個塊,因此不可能在流中間開始加密(儘管可以解密)。這意味著 CBC 不太適合重新加密文件的某些部分。這也不允許您輕鬆跳過影片或音頻播放中的幀。
CBC 需要填充或密文竊取 (CTS)
填充有很多問題:它需要額外的塊加密並且需要額外的空間。如果 CTS 可用(通常不可用),它至少需要一個塊,儘管如果將 IV 發送到另一端,也可以使用它。無論如何,CBC 可能存在需要發送最少數量的字節或需要最少數量的塊加密的問題。
除此之外,應用了填充的 CBC 可能容易受到填充預言攻擊。如果在建立身份驗證之前執行解密,這些甚至可能出現在受 MAC 保護的應用程序上。這包括所有傳輸協議。
CBC 需要一個攻擊者無法預測的 IV
這可能是沒有快速隨機數生成器可用和/或額外的塊加密(以創建加密的 IV)不可行或不想要的問題。這可能是嵌入式平台上的問題。由於不能直接使用計數器,CBC 不能直接用於 IV 可以從協議中存在的某些標識符派生的地方。使用小於塊大小的 IV 也很棘手。
CBC 密文錯誤不會向前傳播太多,也不會向後傳播
這不是一個要求很多的功能,但是在它存在的地方,CBC 不提供它。相反,必須使用諸如 bi-IGE(雙向 Infinite Garble Extension)之類的模式。
密文中的單個位錯誤可能會影響多達 129 位的明文
另一方面,密文中的單個位錯誤將使完整塊+下一個塊中的位出現亂碼。這意味著CBC不太適合在明文上計算糾錯的地方。CTR 在這種情況下會更合適。
如果您使用密鑰時間過長,CBC 可能會更失敗
如果您使用鑰匙接近 $ 2^{n/2} $ 塊,您預計會發生洩漏塊的數據的碰撞。相比之下,基於 CTR 的模式失敗得更優雅:只要你不重用計數器值,它們只會在那時失去不可區分性。