Padding

為什麼只在塊的末尾填充雜湊?

  • August 1, 2019

加密散列函式用一些長度指示符填充輸入消息。這樣做是為了避免攻擊,並允許將 0000 的輸入消息與 00000 區分開來。據我所知,填充/長度包含總是在消息數據之後立即發生,或者正好在塊的末尾。

是否有一些基本的/安全原因不能代替消息的長度?所以它會在第一個區塊的開始處進行。它是否與順序讀取未知長度的文件/數據有關?如果你總是知道要散列的消息的長度會有所不同嗎?

它是否與順序讀取未知長度的文件/數據有關?

確實是的。它是執行線上消息處理要求的一部分,或者換句話說,是在不知道需要多少數據的情況**下流式傳輸數據的能力。

如果你總是知道要散列的消息的長度會有所不同嗎?

嗯,是的,在這種情況下,您可以提前指明消息長度。一些操作模式,例如 CCM,一種用於數據包加密的認證模式,依賴於這種資訊。但是對於散列算法,不需要提前知道消息長度並且仍然是安全的。

沒有什麼能阻止您創建一個協議來預先包含消息長度。如果您在 SHA-1 或 SHA-2 之上建構它,那麼這應該可以防止消息長度攻擊(如果實施正確)。你會以這種方式包含消息長度的兩倍,並且會失去與只期望散列的軟體的兼容性。

SHA-3 已經受到保護,免受長度擴展攻擊。長度擴展攻擊可能不適用於所有算法或情況。長度擴展攻擊主要是鍵控雜湊的問題。HMAC 是一種密鑰散列,專門設計用於防止長度擴展攻擊。

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