Hmac

hmac sha256 的密鑰縮短

  • December 10, 2016

出於學習目的,我正在嘗試使用 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,與您不同,他們不認為更長的密鑰更安全。

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