Hash

有人可以解釋一下MD5散列算法中的“秘密”和“數據”嗎?

  • July 20, 2021

我一直在研究 MD5 散列算法,有些東西我只是還不明白。他們說伺服器持有某種或“秘密”,並將某種“消息”(或“數據”)附加到該秘密。然後,該算法將適當的填充添加到連接的(“秘密”+“數據”)中,並且該過程從那裡繼續。現在,據說只有伺服器知道“秘密”,但攻擊者會知道“數據”以及簽名(這顯然是散列的結果(“秘密+數據”))。現在,這是我沒有得到的:

假設我們有一個 URL:

http://website.com/ABCDEFGHIJKLMNOP?parameter=something

現在,ABCDEFGHIJKLMNOP 部分是這個 URL 的散列部分。將那部分稱為簽名是否正確?如果是這樣,攻擊者應該知道的“數據”到底是什麼?在這個 URL 中,附加到“秘密”的“數據”在哪裡?

另外,為什麼首先將“數據”附加到“秘密”?為什麼“秘密”不只是自己散列並保持對攻擊者的隱藏,而不是給攻擊者一些明顯已知的“數據”?

如前所述,這是關於創建一個 $ \operatorname{MAC}_k(m) = \operatorname{H}(k | m) $ 在哪裡 $ k $ 是密鑰/秘密和 $ m $ 是消息/數據。

現在,ABCDEFGHIJKLMNOP 部分是這個 URL 的散列部分。將那部分稱為簽名是否正確?如果是這樣,攻擊者應該知道的“數據”到底是什麼?

不,“ABCDEFGHIJKLMNOP”是消息數據。攻擊者知道它,因為它在 URL 中清楚地顯示。

另外,為什麼首先將“數據”附加到“秘密”?為什麼“秘密”不只是自己散列並保持對攻擊者的隱藏,而不是給攻擊者一些明顯已知的“數據”?

因為 MAC 是用來驗證消息的。如果您只是散列秘密,那麼您可以證明您擁有密鑰,但數據將不受保護。

在這兩種情況下,您仍然應該提防重放攻擊。但是,這是我想的另一個話題。

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