将迭代计数包含在密码哈希中是否安全

时间:2014-01-23 16:14:55

标签: passwords cryptography password-encryption

一位同事在经过大量研究后实施了我们的密码哈希码,包括从https://crackstation.net/hashing-security.htm获取建议

生成的密码哈希包含salt(应该是正确的,并且是验证密码所必需的),还包括迭代计数,这对于密钥拉伸来说很高。

迭代计数保存在数据库中很好,因为可以在单元测试中使用较低的计数,如果我们更改计数,则仍然可以验证现有的已保存密码哈希值。但是我想知道包含这个数字是否安全,因为如果迭代计数已知,那么蛮力攻击会不会更容易?在我看来,这将阻止对逐步测试的每个迭代计数进行大量额外检查。

1 个答案:

答案 0 :(得分:3)

可以在生成的哈希中包含迭代计数。

最重要的是,这可以让您在未来的硬件变得更快时增加迭代次数。有必要能够适应更快的硬件,而不会丢失旧的哈希值。

隐藏这个号码没什么用。如果不知道,攻击者会假设一个合理的数字,可能会更高一些。他不仅可以将最后一次迭代与哈希值进行比较,还可以将每次步骤与之间的每一步进行比较。如果BCrypt具有对数成本参数,那么这将是大约3-5次比较操作(数字太小是不合理的),这不是什么大问题。

众所周知的API(如PHP的password_hash())也将包含成本参数。

修改 隐藏迭代次数会为散列过程增加一种秘密,攻击者必须猜测这个数字。虽然添加服务器端密码有更好的可能性,但我试着在我的关于safely storing passwords的教程中解释这一点(看看有关胡椒和加密哈希值的部分)。