Hash

為什麼在散列之前將消息附加到密鑰不能保證完整性?

  • November 16, 2016

我要保證消息的完整性 $ m $ . 我的第一個想法是將消息附加到完整性密鑰 $ k $ 並將其雜湊為 $ H(k,||,m) $ . 但是,有人告訴我這並不完全安全,因為攻擊者可以在末尾添加更多數據 $ m $ 同時仍然生成正確的 MAC。

攻擊者如何修改 $ H(k,||,m) $ 這樣消息已更改但MAC相同?

有人建議我改用 HMAC。HMAC為什麼要解決這個問題?

這取決於您使用的散列函式,但某些散列函式的工作方式類似於重複分組密碼(例如 SHA1 和 MD5)。關鍵是(正如您被告知的那樣),攻擊者可以使用散列並繼續附加數據來生成新的有效 MAC。

也就是說,給定 $ H(k||m) $ , 一個有效的 MAC $ k||m $ , 攻擊者可以生成 $ H(k||m||m’) $ , 一個有效的 MAC $ k||m||m’ $ . 這是不受歡迎的行為。我們希望避免攻擊者為任何消息生成有效 MAC 的可能性,即使他們不知道密鑰。這就是它使完整性無效的原因,因為現在攻擊者可以在不知道密鑰的情況下製作有效的消息和 MAC(有限制)。

請參閱長度擴展攻擊。

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