Hmac

為什麼要避免像下面這樣的自定義 HMAC 實現?

  • March 9, 2017

H (o_pad || H (i_pad || m, static_salt), static_salt)

其中使用的 Hash 算法是 SHA512-crypt:https ://www.akkadia.org/drepper/SHA-crypt.txt

如果攻擊者知道 o_pad、i_pad、static_salt 和最終 HASH 但不知道消息怎麼辦……使用此自定義實現有可能獲取消息(而不是僅僅暴力破解)?

你需要清楚你想要達到的介面安全目標,而不是 HMAC 的目標。您的問題的這段話似乎說明了您的安全目標:

如果攻擊者知道 o_pad、i_pad、static_salt 和最終 HASH 但不知道消息怎麼辦……使用此自定義實現有可能獲取消息(而不是僅僅暴力破解)?

但這既不是 HMAC 的介面也不是安全目標:

  • 介面: MAC 是密鑰功能;他們將密鑰消息作為參數,其中消息可能是秘密的,也可能不是秘密的。您正在描述一些需要消息但沒有密鑰的東西;不是同一個界面!
  • 安全目標: MAC 期望密鑰是一個秘密隨機值,並允許(但不要求)消息是非秘密的;目標是防止偽造消息/標籤對。另一方面,在您的構造中,您假設消息是秘密的,並且知道所有其他值(o_pad、i_pad、static_salt 和雜湊結果)的攻擊者不得恢復消息。

所以你要求我們做一個蘋果和橘​​子的比較。此外,您心目中的目標——無法為看到所有其他值的攻擊者恢復消息——已經是 SHA512-crypt 的目標。

我希望這不是太苛刻,但是您所做的基本上是在 SHA512-crypt 之上添加一些額外的複雜性,這對進一步實現您為其設定的目標沒有任何作用,並且表面上類似於 HMAC。

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