Key-Derivation
使用 HKDF 派生 2 個密鑰
我有一個使用 256 位主密鑰的加密方案,使用 HKDF 從中派生 2 個單獨的密鑰(一個用於 AES-256-CTR 加密,一個用於 HMAC-SHA256)。但是,我不確定如何在不搞砸的情況下使用 HKDF,所以直接引起我的關注:
- 僅使用 SHA-512 作為散列算法來獲得 512 位輸出並將其拆分為 2 是否安全?
- 我知道使用鹽不是強制性的,但使用它真的可以提高安全性嗎?
- 我知道這可能是一個愚蠢的想法,但仍然……鹽可以作為用於加密的 IV 嗎?
- 是的。您可以使用
HKDF-expand
兩次不同的info
值,或者一次使用更長的輸出長度。- 依靠。如果您的 256 位主密鑰是使用安全的 RNG 生成的,則不需要加鹽。OTOH,如果它來自熵較小的東西,例如密碼,那麼即使主密鑰恰好與兩個使用者或會話匹配,擁有唯一的鹽也可以確保派生密鑰的唯一性。
- 可能不是一個好主意,但它是否安全取決於如何選擇 IV。
HKDF 假設鹽不是攻擊者選擇的。如果攻擊者可以影響 IV,那肯定不行。OTOH,如果已知 IV 完全獨立於密鑰,它應該是安全的,因為 CTR 對 IV 沒有任何要求,除了唯一性。
儘管如此,如果您可以創建另一個隨機數用作鹽,那麼這樣做會更簡單。如果你不能確定鹽不是被攻擊者控制的,最好把它完全排除在外。