Encryption

當使用 CBC-ESSIV 進行磁碟加密時,為什麼 IV 的生成需要一個雜湊然後加密而不是一個雜湊?

  • April 11, 2020

CBC-ESSIV 算法指定如何計算 IV 以用於給定密鑰 (K) 和扇區號 (S),如下所示:

$$ \text{IV} = \operatorname{Enc}(\operatorname{Hash}(K) , S) $$

https://en.wikipedia.org/wiki/Disk_encryption_theory#Cipher-block_chaining_(CBC)

這是為了確保 IV 對攻擊者來說是不可預測的。

我想知道為什麼不簡單地散列密鑰後跟扇區號並消除塊加密所需的額外計算:

$$ \text{IV} = \operatorname{Hash} (K \mathbin| S) $$

這不是同樣安全但更有效嗎?

分組密碼加密$$ \operatorname{Enc}(K,P): {0,1}^k \times {0,1}^n \rightarrow {0,1}^n $$

是一個排列,其中 $ K \in \mathcal{K} $ 從所有可能的排列中選擇一個排列 $ {0,1}^n $ . 使用

$$ \text{IV} = \operatorname{Enc}(\operatorname{Hash}(K) , S) $$將保證輸出是唯一的,而不是重複的,因為 $ \operatorname{Hash}(K) $ 是操作的固定鍵。這也將保證輸出為 128 位,作為 CBC 所需的 IV 大小。

如果你使用

$$ \text{IV} = \operatorname{Hash} (K \mathbin| S) $$然後由於雜湊函式的碰撞屬性 - 生日攻擊 - 某些扇區可能具有相同的不想要的 IV。必須將雜湊函式的輸出修剪為 128 位,因此對於 $ 2^{64} $ 扇區數,我們預計 IV 碰撞的機率為 50%。這種可能性不可忽略,必須提前停止。

對於 3TB 磁碟,有 5,859,375,000 個扇區,大約 33 位。碰撞的機率非常低,比如$$ 1-e^{-\big(\frac{{(2^{33})}^2}{2\cdot 2^{128}} \big)} \approx 1.08\cdot 10^{-19} $$

通過使用生日攻擊的近似公式

$$ p(n;H) \approx 1 - e^{-n(n-1)/(2H)} \approx 1-e^{-n^2/(2H)} $$

但永遠不會為零!

結論:第一種方法保證沒有碰撞,因此第一種方法優於第二種方法。

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