基础知识
哈希、盐值、PBKDF[1-2]
问题
我正在使用像PBKDF2这样的缩放哈希/盐算法在我的数据库中存储密码。我想:“嘿,如果我将我的密码哈希20000次,那么应该足以防止暴力攻击,对吗?” 这是正确的。直到明年更好的计算机出现。
可能的解决方案
暂且不提加密密钥长度和盐值长度的问题(它们也可以并入此解决方案),我想,如果每隔N天,我重新哈希数据库中的所有密码。因此,它们被哈希了20,000次,然后一周后,我再将它们哈希500次,总共变成20,500次。在数据库中存储已哈希的次数。这个想法是随着技术进步而增加哈希计数。
现有类似实现
BCrypt引入了一个工作因子来增加哈希密码所需的时间:
PBKDF2使用多个迭代来完成相同的操作。Mac OS-X、Windows和Linux用于文件级加密。无线网络也使用它的实现。
有人看到问题了吗?这已经尝试过了吗?是否存在一种算法,可以接受预先哈希的密码并重新哈希它“N”次?
编辑
问题不在于多重哈希是否安全(经过了尝试和测试)。问题在于重新哈希以提高安全性而不必让用户重新设置密码。
解决方案:与JVestry的讨论结果
因此,每隔“N”天重新哈希所有密码是浪费时间的,因为黑客可以通过使用旧数据库副本来破解它。但是,如果将随着时间增加哈希计数的概念结合到密码更新策略中,则该概念是可行的。
实施方法
所有密码在30天后过期。当它们被更新时,它们的哈希计数器会增加。因此,昨天重置的密码比20天前设置的密码更难破解。哈希计数器可以存储或使用最后修改日期的算法派生。
谢谢!
TTD