正確使用 KDF (PBKDF2)
我是加密新手。
我有一個使用者密碼,例如
&&38:while:HAVE:havana:60&&
我想用 AES 加密幾個文件,每個文件有 10 頁。
現在我什麼時候執行我的 salt、KDF 和 init 向量函式?
盡可能多地,例如對於每一頁?(這就是我現在所做的,但它變得太慢了。我將鹽和初始化向量與加密頁面一起儲存。)。
還是在登錄時使用一次 KDF(所以我對所有加密文件使用相同的派生密鑰)和每個頁面的不同鹽和初始化向量?
PBKDF2 故意變慢(並且隨著迭代次數的增加變得更慢更安全,因此您希望盡可能慢)。因此,您通常應該避免執行它的次數超過您絕對需要的次數。
對每個加密文件使用相同的密鑰和不同的 IV 確實是可以的——這就是 IV 存在的目的。大多數加密方案確實限制了您可以使用單個密鑰安全地加密多少數據和/或多少不同的消息,並且您應該檢查您正在使用的方案的文件以確保您沒有超過的風險這些限制。但通常他們是相當慷慨的,如果你限制自己,比如說, $ 2^{32} $ 每個鍵的不同文件,最多 $ 2^{32} $ 每個密碼塊,你可能沒問題。(事實上,您可能需要更多地擔心消息長度限製而不是消息計數限制,具體取決於您使用的加密模式,特別是如果您正在加密的某些文件可能大於 64 GB。)
或者,如果您希望為每個文件使用不同的鍵,您可以通過(至少)兩種方式有效地實現這一點。一種是首先使用 PBKDF2(具有高迭代次數)從密碼中派生單個主密鑰,然後使用更快的 KDF(例如HKDF-Expand )從主密鑰中派生文件密鑰,具有不同的 salt/info 值每個文件。另一種方法是為每個文件生成一個隨機密鑰,使用主密鑰(從使用 PBKDF2 的密碼導出,如第一種方法)加密該密鑰,並將其與加密文件一起儲存。
附言。你的問題對我來說似乎很熟悉,所以我檢查了我以前是否在這裡回答過類似的問題。雖然我沒有找到您的問題的任何確切重複項,但我確實找到了一些您可能會覺得有用的相關問題,例如: