Pbkdf-2
重新散列 PBKDF2 散列 - 迭代是否堆疊?
假設我在數據庫中有一堆 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 是正確的 -是的,迭代確實會堆疊。