使用 GCM 時不將 1 連接到 IV 的安全隱患
使用 GCM 時,填充字元串 $ 0^{31}||1 $ 附在 IV 之後。我知道這樣做是為了避免重複 $ E_K(0^n) $ 它用作 GHash 的密鑰。但是,如果 IV 可以是什麼安全隱患? $ 0^n $ ,那麼具體的攻擊可能是什麼?
如果計數器模式開始於 $ \text{Nonce}\mathbin|0^{32} $ 而不是在 $ \text{Nonce}\mathbin|0^{31}\mathbin|1 $ 然後可以送出一個加密查詢 $ (0^{96},0^{128}) $ ,即 128 位全零明文以及全零隨機數。密文的第一個塊將被計算為 $ E_K(0^{128})\oplus 0^{128}=E_K(0^{128}) $ 這只是全域 GHash 鍵 $ H $ 和致盲值 $ 0^{96} $ 隨機數。
如果你同時擁有這兩個值,並且後一個值通過類似的策略對每個 nonce 值洩漏,你可以對密文進行任意修改,通過 counter-mode 的同態屬性直接傳播到明文中,並完全重新計算身份驗證標記自己並將其送出給您的解密預言機,它將接受標籤並在 100% 的時間內返回有效解密,這完全打破了所有試圖確保某種形式完整性的安全概念(例如 CCA-security、INT-PTXT、INT -CTXT,AE,…)。
即使你明確禁止 $ 0^{96} $ 作為一個隨機數,您仍然可以獲得可以讓您恢復的致盲值 $ H $ 至少對於單塊消息,因為標籤是 $ ((c_1\cdot H)\oplus (\operatorname{len}(A)\mathbin|\operatorname{len}(C)))\cdot H\oplus E_K(\text{Nonce}|0^{32})=c_1\cdot H^2\oplus (\operatorname{len}(A)\mathbin|\operatorname{len}(C))\cdot H\oplus E_K(\text{Nonce}|0^{32})=\tau $ 它是一個未知域上的二次方程,可以使用標準方程和平方根計算方法求解。