Passwords

基於 KDF 的密碼管理器

  • September 14, 2017

我想製作一個密碼管理器,它可以從一個主密碼為我的服務生成密碼。為此,我認為 HKDF 適合我的需求,因為它能夠從單個強密鑰生成多個密鑰。在這裡,我讀到如果密鑰“好”而密碼不是,則 HKDF 是安全的。所以我想到了使用 PBKDF2 來生成與 HKDF 一起使用的密鑰。

這個設計好不好?

master_key <- PBKDF2(master_password, ...)
service_key <- HKDF-Extract(master_key, ...)

那麼我將如何處理鹽?它應該是隨機的,因此應該儲存在某個地方。我可以把它存放在任何地方嗎?我可以在兩個階段使用相同的鹽嗎?


編輯:我想我應該澄清一下。

我這樣做的原因是有一種方法可以讓我在任何地方都有我的密碼,而無需在我使用數據庫文件的每一台設備上都有密碼(我已經使用 keepassx 有一段時間了,這令人沮喪,因為你然後需要處理同步等)。這樣,使用者只需要記住主密碼(和鹽?)並使用特定工具執行計算。

您所描述的將起作用一次,使用一種鹽就可以了,只要它與其他人的鹽不同,甚至不需要保密。只需從具有不同 HKDF 資訊參數的同一主密鑰派生每個服務密碼。

但是當一個站點的密碼數據庫被破壞並且沒有被散列,並且您需要為該站點生成一個新密碼時會發生什麼?如果網站對密碼的字元集、長度或結構施加限制會怎樣?

請參閱Tony Arcieri,“確定性密碼管理器中的 4 個致命缺陷”,部落格文章,2016-11-22以進行進一步討論。(標題可能應該是關於無狀態密碼管理器而不是確定性密碼管理器。)

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