当密码错误时,动态增加PBKDF2的迭代次数


Dynamically increase iterations for PBKDF2 when the password is wrong

我正在考虑在我的Laravel 5应用程序中实现PBKDF2,以取代默认的基于河豚的身份验证。

每次密码输入错误时,是否可以将迭代计数加倍?

。默认迭代次数为2000次,当第一次密码输入错误时,下一次尝试将是4000次,然后是8000次,以此类推。

虽然理论上可以继续对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使用的),它为您完成了所有的安全性。对验证代码做得越少,引入漏洞的可能性就越小。