Keys
使用 KDF 作為加密密鑰的原因
假設我已經有一個 256 鍵(32 字元密碼)用於 AES 加密,由一個不錯的 PRNG 生成,由隨機字母數字字元和標點符號(95 個可能的 ascii 字元)組成,是否有任何理由使用 KDF 來轉換它進入另一個相同長度的鍵?派生雜湊在某種程度上更強嗎?
顯然,如果密碼比預期的密鑰長度短,或者如果密碼是可預測的(即,可記憶的),我可以看到 KDF 將如何有用。但鑑於上述情況,我認為 KDF(如 PBKDF2 的 BCrypt)實際上會減少密鑰的字元範圍(bcrypt 中為 64 個字元,PBKDF2 中為 16 個字元),有效地增加了暴力破解的機會攻擊(但不太可能)。有什麼見解嗎?
KDF 的重點是採用低熵輸入並顯著增加蠻力所需的計算能力(以及時間或成本),希望達到與真正隨機值相當的水平。
如果您已經在使用從 CSPRNG 生成的 256 位值,則無需使用 KDF。
事實上,使用 KDF 只會降低密鑰的安全性。如果 256 位輸入的散列函式中存在任何衝突,則可能的 KDF 生成的鍵的數量將少於輸入的數量,並且可能的鍵空間更小。另一方面,它不可能提高安全性,因為如果您使用 KDF 將 256 位密鑰昂貴地轉換為不同的 256 位密鑰,則攻擊者無需通過 KDF。他們可以首先列舉 256 位密鑰空間。