Key-Derivation

根據 Diffie Hellman 協議使用 HKDF 生成密鑰

  • September 19, 2013

為了從 Diffie Hellman 密鑰協商協議生成多個會話密鑰,我嘗試使用 HKDF 生成此會話密鑰。HKDF 算法使用提取-擴展過程。在提取過程中,它將鹽和源密鑰作為輸入(在我的情況下,它將是 Diffie Hellman 生成的密鑰)。我知道鹽是一個隨機的非秘密值。

我的問題是:如何在兩個實體之間建立這個隨機鹽值?我可以通過對我的 Diffie Hellman 鍵應用雜湊函式來設置這個值Salt = HashFunction(DiffieHellmanKey)嗎?

如果您使用 Diffie-Hellman 生成會話密鑰,則不需要鹽(預設為零長度鹽)。但是,您應該info為函式擴展部分中的每個鍵使用不同的(八位字節)字元串。

這個想法是,如果輸入密鑰材料 (IKM) 重複,salt 會確保派生密鑰是不同的。如果在密鑰派生中沒有使用鹽,那麼每次執行密鑰派生函式時會話密鑰都是相同的。然而,Diffie-Hellman 絕不應該生成相同的輸入密鑰材料(見註)。

每個密鑰的資訊字元串應該是靜態的,例如,"enc"加密密鑰的 ASCII 編碼將是一個好主意。

這是指向 HKDF 的 RFC 的連結。 這是 Hugo Krawczyk詳細描述 HKDF 的論文的連結。


注意:DH 密鑰協議中的至少一方應生成足夠隨機的臨時密鑰材料。如果隨機數生成器 (RNG) 被破壞,那麼您可能會得到相同的輸入密鑰材料。但是,如果您的 RNG 損壞,則無法生成隨機鹽。換句話說,無論你做什麼,都需要一個好的 RNG。

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