Hmac

SHA256_HMAC 用於使用計數器派生會話密鑰

  • August 10, 2015

我需要從 ECDH 密鑰交換生成的主密鑰生成一些會話密鑰。主密鑰是 256 位,我需要 256 位會話密鑰。

使用帶有計數器的 SHA256_HMAC 作為 HMAC 輸入來獲取會話密鑰是否安全?

skey1 = SHA256_HMAC(master_key, 1);

skey2 = SHA256_HMAC(master_key, 2);

skeyN = SHA256_HMAC(master_key, N);

計數器對於應用程序知道要使用哪個會話密鑰是有意義的。我還查看了散列密鑰派生函式 (HKDF),但當您需要來自給定輸入的長隨機輸出時,它似乎更有用。我的輸出長度與輸入長度相同,我需要能夠根據計數器值生成正確的會話密鑰(可能不是順序呼叫)。計數器本質上是一個 id。

當然,那應該沒問題。它可能比使用普通散列方法和 4 字節計數器的KDF1 和 2更安全。然而,HKDF 當然可以用於此,但似乎您只需要區分,而不是提取和擴展。

是的,沒關係。

但是,您也可以使用HKDF -Expand(將您的計數器作為上下文資訊“資訊”),這樣如果您以後需要一些大於 256 位的會話密鑰,則已經為您定義了擴展。所以,

$$ sk_1 = HMAC(mk, 1 || 0x01)\ sk_2 = HMAC(mk, 2 || 0x01)\ … $$

如果您需要 512 位 $ sk_3 $ 那是:

$$ sk_3 = HMAC(mk, 3 || 0x01)\ ||\ HMAC(mk, HMAC(mk, 3 || 0x01) || 3 || 0x02) $$

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