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

时间:2015-09-14 12:13:18

标签: php laravel-5 pbkdf2 password-hash

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

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

e.g。默认迭代次数是2000,当第一次密码错误时,下一次尝试将是4000次迭代,然后是8000次等。

1 个答案:

答案 0 :(得分: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使用的)为您提供所有安全保障。您对身份验证代码的处理越少,引入漏洞的可能性就越小。