Passwords

以不同的參數順序使用 PBKDF2 兩次

  • June 25, 2014

我很確定這是一種非常糟糕的方法(理論上),但我的一個客戶正在這樣做,我想知道……以這種方式執行pbkdf-2有多糟糕(迭代 2000 次)?

a = PBKDF2(x, y)
b = PBKDF2(y, x)

x is the username (password in pbkdf2)
y is the password (salt in pbkdf2)
2000 iterations

a然後用於系統中的某些身份驗證,“b”用於加密。

a並且x也被儲存,因此是已知的。

它是否受到某種類型的攻擊,或者它只是一個非常糟糕的加密噩夢,只受到暴力攻擊?

編輯1:

更具體地說:a用作從數據庫中檢索使用者數據的密鑰(因此,將 a 發送到伺服器),返回數據並部分加密。你需要b解密你得到的東西。

編輯2:

假設攻擊者可以訪問儲存這些雜湊的數據庫。他能發動什麼樣的攻擊?

它是否受到某種類型的攻擊,或者它只是一個非常糟糕的加密噩夢,只受到暴力攻擊?

您正在計算 PBKDF2 兩次,這需要兩倍的時間。進行蠻力或字典攻擊的攻擊者只需要計算其中一個來驗證他的猜測。

這意味著您使攻擊變得容易兩倍,如果您只使用一次 PBKDF2 並進行兩次迭代,然後使案例如HKDF來快速導出兩個密鑰。

實際上,如果您在 PBKDF2 中使用 128 位密鑰和 SHA-256,您可以只拆分輸出。

更具體地說:a 用作從數據庫中檢索使用者數據的密鑰(因此,a 被發送到伺服器),數據被返回並部分加密。你需要 b 來解密你得到的東西。

如果 $ a $ 以明文形式發送,竊聽者可以使用它進行暴力破解或字典攻擊,這也會發現 $ b $ . PBKDF2 的 2000 次迭代並不能使密碼免受此類攻擊,儘管它顯然有所幫助。

假設攻擊者可以訪問儲存這些雜湊的數據庫。他能發動什麼樣的攻擊?

蠻力和字典攻擊,可能並不比 if only 更容易 $ b $ 是已知的,但就像我上面寫的那樣,比使用更好的密鑰派生系統容易兩倍。

就像其他答案提到的那樣,如果有人使用他們的使用者名作為密碼,那將立即顯示為 $ a=b $ ,所以不需要搜尋。但是,無論如何,這將是最初的猜測之一,因此可能沒什麼大不了的。

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