Hmac

我是否正確理解 HMAC-SHA-xxx 和 HMAC-SHA-xxx-yyy?

  • October 19, 2018

我最近開始研究 HMAC,有幾件事我不能 100% 確定我理解正確。我對這三件事是正確的嗎?

  1. HMAC-SHA-xxx 的輸出長度為 xxx 位
  2. HMAC-SHA-xxx-yyy 的輸出長度為 yyy 位
  3. 如果我有一個生成 HMAC-SHA-xxx 輸出的函式,那麼我可以通過返回 HMAC-SHA-xxx 輸出的第一個 yyy 位來創建一個生成 HMAC-SHA-xxx-yyy 輸出的函式。

如果我誤解了他們中的任何一個,那又如何呢?

  1. HMAC-SHA-xxx 的輸出長度為 xxx 位

沒錯,預設情況下HMAC函式的輸出和hash的輸出是一樣的。如果您考慮 HMAC 的設計,這一點是顯而易見的。

  1. HMAC-SHA-xxx-yyy 的輸出長度為 yyy 位

當然。它已在古老的RFC 2104 - HMAC: Keyed-Hashing for Message Authentication中以這種方式定義,第 5 節:截斷輸出。

沒有多少實現允許您指定輸出大小,因此您可能必須自己截斷。請注意,如果您必須執行截斷,最好在驗證 HMAC 值時執行時間常數比較。

如果雜湊的截斷不可用(例如,SHA-224 已經是 SHA-256 的截斷版本),則可以選擇使用標準化的截斷版本的 SHA-2。它的缺點是雜湊的內部安全性與輸出大小一起降低。

  1. 如果我有一個生成 HMAC-SHA-xxx 輸出的函式,那麼我可以通過返回 HMAC-SHA-xxx 輸出的第一個 yyy 字節來創建一個生成 HMAC-SHA-xxx-yyy 輸出的函式。

是的,你會使用最左邊的位/字節。yyy 將以位為單位,因此您必須除以 8(我只允許 yyy 的倍數為 8)。


請注意,RFC 的作者在第 5 節中談到了“推薦”和“提議”,因此 HMAC-<hash>-yyy 的實現似乎是嚴格可選的。

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