5

假设知识
Hashing、Salting、PBKDF[1-2]

问题
我正在使用像 PBKDF2 这样的缩放散列/加盐算法将密码存储在我的数据库中。我想‘嘿,如果我对我的密码进行 20000 次哈希处理,那应该足以抵御暴力攻击,对吧?它是真的。直到明年更好的计算机问世。

可能的解决方案

撇开加密密钥长度和盐长度的问题(也可以合并到这个解决方案中)我想,如果每 N 天,我重新散列数据库中的所有密码。所以它们被散列了 20,000 次,然后一周后,我又对它们进行了 500 次散列,总共 20,500 次。将它在数据库中某处的散列次数存储。这个想法是随着技术的进步增加哈希计数。

现有的类似实现
BCrypt引入了一个工作因素来增加散列密码所需的时间:
PBKDF2使用多次迭代来做同样的事情。Mac OS-X、windows 和 linux 使用它来进行文件级加密。Wi-Fi网络也使用它的实现。

任何人都可以看到这个问题吗?这已经试过了吗?是否有一种算法可以接受预先散列的密码并重新散列“N”次?

编辑
问题不在于多重散列是否安全(这已经过试验和测试)。问题在于重新散列以提高安全性,而不必让用户重新设置密码

解决方案:由与 JVestry 讨论提供

因此,每'N'天重新散列所有密码是浪费时间,因为黑客可以通过使用数据库的旧副本来破解它。但是,如果您将随时间增加哈希计数的概念与密码更新策略结合起来,那么这个概念是合理的。

实施
所有密码每 30 天过期一次。当它们被更新时,它们的哈希计数器会增加。因此,昨天的密码重置将比 20 天前的密码更难破解。哈希计数器可以存储或从使用最后修改日期的算法导出。

谢谢!

TTD

4

2 回答 2

3
Can anyone see a problem with this?

是的。假设您每周都会用盐重新散列(我相信这就是您的意思),仍然存在问题。如果有人设法在第 x 周访问散列密码,那么在第 x + n 周任何进一步的散列都不会提供任何额外的安全性。

黑客只需要在第 x 周进行如此多的迭代。一旦钥匙坏了,他/她只需要像你每周做的那样对它进行哈希处理。这很容易,完全被忽视。

如果您重新哈希,请使用新盐并从头开始进行更多迭代。您的捷径不会带来额外的安全性。

于 2011-08-19T01:16:09.043 回答
2

这将使暴力破解更加困难,但也会使您的登录过程变慢。

你最好用更多的盐。

于 2011-08-19T00:37:31.013 回答