Hmac

選擇哪個 MAC?

  • July 5, 2017

我目前正在閱讀 Bruce Schneier 和 Niels Ferguson 的 Cryptography Engineering。有關於 MAC 的這一章,他們推薦 HMAC-SHA-256,但附帶說明將來很可能會推薦 SHA-3。

我想用Google搜尋目前推薦的 MAC,但找不到令人滿意的頁面。如果我搜尋一些東西,包括MAC我只會得到一些電腦頁面(感謝蘋果),如果我輸入它,它只會顯示顯示它們是如何生成的一般頁面或已經有幾年曆史並且可能已經過時的頁面。

我不想知道如何建構 MAC 或者我應該如何使用它們。我的問題是:

  • 目前哪些 MAC 被認為是安全的?
  • 我自己在哪裡可以獲取有關目前推薦的 MAC 的資訊?
  • 是否有一個列表顯示推薦的 MAC 以提高速度或安全性?
  • 您如何讓自己了解最新的 MAC、雜湊、密碼、實現……?

也許第一個問題是基於很多意見和快速過時的,所以請隨意忽略第一個問題。

作為 MAC,HMAC很好,具有任何 SHA-* 功能。即使 MD5 作為散列函式,它也很糟糕。HMAC 的一個有趣特性是它不需要 nonce 或 IV,這使得它更難出錯。它也很容易實現(通過雜湊函式實現),一個簡單的實現甚至是恆定時間的。

現在,HMAC 定義了兩個嵌套的雜湊函式呼叫,以便在底層雜湊函式是Merkle-Damgård設計(如 SHA-1 或 SHA-256)時提供安全的 MAC。SHA-3 的定義是為了使雙重呼叫變得不必要;使用 SHA-3,您可以簡單地對 MAC 密鑰和數據的連接進行雜湊處理,這是一個很好的 MAC,而使用 SHA-256 或 SHA-512 進行相同操作會成為所謂的長度擴展攻擊的犧牲品。但是,您也可以將 HMAC 與 SHA-3 一起使用,它可以工作並且不安全。

對於長輸入數據,HMAC 的性能與原始散列法大致相同,因此速度非常快,並且需要一些努力才能找到這種速度已經不夠用的情況。如果您發現確實需要額外提升的情況,那麼還有其他 MAC 結構可以提供給您,例如Poly1305。然而,它們更難實現,更難正確使用,因為它們需要一個不重複的隨機數,這在許多情況下並不是一個簡單的要求。


話雖如此,MAC 的大多數用法實際上是結合 MAC 和加密的協議的一部分。眾所周知,確保兩者都安全充滿危險(眾所周知,SSL搞錯了),因此建議您使用經過身份驗證的加密模式,該模式將以密碼學家認可的方式完成這項工作。通常的 AEAD 模式包括AES/GCMChaCha20+Poly1305。選擇這種模式可以避免選擇獨立 MAC 的問題。

說到好的建議,Schneier 和 Ferguson 弄錯了(至少在他們的書的第一版中),因為他們建議使用 MAC-then-encrypt(明文上的 MAC,而不是密文上的 MAC),這正是在 TLS 1.2 引入 AEAD 驅動的密碼套件之前,一直困擾著 SSL/TLS。

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