我有一個使用設計來處理身份驗證的rails 3生產應用程序。我想更改爲在應用程序中使用bcrypt而不是sha,但我找不到任何解釋從一個移植到另一個的過程的資源。我假設你將需要有某種回退機制來處理這個事實,即當前的密碼是以某種方式用醃製的方式醃製的...更改設計和rails 3使用bcrypt而不是sha
任何人都是這樣做過的?任何提示,教程,演練等?
我有一個使用設計來處理身份驗證的rails 3生產應用程序。我想更改爲在應用程序中使用bcrypt而不是sha,但我找不到任何解釋從一個移植到另一個的過程的資源。我假設你將需要有某種回退機制來處理這個事實,即當前的密碼是以某種方式用醃製的方式醃製的...更改設計和rails 3使用bcrypt而不是sha
任何人都是這樣做過的?任何提示,教程,演練等?
我不認爲有你想要的解決方案。我只知道有兩個選擇 -
重置所有用戶密碼,並給他們發電子郵件,告訴他們這樣做了(最好是爲什麼這樣他們就不會驚慌)
爲每個用戶登錄,檢查不服老哈希系統,如果它有效,在新列中創建一個新的bcrypt哈希,然後刪除舊的,不太安全的哈希,並以這種方式開始慢速遷移。
創建一個彩虹桌移動到每個人只需要的數學力量是不可能的。
用戶模式:
色器件:可加密
的色器件用戶遷移文件:
t.encryptable
可用於這些設置您?
這裏有一個更好的算法,可以讓你一次切換所有人。你必須弄清楚如何在設計中實現這一點,但這裏是大綱。這不是我的,可以通過網址找到。
http://blog.jgc.org/2012/06/one-way-to-fix-your-rubbish-password.html
假設你有一個包含密碼哈希爲您的網站的n個用戶數據庫,併爲你有鹽Si和哈希喜(其中在計算一些喜每個用戶算法,如SHA1或MD5)。 (請注意,如果沒有鹽,這些說明的其餘部分可以工作,只需忽略它)。
假設您已選擇使用scrypt。對於每個用戶,您首先創建一個新的隨機鹽值s'i,然後使用公式scrypt(s'i,hi)計算新的哈希值h'i,並將新的鹽值和哈希值存儲在數據庫中。你扔掉舊的弱哈希嗨,忘記它曾經存在過。所以你剩下兩個鹽值和一個新的散列。 (我忽略了留給讀者確定的其他scrypt參數)。
當用戶登錄並顯示密碼p時,您可以使用舊的弱哈希算法(假設它是md5(salt,password))計算哈希以進行比較,如下所示:scrypt(s'i,md5 si,p)),並將其與存儲在數據庫中的h'i進行比較。
如果像last.fm一樣,您還允許第三方通過提供舊的哈希值而不是密碼來授權用戶,那麼您仍然可以使用此方案。當第三方爲用戶i呈現散列h時,您計算scrypt(s'i,h)並進行比較。
如果不需要執行第4步,則可以在用戶登錄時進一步進行操作。一旦用戶使用密碼p成功登錄,您可以通過選擇新的隨機鹽值完全消除舊的弱散列的任何跟蹤s'i和計算scrypt(s'i,p)並將其存儲在數據庫中。
這會影響您的密碼數據庫,如果您的用戶無需付出任何努力就可以立即使您的密碼數據庫更加安全。
這是我想的更好的答案。 – Nico 2017-01-20 07:55:03
是的我一直在傾向於第二種選擇一段時間,但我希望能聽到這裏的人在這裏有一個更簡單的方法來做到這一點...... – erskingardner 2011-02-22 06:55:59