Hash

為什麼加密雜湊需要固定長度?

  • November 7, 2015

為什麼加密雜湊需要有固定長度的輸出?

我知道膚淺的答案是,因密鑰大小或文件大小而異的輸出可能會以某種方式洩漏資訊,從而導緻密碼分析,但我想更直覺地了解為什麼會這樣。

在使用 HMAC(如 HMAC-SHA256 或 HMAC-SHA1)的情況下,它仍然是確保輸出具有固定長度的雜湊(SHA256 或 SHA1)嗎?還是 HMAC 算法也會發揮作用?

問:為什麼加密雜湊需要有固定長度的輸出?

我知道膚淺的答案是,因密鑰大小或文件大小而異的輸出可能會以某種方式洩漏資訊,從而導緻密碼分析,但我想更直覺地了解為什麼會這樣。

這取決於你的意思。如果您的意思是它們需要具有一定的配置長度,那麼情況並非如此。SHA-384 基本上是具有不同向量的 SHA-512,您可以將其視為同一散列函式的參數化。

如果您的意思是雜湊的長度取決於輸入,那麼您已經回答了自己的問題。這個想法是雜湊值本身不會洩漏有關輸入的資訊。

或者就像它目前在維基百科中所寫的那樣

理想情況下,人們可能希望有更強大的條件。攻擊者應該不可能找到兩條具有基本相似摘要的消息;或推斷有關數據的任何有用資訊,僅給出其摘要。因此,加密散列函式應該盡可能像隨機函式一樣表現,同時仍然具有確定性和高效可計算性。

當然,如果散列函式的大小取決於輸入的大小,則違反了此屬性。

在這方面,像 HMAC 這樣的鍵控散列應該具有與非鍵控散列相同的屬性。

關於密鑰大小: 密鑰大小不應被視為帶鍵散列函式的參數,因此輸出大小取決於它通常不是問題,只要密鑰大小在使用中一次不波動即可。

關於文件大小:如果您不介意攻擊者可以區分各種輸入大小,那麼沒有什麼可以阻止您使用不同的散列大小,甚至針對特定大小範圍使用不同的散列函式。


問:在使用 HMAC 的情況下,如 HMAC-SHA256 或 HMAC-SHA1,是否仍然是確保輸出具有固定長度的雜湊(SHA256 或 SHA1)?還是 HMAC 算法也會發揮作用?

那麼,HMAC 算法以

return hash(o_key_pad ∥ hash(i_key_pad ∥ message))

所以最終輸出就是雜湊的大小。HMAC 算法當然描述了這種情況。但輸出長度不是 HMAC 的參數。也就是說,可以(但通常不推薦)僅使用 HMAC 的部分輸出作為身份驗證標籤。然而,這超出了 HMAC 本身的定義。

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