GCM模式加密的實際缺點
似乎 GCM 模式加密比 CBC + HMAC 具有明顯的優勢,因為它只需要一個密鑰。但是這裡似乎有一些專家對它不夠信任以推薦它。這個問題是呼籲那些專家明確定義這些問題。
GCM 模式加密是否有任何特性使其在實際操作中的安全性低於使用兩個單獨密鑰的 CBC + HMAC?
例如,答案可以集中在算法的屬性上,這些屬性使其比其他算法更容易受到側通道攻擊。
與 CBC 模式和 HMAC 相比,GCM 模式通常是更好的選擇。但是,我會詳細說明它不一定是的。就像 Richie Frame 一樣,我也不同意 CBC + HMAC 始終是最好的比較目標。我添加了一些其他細節。希望你覺得它們有用。
反對 CBC 和 HMAC
我將首先討論缺點。
GCM (GHASH) 的身份驗證部分比 HMAC 弱,GHASH 提供最大 128 位身份驗證標籤,而 HMAC 允許更長的標籤(HMAC-SHA-256 將允許 256 位身份驗證標籤)。此外,在某些情況下,偽造 GHASH 標籤比 HMAC 更容易:
與任何基於標籤的身份驗證機制一樣,如果攻擊者選擇一個 $ t $ - 隨機位標記,預期對給定數據有機率是正確的 $ 1/2^t $ . 然而,使用 GCM,攻擊者可以選擇增加這種機率的標籤,與密文和 AAD 的總長度成正比。(借自 NIST SP 800-38D。)
使用 GCM 模式的實現通常使用短 IV(96 位),事實上,例如 NIST SP 800-38D 建議使用 96 位 IV。(定義了更長的 IV,但它們需要額外呼叫 GHASH 函式。) 96 位 IV (GCM) 的使用時間太短,而 128 位 IV (CBC) 就足夠了。考慮例如隨機IV的碰撞機率。
GCM 的好處:正確實施的 GCM 幾乎總是更快,並且使用 GCM 比正確操作 AES + HMAC 組合更容易。CBC 模式需要對塊大小進行填充輸入,因此如果輸入不是塊大小的倍數,GCM 模式會產生較小的輸出。
反對 CTR + HMAC
因為 AES 並行化的好處也可以通過 CTR 模式獲得,所以 CTR + HMAC 與 GCM 非常相似,並且可以很好地執行。如果身份驗證標籤要求超出 GCM 可以提供的範圍,它會更好。
反對 CCM
CCM 模式與 GCM 模式非常相似。最大的好處是實現需要更少的程式碼 (SW) 或門 (HW),但 CCM 實現通常比 GCM 慢。
總體而言,由於硬體實現門數的原因,一些 IEEE 802 標準傾向於選擇 CCM 而不是 GCM。
SIV-AES 和 AES-KW
可以使用 AES-GCM(密鑰包裝)包裝其他密鑰。
對於目標是密鑰包裝(用另一個密鑰加密密鑰)的認證加密,SIV-AES 和 AES-KW 算法通常比 AES-GCM 更好。更好的是,它們可以在不依賴隨機數生成(或確定性 IV 生成器)的情況下使用,並且它們的輸出可以更小,因為除了加密輸出和身份驗證標籤之外不需要 IV。(這些通常被認為是確定性認證加密的好處。)
密鑰、IV 對重用
我已經提到過 IV,密鑰對重用。
GCM 模式不抵制 Key IV 組合的重用。為了防止這種情況,像 NIST 這樣的一些團體對 GCM 模式的正確使用提出了比其他模式更多的要求。從安全的角度來看,這是一個好主意,但它可能會減少該模式的允許使用。
一般而言,GCM 最適合作為協議(TLS 或 IPsec)的一部分商定或傳輸新密鑰的用途。如果在需要持久儲存密鑰的地方使用,那麼確保 IV 唯一性可能會很麻煩。
NIST 意識到了這個陷阱。NIST 的 CMVP(加密模組驗證程序,又名 FIPS 140-2 驗證程序)要求謹慎使用 GCM(FIPS 140-2 IG A.5)。FIPS 批准的 GCM 模式實現在使用密鑰時需要非常小心,因為在 GCM 模式重用密鑰中,不允許發生 IV 對。
CBC-ESSIV
AES-CBC 模式可用於磁碟加密(尤其是 ESSIV,請參閱維基百科磁碟加密理論)。GCM 經常使用較小的 IV 長度並且不是 IV 抗碰撞的事實,這使得它很難應用於需要加密大量塊並且加密不會按順序發生的上下文(確定性 IV 增加是可以的) . 出於這個原因,AES-GCM 並不多用於加密儲存數據,而是用於傳輸數據。
概括
GCM 是一種非常好的操作模式,它通常比 CBC + HMAC 等傳統算法組合更方便。但是,它不是一個通用的解決方案(沒有一種模式是),而是僅對傳輸中的大量數據最為方便。