雜湊如何具有固定長度?
我對密碼學很陌生,如果我的問題如此基本,我深表歉意。
我不明白雜湊如何具有固定長度,因為您可以對雜湊函式進行無限輸入。使用固定長度,您將有有限的雜湊輸出可能性。所以一個雜湊可以有不同的消息和完全相同的輸出?
當我們談到加密雜湊函式時,我們希望它們處理任意長度的輸入和固定的輸出。
$$ \begin{align} H:&{0,1}^*\to {0,1}^\ell\ m&\mapsto H(m) \end{align} $$ 在哪裡 $ \ell $ 是散列函式的大小。
基於Merkle-Damgård 構造的雜湊函式†使用壓縮函式 $ f $ 實現固定大小的輸出;
- 訊息 $ M $ 被填充並分為 $ \ell $ 長度塊 $ M_1,\ldots,M_n $
- $ H_0 $ 設置為初始值;
- 從 $ 1 $ 至 $ n $ $$ H_i = f(H_{i-1},M_i) $$
- 輸出 $ H(M) = H_n $
根據輸入大小的可變輸出大小很難建構,並且對於協議是不可行的。建構具有更大輸出的雜湊函式然後截斷比在SHA-224中更安全(注意:參數與 SHA-256 不同)
通過簡單的組合論證,由於輸入空間遠大於輸出空間,鴿巢原理意味著會有多個輸入值映射到相同的雜湊值。實際上,對於任意大小的輸入,將有許多輸入將散列相同的值。正如雨披的回答所指出的,我們希望雜湊函式具有抗碰撞性;
- 如果找到兩個散列到相同輸出的輸入 $ a $ 和 $ b $ 這樣 $ H(a)= H(b) $ , $ a \neq b $ 是硬然後我們有碰撞阻力。
碰撞阻力被認為是更容易實現的安全目標,Joux 2004。生日悖論有一個通用攻擊,之後 $ 2^{\ell/2} $ 雜湊計算我們預計會與 50% 發生衝突。為了抵抗一般的生日攻擊,必須使用兩倍大小的威脅的雜湊函式。例如,SHA-1 輸出大小為 160 位,帶有 80 位通用生日攻擊,NIST不再推薦它;
SHA-1:聯邦機構應停止使用 SHA-1 來生成數字簽名、生成時間戳和其他需要抗碰撞的應用程序。聯邦機構可以將 SHA-1 用於以下應用:驗證舊的數字簽名和時間戳、生成和驗證基於散列的消息認證程式碼 (HMAC)、密鑰派生函式 (KDF) 和隨機位/數字生成。SP 800-131A 中提供了有關使用 SHA-1 的進一步指導。
2015 年 8 月 5 日
有關散列函式的其他屬性,請參閱散列如何真正確保唯一性?.
† SHA-3 使用Sponge 功能。