我想避免的问题是对数据库的“蛮力”攻击。因此,如果我在我的信息中添加一个50字节长的密码随机盐(我不需要检索,只需要它的散列),它是否足够安全?
我知道答案是不准确的--这取决于它是超级计算机,还是个人电脑等等。我想得到一个大致的想法--一台超级计算机能否在一秒钟内通过其中的10^9 ? 10^20?一台电脑是否需要一年时间才能全部通过?含糊其辞。
编辑:盐只保留在散列结果中。
发布于 2012-08-06 14:36:17
盐的用途不是为了降低计算哈希的速度,而是为了防止彩虹表变得有用。SHA512的单个迭代速度太快,无法用于对付强暴攻击。
在一个像样的GPU上,您可以使用~100 m散列/秒 (新链接)使用SHA512。对于具有多个GPU的系统,可以将其相乘。对于诸如bcrypt这样的缓慢的KDF,您可以调整迭代计数以使其更合适。为了获得良好的安全裕度,您需要大约0.3s/散列的东西。
请记住,50字节是400位,或者是2^400的键空间。如果您设法计算2^400散列,几乎可以保证在SHA512中找到冲突。然而,攻击者并没有试图猜测盐。你应该担心的是,当攻击者已经知道盐的时候,就会破解哈希。
解决方案是数据库中的使用PBKDF2 2、bcrypt或scrypt和将盐分以明文形式存储。
看起来你在努力实现你自己的计划。请不要这样做。密码学有两条被广泛接受的规则:
我怎么强调都不过分,特别是在处理密码的时候,推出自己的方案有多危险。即使是传奇的布鲁斯·施耐尔也不敢在没有经过认真的同行评审和几个月(如果不是几年)的测试和调整的情况下编写自己的密码系统。
我给你的关于散列的建议是一个基于同行评审和大量理论和实践测试的标准。尝试使用额外的散列和其他黑魔法来扩展它是个坏主意,只会增加应用程序的攻击面,并造成潜在的安全缺陷。坚持标准。
https://security.stackexchange.com/questions/18191
复制相似问题