如何實現 GCM 的“線上”功能?
我聽說伽羅瓦計數器模式 (GCM) 是一種“線上”加密算法——無需提前知道輸入的大小。但是 GCM 是否要求在處理要加密的數據之前將所有經過身份驗證但未加密的數據(“adata”)提供給算法?
如果沒有排序要求,一個實現如何將兩個獨立計算的邊組合成一個 GHASH 結果?我的猜測是,如果可能的話,它涉及將 GHASH 結果重新排列為多項式。
通過此處和 Google 的一些搜尋,我無法找到任何關於此的內容。
正如您所懷疑的,可以重新安排 GHASH 計算,以便可以線上獨立地計算 AAD 和加密數據。
您還記得,GHASH 被定義為:
$$ \mathrm{GHASH}( {a_{i-1}, a_{i-2}, …, a_0 }, { p_{j-1}, p_{j-2}, …, p_0 } ) = \ a_{i-1} H^{i+j+1} + a_{i-2} H^{i+j} + … + a_0 H^{j+2} + \p_{j-1} H^{j+1} + p_{j-2} H^{j-1} + … + p_0 H^2 + C H $$ 在哪裡 $ {a_{i-1}, a_{i-2}, …, a_0 } $ 是 AAD,並且 $ { p_{j-1}, p_{j-2}, …, p_0 } $ 是明文,並且 $ C $ 是一個包含 AAD 和明文長度的塊。
我們可以將其重新排列為:
$$ (a_{i-1} H^{i-1} + a_{i-2} H^{i-2} + … + a_0 H^{0}) \cdot H^{j+2} + \(p_{j-1} H^{j-1} + p_{j-2} H^{j-2} + … + p_0 H^0) \cdot H^2 + CH $$ 我們可以線上計算 $ \Sigma a_i H^i $ 和 $ \Sigma p_i H^i $ ,所以你在迭代計算 $ \Sigma p_i H^i $ , 你也計算 $ H^{j+2} $ . 一旦我們收集了這些,計算:
$$ \mathrm{GHASH} = (\Sigma a_i H^i) H^{j+2} + (\Sigma p_i H^i) H^2 + CH $$