Hmac

使用 SHA384 和 SHA512 的 TLS 密碼套件 HMAC 的 mac_length 和 mac_key_length 的大小是多少?

  • May 10, 2018

我找不到基於 SHA384 和 SHA512 的 hmac 的雜湊輸出大小和 mac_key_size 的明確定義。RFC5246 規定:

在此處輸入圖像描述

但僅定義

在此處輸入圖像描述

這些輸入密鑰/輸出大小是最合適的,因為它確保達到雜湊可以提供的最小安全量。

然而,由於 SHA-256 的最低安全性是 256 位,因此採用最左邊的 128 位或使用較小的密鑰大小並不是一個大問題。

對於 HMAC,沒有預設的密鑰大小,所以官方應該提到它或者可以從協議中計算出來。常見的預設設置是具有與輸出大小相同大小的鍵。

但是,預設輸出大小確實與散列的輸出大小完全相同。因此,除非明確提及,否則這是要使用的 MAC 輸出大小。


讓我們引用參考文獻中列出的相關HMAC RFC

HMAC 的密鑰可以是任意長度(密鑰長於 $ B $ 字節首先使用散列 $ H $ )。然而,小於 $ L $ 強烈建議不要使用 bytes ,因為它會降低函式的安全強度。密鑰長於 $ L $ 字節是可以接受的,但額外的長度不會顯著增加功能強度。(如果密鑰的隨機性被認為很弱,則建議使用更長的密鑰。)

對於輸出大小:

HMAC 的應用程序可以選擇通過為某個參數 t 輸出 HMAC 計算的最左邊的 t 位來截斷 HMAC 的輸出(即,計算以上面第 2 節中定義的正常方式進行,但最終結果被截斷為 t位)。我們建議輸出長度 t 不小於雜湊輸出長度的一半(以匹配生日攻擊界限)並且不小於 80 位(攻擊者需要預測的位數的合適下限) )。

我們建議表示使用散列函式的 HMAC 的實現 $ H $ 和 $ t $ 位輸出為 HMAC-Ht。例如,HMAC-SHA1-80 表示使用 SHA-1 函式計算的 HMAC,並將輸出截斷為 80 位。(如果參數 $ t $ 未指定,例如 HMAC-MD5,則假定輸出散列的所有位。)

我不會詳述在 RFC中提出*建議。*這應該只是將其命名為 HMAC-‘H’-’t’ 的要求,而不是提議。如果人們想忽略 RFC,那取決於他們。


似乎 RFC 未能清楚地傳達mac_length表格的 HMAC 輸出大小(以位為單位)。HMAC 是 MAC 的一種,所以輸出大小已經指定。密鑰大小位於最右邊的列中,稱為mac_key_size。因此,對於 TLS 協議,密鑰大小和輸出大小配置參數已明確定義 - 無需依賴預設值。

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