Mac

HMAC 與 MAC 函式

  • March 14, 2018

我已經閱讀了MACHMAC的定義,但不能說我已經完全掌握了它們的區別。

  • 什麼是原則差異?
  • 何時使用一種,何時使用另一種?(典型案例)

正如 Chris Smith 在評論中指出的那樣,HMAC一種特定的 MAC 算法(或者,更確切地說,一種從加密雜湊函式構造 MAC 算法的方法)。因此,HMAC 可用於任何需要 MAC 算法的應用。

特別需要 HMAC 而不僅僅是通用 MAC 算法的一個可能原因是,HMAC 結構實際上提供了(只要底層散列函式滿足適當的假設)比 MAC 所需的更強大的安全屬性。例如,安全 MAC 算法(在選擇明文攻擊下抵抗存在偽造)的定義中沒有任何內容表明 MAC 輸出不能向攻擊者透露有關明文的資訊。如果明文是秘密的,但 MAC 是公開的,那顯然很糟糕。然而,只要底層散列函式是安全的,HMAC 就保證不會洩露任何有關明文的資訊。

特別是,Bellare已經證明,只要底層雜湊的壓縮函式也是 PRF, HMAC 就是偽隨機函式(PRF),並且只要壓縮底層雜湊函式也是一個PP-MAC。與普通 MAC 相比,這兩者都具有嚴格的安全屬性;特別是,作為 PRF 是一個非常強大的安全屬性——它本質上是說攻擊者沒有實際的方法可以根據輸入對函式的輸出發表*任何意見,*反之亦然,除了相同的輸入總是產生相同的輸出這一顯而易見的事實。PRF 可以做很多案例,而普通 MAC 可能不行。使用安全散列函式實例化的 HMAC 可用於這些。

此外,正如 Chris 所指出的,其他一些 MAC 算法需要隨機 IV 才能保證安全。HMAC 沒有,因此即使在需要確定性輸出或消息必須盡可能短的情況下也可以使用它。

至於為什麼您可能不想使用 HMAC,原因之一是它並沒有真正針對速度進行優化。專用的 MAC 函式,尤其是那些基於通用散列(Carter-Wegman 構造)的函式,如 UMAC 和 VMAC,可以明顯更快。此外,基於分組密碼(如 CMAC)的 MAC 在有限的平台上非常有用,在這些平台上,有效的分組密碼原語(如 AES)可用但安全散列函式不可用。

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