【发布时间】:2012-06-29 04:58:24
【问题描述】:
好的,所以我明白为什么在散列之前加盐密码是个好主意。 问题是,通常人们建议在密码中附加或附加盐,为什么不两者都做呢?
我的想法是,所以如果黑客先生掌握了数据库并想获取人 x 的密码, 他心想,好吧,大多数人建议添加或预先添加盐,所以让我们这样做.. 他用密码+盐的所有组合生成了一个彩虹表,并尝试了他的运气。如果这不起作用,他会做同样的事情,但盐 + 密码。
为了让攻击变得更加困难,为什么开发人员不更进一步,做'salt + password + salt',或者'reverse(salt) + password + salt',或者你可能会喜欢开始切割密码/盐,开始在这里和那里放一些盐等等。
黑客能够找到密码的唯一方法是他是否可以访问源代码(以了解盐是如何在散列之前编织到密码中的)
进一步说明,人们建议在键拉伸时至少进行 1000 次迭代,同样为什么不进行 1147、1652 等 :)
第二个进一步说明,在查看哈希字符串时,是否可以计算出使用的哈希函数?
【问题讨论】:
-
猜测使用的哈希函数没有问题。它可以是公开的。请问,具体的问题是什么?是因为浪费时间在两端加盐没用吗?
-
是的,但是当查看一个长哈希字符串时,黑客可以说“哦,他们使用了 MD5”或“哦,他们使用了 sha-512”等等。如果他们不能,他们将不得不做出所有“正确”哈希的彩虹表;否则他们将不得不查看源代码。
-
是的,MD5、SHA1、SHA512等产生的哈希很容易区分,比如它们的长度不同。但这根本不是问题。您似乎没有理解尝试 3 种算法而不是 1 种算法和尝试 2^128 更多组合(我们在密码学中处理的常见数字)之间的区别。
-
@Metalstorm 显然它们是因为您似乎认为在安全性方面有任何价值,而不是安全性数学。使某些东西加密安全的方法是让攻击者蛮力通过更大的搜索空间。为此,您不妨让盐变大 以获得相同的效果。 (或者使用更大的散列函数,或更少破坏的散列,或随机盐来获得更多收益。)
-
@Metalstorm 另外,如果您可以泄露您的密码数据库,那么您可以泄露您的源代码存储库并非不可想象。你不想让密码恢复“有点棘手”,你想让它在计算上不可行。
标签: security hash cryptography salt