可以安全地儲存密碼以便進行相似性比較嗎?
在Pro Webmasters StackExchange 網站上,有人問了一個關於 web 應用程序(在本例中為cPanel)的問題,該應用程序拒絕允許更改密碼,因為它與以前的密碼過於相似。我建議該應用程序可能正在儲存部分密碼的雜湊值。
我想問一下,假設應用程序正在儲存密碼部分的雜湊值(即完整密碼字元串的子字元串),這樣做是否會比僅儲存單個雜湊值更不安全,但是在輸入問題後,我意識到它肯定會不那麼安全。在最極端的情況下,即在完整密碼字元串中儲存任何字元的“雜湊”,攻擊者可以輕鬆恢復原始密碼。
有沒有辦法安全地儲存密碼,仍然允許進行相似性比較?
按照定義,以允許與散列密碼的部分進行比較的方式儲存密碼比傳統的加密散列更不安全。通常,這根本就不會發生。
另一方面,您可以安全地將新密碼的一部分(您必須擁有純文字)與整個舊雜湊進行比較,而這種比較現在由一些現有軟體完成。
為了解決您的原始觀點,據我所知,cPanel沒有按照您的建議進行操作。它可以選擇儲存某些類型的可可逆加密的密碼以用於摘要式身份驗證,但這不是預設設置。所有其他密碼儲存都是通過底層產品的預設散列機製完成的(無論是 MySQL 的散列、影子文件等)。
討論可能將 cPanel 與 Plesk 混淆了,後者直到最近才將所有密碼以純文字形式儲存在 MySQL 數據庫中。是的,真的。
您建議將密碼拆分為字元,在極端情況下對小塊進行散列處理類似於模糊散列的概念。
然而,這並不能讓攻擊者輕易地重建密碼。Salt and Pepper可以防止字典攻擊。
但是你也可以像往常一樣保存密碼,然後如果使用者輸入她的密碼,你可以計算它的變體,比如編輯距離二,計算雜湊值並進行比較。
實際上,德國電腦網站“heise online”實施(或至少測試過)此方案。如果您拼錯密碼,他們會授予訪問權限,但還不錯。您可以在此處進行測試(德語)。