Pseudo-Random-Function
PBKDF2 是否揭示了有關鹽的任何知識?
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
當 PBKDF2 用於密鑰派生(而不是密碼散列)時,不知道
Password
什麼Salt
時候給定的對手是否有可能了解任何資訊DK
?編輯
為了澄清這個問題,讓我們修復
c
並dkLen
簡化一下函式:DK = PBKDF2(PRF, Password, Salt)
此功能有 3 個輸入和 1 個輸出。當給定
PRF
,Password
和Salt
時,我們可以DK
精確計算。我的問題其實很簡單:
當給出
PRF
andDK
時,對手是否有可能學到任何東西Salt
?以下是一些可以幫助您更好地理解問題的簡單範例:
- 如果我們定義
function1(PRF, Password, Salt) = Password
,那麼對手顯然不會學到任何東西,Salt
因為它沒有被使用。- 如果我們定義
function2(PRF, Password, Salt) = Salt
,那麼對手顯然會學到一些東西(事實上,一切)Salt
。參數名稱
Salt
可能會令人困惑,因為我們在這裡沒有將它用作鹽。相反,這是我們想要保密的一些資訊。這可能是也可能不是其最初的設計目標。但我只是想知道以這種方式使用 PBKDF2 是否安全。
不,如果鹽是足夠長度的加密隨機數,對手將不會了解鹽的任何資訊。
諸如 PBKDF2 之類的 PBKDF 通常由諸如 HMAC 之類的鍵控單向函式 (PRF) 建構而成。這意味著您無法檢索給定輸出的任何輸入。這確實意味著,如果輸入放在一起時可以被猜測或暴力破解,則可以驗證輸入是否正確。
秘密鹽通常被稱為胡椒,它充當秘密密鑰。辣椒提供的安全性可與相同長度的密鑰相媲美。
辣椒可以與真正的鹽連接以創建新的鹽輸入參數。真正的鹽可以與 PBKDF2 的輸出或密文一起儲存,以避免可以辨識相同的胡椒和密碼組合。