Hmac
SHA256_HMAC 用於使用計數器派生會話密鑰
我需要從 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) $$