Pbkdf-2

重新散列 PBKDF2 散列 - 迭代是否堆疊?

  • October 17, 2017

假設我在數據庫中有一堆 PBKDF2 雜湊。為了簡單起見,假設我使用了 10 次迭代。幾年後,我決定升級到 20 次迭代。我想一次性升級所有雜湊,所以我重新雜湊舊雜湊而不是等待所有使用者登錄。我使用 20 次還是 10 次迭代?

基本上,我要問的是:

  • pbkdf2(20, password) == pbkdf2(20, pbkdf2(10, password))
  • pbkdf2(20, password) == pbkdf2(10, pbkdf2(10, password))

我的意思是在==安全性方面相當。

兩者哪一個是真的?

PBKDF2 由一系列單向函式組成。單向函式依賴於彼此的輸出,並且該輸出在計算上是唯一的。這意味著創建特定結果沒有捷徑可走。

所以是的,你可以這樣連結 PBKDF2 函式。但是,它不會與僅使用二進制兼容,PBKDF2(20, password)因為即使您重複使用相同的鹽,組成 PBKDF2 的步驟的串聯也會有所不同。

重用鹽不會導致問題,因為之前的 PBKDF2 的輸出是隨機的,因此它將與第一階段的任何其他密碼/輸出不同。


筆記:

  • PBKDF2 直接使用迭代次數,即工作因子會線性增加。不幸的是,電腦處理能力沒有,它似乎繼續以比這更快的速度增長。
  • 將某種版本號與 PBKDF-2 散列一起儲存可能是一個好主意,這樣就可以區分不同形式的散列(例如單個 PBKDF2 或所描述的擴展 PBKDF2 使用)。
  • TL;DR,選項 2 是正確的 -的,迭代確實會堆疊。

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