Hash

HMAC(m, K) 的安全後果,而不是正確的方式 HMAC(K, m)

  • September 2, 2017

我想知道在這種情況下意外濫用 HMAC API 庫會造成什麼安全損失或後果:

正常、正確的 HMAC

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))

誤用 HMAC(HMAC 的輸入被意外交換):

HMAC(m, K) = H((m ⊕ opad) || H((m ⊕ ipad) || K))

在這種情況下,“m”實際上是一些加密的隨機數據(用於標準的“加密然後 MAC”方案中),從攻擊者的角度來看可以被認為是公開的。密鑰為 256 位。HMAC 是 HMAC-SHA-256。

將輸入交換到 HMAC 是否意味著現在安全性或 MAC 完全中斷或完全喪失?現在有適用的長度擴展攻擊嗎?或者它不是那麼容易被利用,看到數據仍然被外部散列散列在一起?

$ \DeclareMathOperator{\HMAC}{HMAC}\newcommand{\ipad}{\mathrm{ipad}}\newcommand{\opad}{\mathrm{opad}}\newcommand{\xor}{\oplus}\newcommand{\concat}{\mathop{\Vert}} $ 是的。它變得容易受到碰撞 $ H $ , 如果 $ m $ 大於塊大小 $ H $ ,因為在那種情況下 $ \HMAC_m(k) $ 實際上並不是_$$ H\bigl((\opad\xor m)\concat H((\ipad\xor m)\concat k)\bigr). $$ 相反,它是$$ H\bigl((\opad\xor H(m))\concat H((\ipad\xor H(m))\concat k)\bigr). $$ (參見RFC 2104,第 2 節“HMAC 的定義”,第 3 頁。)

單塊消息呢?好吧,攻擊者不太可能找到一對結構化的碰撞 $ (\ipad\xor m_0, \ipad\xor m_1) $ 和 $ (\opad\xor m_0, \opad\xor m_1) $ 在 $ H $ 為了 $ m_0 \ne m_1 $ ,但如果他們可以,如果 $ H $ 是 Merkle-Damgård,正如通常的 HMAC 安全性降低中所假設的那樣(如果它在 BLAKE2 或 SHA-3 系列中,為什麼要打擾 HMAC?),然後 $ (m_0, m_1) $ 會在下面碰撞 $ m \mapsto \HMAC_m(k) $ 對於任何鍵 $ k $ ,使攻擊者能夠立即將其與隨機函式區分開來或偽造在其下經過身份驗證的消息。

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