Hmac
MD5、SHA1、SHA224|256|384|512 的 HMAC 密鑰大小
我正在嘗試為以下每種散列算法找到 HMAC 密鑰大小的權威來源。專門用於 HMAC 的 TLS 實現。
我在RFC5246中找到了這張表:
MAC Algorithm mac_length mac_key_length -------- ----------- ---------- -------------- NULL N/A 0 0 MD5 HMAC-MD5 16 16 SHA HMAC-SHA1 20 20 SHA256 HMAC-SHA256 32 32
這讓我可以填充這些資訊:
MD5 HMAC uses a 128 bit Key and produces 128 bit digest SHA1 HMAC uses a 160 bit key and produces 160 bit digest SHA224 HMAC uses a ____ bit key and produces a 256 bit digest, truncated to 224 bits SHA256 HMAC uses a 256 bit key and produces a 256 bit digest SHA384 HMAC uses a ____ bit key and produces a 512 bit digest, truncated to 384 bits SHA512 HMAC uses a ____ bit key and produces a 512 bit digest
但我無法找到 SHA224、SHA384 和 SHA512 的確定密鑰大小。
HMAC RFC (2104)列出了這一點:
我們用 B 表示這些塊的字節長度(對於所有上述雜湊函式的範例,B = 64),並用 L 表示雜湊輸出的字節長度(對於 MD5,L = 16,對於 SHA-1,L = 20 )。身份驗證密鑰 K 的長度可以達到 B … K 的最小推薦長度是 L 字節(作為散列輸出長度)。有關鍵的更多資訊,請參見第 3 節。
這意味著密鑰大小必須至少是散列算法的摘要大小,並確認我在上面“填寫”的內容。
我認為,鑑於上述情況,在所有情況下,HMAC 密鑰大小應至少是摘要的長度,這將使 SHA384 HMAC 密鑰大小至少為 384 位,但我似乎無法找到對這一事實的明確確認.
我正在嘗試為以下每種散列算法找到 HMAC 密鑰大小的權威來源
好問題。事實證明,TLS 總是使用與散列函式長度相同的密鑰長度(因此 HMAC-SHA384 將使用 48 字節的密鑰)。
但是,我也找不到任何實際說明這一點的 RFC。RFC5246(承認 HMAC-SHA384 和 HMAC-SHA512 是潛在的 MAC 算法,但沒有定義任何使用它們的密碼套件)和 RFC5289(我能找到的最早的 RFC,它實際上確實將 HMAC-SHA384 的密碼套件定義為 MAC算法)實際解決它。
我懷疑這只是從裂縫中掉下來的東西。RFC5246 僅針對當時實際定義的密碼套件的 MAC 進行了定義;RFC5289 的作者顯然忽略了這個問題。