為什麼密碼散列和對稱加密使用不同的功能?
關於加密和散列的事情一直困擾著我。
給定一個密碼安全的散列函式 $ H $ ,我可以從任何種子中生成任意長的密鑰 $ s $ 通過遞歸應用 $ H $ 對種子 $ (s, H(s), H(H(s)), …) $ . 然後我可以將結果數組與任何明文進行異或 $ x $ 產生我的密文。
類似地,給定一個加密函式 $ E $ ,我可以生成任何輸入的雜湊 $ x $ 通過簡單地加密每個塊 $ x $ 與自身,然後將結果一起異或。
那麼,為什麼我們要使用不同的函式進行散列和加密(例如,SHA-256 與 AES)?如果其中一個是安全的,它不應該也用於另一個目的嗎?
你是對的:密碼學、散列函式和分組密碼的“主力”或原語可以以它們完成彼此任務的方式使用:散列函式可用於生成密鑰流,就像流密碼或CTR 模式下的分組密碼(參見例如Salsa20)。並且可以將分組密碼轉換為散列函式(例如,Merkle-Damgård 結構中的Davies-Meyer 壓縮函式)。
那麼為什麼要使用不同的功能呢?嗯,雜湊函式不像分組密碼那樣通用,例如,你不能用雜湊函式來做 CBC 模式。並且塊密碼通常不像專門建構的壓縮函式那樣適合散列任務 - 它們往往具有較小的塊和相對較慢的密鑰調度(或當攻擊者可以控制所有輸入時不安全的密鑰調度)。為了效率,設計一個非常強大和快速的分組密碼和一個單獨的非常強大和快速的雜湊函式比設計一個在這兩種能力上都非常強大和快速的單個函式更容易。
PS從您在問題中描述的塊密碼構造的雜湊函式在密碼學上並不安全 - 您只需重新排序消息塊即可找到衝突。
JD 的回答解釋了為什麼除了雜湊函式之外您可能還需要分組密碼。TL;DR:多功能性。
然而,流密碼不是很通用——至少同步流密碼不是。然而它們並沒有被散列函式取代。為什麼?
部分原因是它們已被分組密碼取代(特別是 AES CTR),還因為它們的速度。雜湊旨在快速處理輸入並產生恆定寬度的輸出。他們喜歡長輸入,這讓他們可以攤銷填充和其他成本。加密也需要很長的輸出,並且大多數雜湊函式都不是很快。
類似地,給定一個加密函式 $ E $ ,我可以生成任何輸入的雜湊 $ x $ 通過簡單地加密每個塊 $ x $ 與自身,然後將結果一起異或。
這是不安全的。XOR 允許您更改順序,為超過一個塊的任何內容生成碰撞和第二個原像。
(它也更像是 MAC 而不是雜湊,因為您需要一個密鑰。)