AES-GCM 推薦的 IV 大小:為什麼是 12 字節?
使用 AES-GCM 時,通常建議使用 96 位 IV。我見過的大多數實現也使用 96 位。但是,我不確定此建議或約定的來源。
讓我們假設較短的 IV 是不好的。假設仍然滿足 IV 生成的所有其他約束,使用更長的IV 是否必然會產生負面的安全影響,或者在不增加任何安全優勢的情況下對性能產生嚴重影響?
例如,在 GCM 模式下使用 AES 進行密文和標籤大小和 IV 傳輸的答案特別指出
對於 GCM,強烈建議使用 12 字節 IV,因為其他 IV 長度將需要額外計算。
我對這個聲明非常感興趣,但是我無法找到關於這些“附加操作”或使用更長 IV 時的其他安全隱患的解釋。NIST 對分組密碼操作模式的建議:伽羅瓦/計數器模式 (GCM) 和 GMAC並沒有為我澄清這一點。
那麼每個人都使用 12 字節有什麼具體原因,還是每個人都只是遵循約定?
來自 GCM 的提案(重寫的 if 語句):
如果 $ \operatorname{len}(IV) = 96 $ 然後 $ Y_0 = IV || 0^{31}1 $ 別的 $ Y_0 = \operatorname{GHASH}(H, {}, IV) $ .
所以除了 96 位之外,還有其他 IV 的計算。這就是為什麼最初的提案有這個建議:
可以更有效地處理 96 位 IV 值,因此
$$ ed: this $$對於效率至關重要的情況,建議使用長度。
但在安全部分也解釋了 GCM 的 IV 處理以前沒有考慮到 GHASH:
計數器模式由 Diffie 和 Hellman 於 1979 年提出
$$ 21 $$,並且被 Bellare 等人證明在強烈、具體的意義上是安全的。人。$$ 22 $$. 雖然 GCM 的安全性證明依賴於這些證明,但存在一些差異。雜湊鍵的推導 $ H $ 從分組密碼密鑰 $ K $ , 的散列 $ IV $ ,以及使用該密鑰進行 IV 處理和消息身份驗證是重要的細節。
NIST SP-800 38D 有一整章 - 第 8 章 - 專門討論密鑰和 IV 唯一性以及 GCM 的最大呼叫次數。
如果不能滿足 IV / 密鑰組合的唯一性,則 GCM 的安全性將災難性地失敗。
再說一次,這也適用於任何其他密碼,尤其是那些基於 CTR 模式加密的密碼(包括 GCM,也包括 EAX、CCM 等)。
我的建議是,如果您有小而獨特的 IV 輸入,您可以根據 NIST SP-800-38D: 8.2.1 Deterministic Construction 中的提示將輸入自己擴展為 12 個字節。
如果無法生成唯一且 12 字節或以下的值,那麼您可能需要考慮由 12 字節組成的完全隨機 IV。