為什麼 HAIFA 和海綿結構不易受到長度擴展攻擊?
我正在寫一篇關於 MD 構造缺陷的文件,這些缺陷促使密碼學家創造出不同的、更強大的構造。但是,我不知道為什麼 HAIFA 和 Sponge 結構不會遭受這種攻擊。
海綿結構
在海綿結構中,塊尺寸 $ b $ 有兩個部分, $ r $ 是費率,是書面部分, $ c $ 容量是輸入/輸出未觸及的部分, $ b= c+r $
輸出取自 $ r $ 在擠壓階段。因此並不是所有的 $ b $ 是輸出。這可以防止長度擴展攻擊,就像在 Keccak 之後標準化的 SHA2 截斷一樣。
**這個想法是:**當有人想擴展消息時 $ abc $ 進入 $ abcde $ 他們應該能夠在剩下的地方繼續雜湊輸出,即雜湊值。 $ h=H(IV,\text{“abc”}) $ 然後使用 $ h $ 作為 IV 的 $ H’ = H(h,\text{“df”}) $ 那麼長度擴展是可能的(這裡我們沒有考慮填充,也不是一個大問題)。最初長度擴展攻擊適用於 MAC $ H(\text{secret}\mathbin|\text{message}) $ 建造。儘管輸出會有所不同,但攻擊者可以在不知道密鑰的情況下將其註入新的 MAC 標籤,並且伺服器會接受它。所以。即使攻擊者無法獲得秘密和消息,它也可以工作。它不適用於 HMAC,它旨在防止這種情況。另一方面,基於SHA3的 KMAC 具有更簡單的設計,因為 SHA3 不受干擾。
海綿結構的兩階段設計,即吸收和擠壓一起 $ c $ 通過可計算的對策防止長度擴展攻擊。
下面是針對 SHA-3 的長度擴展攻擊的能力。
$$ \begin{array}{|c|c|c|c|c|}\hline \operatorname{SHA3}\text{ variant}\ & \text{output size} & \text{internal block size} & \text{rate } r& \text{Capacity against LEA} \ \hline \operatorname{SHA3-224} & 224 & 1600 & 1152 & 448= 1600-1152\ \hline \operatorname{SHA3-256} & 256 & 1600 & 1088 & 512 = 1600-1088 \ \hline \operatorname{SHA3-384} & 384 & 1600 & 832 & 768 =1600-832\ \hline \operatorname{SHA3-512} & 512 & 1600 & 576 & 1024 = 1600-576\ \hline \end{array} $$LEA 代表長度擴展攻擊。
海發建設
HAIFA 結構沒有提到關於長度擴展的對策,但是,它可以簡單地在最後一個塊中使用不同的鹽來設計/修改,就像在 BLAKE2 中一樣 Blake2b是否容易受到長度擴展攻擊?, 喜歡使用 $ true $ 對於最後一個塊並使用 $ false $ 對於任何其他塊。HAIFA 的構造很簡單:
$$ C:{0,1}^{m_c} \times {0,1}^n \times {0,1}^b \times {0,1}^s \to {0,1}^{m_c} $$或者
$$ h_i = C(h_{i-1}, M_i, #bits, salt) $$ $ #bits $ 是散列的位數, $ h_0 = IV $ , 和 $ salt $ 是通常的鹽值。