Hmac

知道了SHA256(m)和k,是否可以計算出HMAC-SHA256(k,m)?

  • October 28, 2016

加密 API 用於計算消息 m 和密鑰 k 的 HMAC-SHA256 簽名,例如 HMAC-SHA256(k,m)。但是,我發現它們中沒有一個(除非我忽略了它)允許從消息的散列和密鑰中計算 MAC。IOW,僅知道 h=H(m) 和 k 的計算 HMAC 的 API 不可用。

例如,Java 提供了 Mac 類,但只允許獲取緩衝區以便計算輸出(HMAC-SHA256)。

這在密碼學上是否有意義,如果是的話,關於如何在 Java 中實現它的任何線索?

不,知道任意消息的 SHA-256 雜湊值和密鑰,就不可能計算該消息和密鑰的 HMAC-SHA-256;這是因為在 HMAC 中,在對消息進行散列之前,將依賴於密鑰的內容放在消息的前面。

另外:如果所要求的內容是可能的,那麼允許發現衝突的 SHA-256 中斷將對 HMAC-SHA-256 造成致命打擊(對於任何密鑰,每個 SHA-256 衝突的消息的 HMAC 都是相同的)。相比之下,我們非常希望 HMAC 結構能夠提供足夠的保護,以確保 HMAC-SHA-256 實際上是安全的。有HMAC-MD5的先例,即使MD5的抗碰撞性被擊敗,它仍然沒有被打破;以及 Mihir Bellare 在NMAC 和 HMAC 的新證明中提出的理論安全論點:沒有碰撞阻力的安全性


獨立地,在同一行:知道超過 64 字節的任意密鑰和消息的 SHA-256 雜湊,可以計算該消息和密鑰的 HMAC-SHA-256;這是因為根據 HMAC 的定義,對於大於消息塊大小(SHA-256 為 64 字節)的密鑰,使用該密鑰進行的第一個操作是用其雜湊替換它。

注意:在此答案中,任意不包括從其雜湊中猜測低熵值。

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