Hash
HMAC 和 NMAC 中的密鑰
我對這個話題很陌生,並且有幾個關於 HMAC 和 NMAC 的問題:
- 為什麼 NMAC 需要兩個密鑰?如果我們只使用某種初始化向量而不是第一個/第二個密鑰,它怎麼會受到攻擊?
- HMAC中ipad和opad的作用是什麼?
- 如果密鑰長於塊大小怎麼辦?
- 密鑰可以長於雜湊函式的輸入位數嗎?
NMAC 實際上只是通往 HMAC 的“教育工具”,我認為沒有人打算使用它。因為第一個和第二個散列有不同的用途,所以需要這兩個鍵。消息上的第一個散列只需要獲得抗碰撞性,而第二個散列應該提供偽隨機函式類型屬性。因此,實際上只有一個鍵(在第二個雜湊上)就足夠了。但是,包含第一個密鑰作為保守措施,因此即使散列被破壞並且可以找到衝突,這並不意味著 NMAC/HMAC 被破壞,因為攻擊者必須找到使用它的密鑰的衝突不知道。查看 NMAC/HMAC 的最佳方式是“hash and MAC”(類似於“hash and sign”)的特定實現。
HMAC 中 ipad 和 opad 的目的是為第一個和第二個雜湊獲取計算上獨立的密鑰。如果我們假設壓縮函式在以這種特殊方式與 ipad 和 opad 一起使用時就像一個偽隨機生成器,那麼下面就是這樣。(當然,它在隨機預言模型中緊隨其後,但這是多餘的,不需要。)
如果密鑰長於塊大小,則不會發生本質上的壞事,但也沒有任何收穫。
我不確定您所說的密鑰長於雜湊函式的輸入位數是什麼意思。我猜你的意思是壓縮函式(因為雜湊函式實際上是無限的)。如果是,那麼密鑰可以更長,但沒有任何好處,所以你不應該這樣做。