2015-09-14 33 views
2

我正在考慮在我的Laravel 5應用程序中實現PBKDF2以取代默認的基於blowfish的身份驗證。當密碼錯誤時動態增加PBKDF2的迭代

每次輸入密碼錯誤時,迭代次數加倍是否可行?

例如默認迭代次數是2000次,當密碼第一次出錯時,下一次嘗試將是4000次迭代,然後是8000次等等。

+0

不行。改用油門機械。 - 您可能希望在某個時候重置此設置,但您不知道原始值。聽起來像是一個等待發生的潛在DoS。 – Amelia

+2

如果您有3次(或5次或10次)錯誤的登錄嘗試,您可以停止接受該用戶名的憑證10分鐘(或30或2小時)。 –

+0

@ ArtjomB。這是一個更好的主意,不知道爲什麼我沒有想到這樣的事情,或者只是在X失敗登錄後鎖定帳戶。 +1 – imperium2335

回答

3

儘管您可以繼續在PBKDF2哈希上進行迭代,但實際上它無法通過事實你不知道原始值,這就是爲什麼你有一個哈希首先。你可以存儲迭代計數並嘗試恢復迭代,但你會遇到一個障礙 - 不知道密鑰派生函數的內部狀態。

考慮以下幾點:

var_dump(($hash = hash_pbkdf2("sha256", "password", "salt", 2000))); 
var_dump(hash_pbkdf2("sha256", $hash, "salt", 2000)); 
var_dump(hash_pbkdf2("sha256", "password", "salt", 4000)); 

這將產生:

string(64) "9209a0c90243e88b89488f99cd7ea010c244cc7a9d4bf65c157f2d8f642eb952" 
string(64) "b90c5d9a2d8bb559a36682bd6044a8da0480199148339fe34ef62598e052b0b6" 
string(64) "99a4d4dd66f714fae1bab9246ea449dd598d7683a569227c07cdb679e3ed3474" 

人體工程學,這是不可能的。並且如果確實有工作,那麼等待發生的拒絕服務也會發生,因爲這將是您的服務器執行計算。

總之,堅持password_hash(Laravel使用),爲您提供所有的安全。您對授權代碼做的越少,可以引入漏洞的次數越少。