Gcm

GCM 操作模式和 IV 大小小於 96 位

  • August 7, 2018

GCM 規範定義了初始計數器值 $ Y_0 $ 用於加密/解密操作如下:

$$ Y_0=\begin{cases} IV||0^{31}1 &\text{if len}(IV)=96\ GHASH(H,{},IV)& \text{otherwise} \end{cases} $$ 我不明白為什麼要散列 $ GHASH $ 是用來 $ len(IV)<96 $ . 假設我使用的是 64 位確定性 IV;創建 128 位確定性初始計數器值似乎是合乎邏輯的

$$ Y_0=IV||0^{63}1 $$ 我相信它與 GCM 規範並不矛盾。為什麼規范建議使用偽隨機初始計數器值?

如果你想使用 64 位確定性 IV,那麼你可以。NIST 規範將此稱為特殊出版物 800-38D 的第 8.2.1 節中列出的“確定性構造”:塊密碼操作模式的建議:伽羅瓦/計數器模式 (GCM) 和 GMAC。

然後,“確定性 IV”被稱為 IV 的“呼叫域”。這為“固定欄位”留下了 32 位,為此指定:

類似地,當只有一個上下文要辨識時,整個固定欄位可能由任意位組成,例如當新密鑰僅限於通信協議的單個會話時。在這種情況下,如果會話中的不同參與者共享一個共同的固定欄位,則協議應確保呼叫欄位對於不同的數據輸入是不同的。

固定欄位和呼叫欄位的長度和位置應在密鑰的生命週期內為每個支持的 IV 長度固定。為了促進 96 位預設 IV 長度的互操作性,本建議書建議但不要求 IV 的前導(即最左邊)32 位保持固定欄位;並且尾隨(即最右邊的)64 位保存呼叫欄位。

因此,只要您確定您的確定性 IV 是唯一的,即是一個隨機數,那麼您可以隨心所欲地使用固定欄位 - 當然,只要加密方和解密方都使用相同的值。因此,您可以簡單地生成一個由全零組成的固定欄位(4 個字節的常量設置為零)組成的 IV,並將隨機數用於剩餘部分。

這樣你就不需要使用 $ \mathit{GHASH} $ 用於計算 $ Y_0 $ 根本上,這更安全且更具互操作性,因為並非所有 GCM 實現都可以允許 96 位以外的 IV 大小。

你當然會最終得到$$ Y_0=0^{32}|nonce|0^{31}1 $$代替$$ Y_0=nonce|0^{63}1 $$為了 $ Y_0 $ 但這並不重要。在結果方案中, $ 0^{32}|nonce $ 將被稱為 IV 和後綴 $ 0^{31}1 $ 由 GCM 實現生成。當然,如果你使用 $ nonce|0^{32} $ 作為 IV,那麼您將得到您的構造 - 正如您所看到的,NIST 允許但不推薦它。

如果你的 IV 小於 96 位,你總是可以簡單地填充直到你有 96 位;只要IV是唯一的,就沒有問題。

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