Hmac
hmac sha256 的密鑰縮短
出於學習目的,我正在嘗試使用 SHA256 實現 HMAC。
在維基百科提出的虛擬碼中,算法首先關注如何縮短或擴展密鑰:
if (length(key) > blocksize) { key = hash(key) // keys longer than blocksize are shortened } if (length(key) < blocksize) { // keys shorter than blocksize are zero-padded (where ∥ is concatenation) key = key ∥ [0x00 * (blocksize - length(key))] // Where * is repetition. }
鑑於我使用的 SHA-256 具有 64 字節的塊大小和 32 字節的輸出:
- 如果密鑰長度大於 64 字節,則縮短為 32 字節
- 如果密鑰長度小於 64 字節,則擴展為 64 字節
從我讀到的 32 個字節應該提供足夠的安全性。但是,65 字節密鑰提供的安全性低於 63 字節密鑰,這不是很奇怪嗎?
來自 HMAC-RFC 2104,第 3 節
(B = 塊大小,L = 雜湊輸出長度):
HMAC 的密鑰可以是任意長度(長於 B 字節的密鑰首先使用 H 進行散列)。但是,強烈建議不要小於 L 字節,因為它會降低函式的安全強度。 超過 L 字節的密鑰是可以接受的,但額外的長度不會顯著增加功能強度。(如果密鑰的隨機性被認為很弱,則建議使用更長的密鑰。)
Tldr,與您不同,他們不認為更長的密鑰更安全。