【发布时间】:2010-03-03 01:04:05
【问题描述】:
我听说盐的唯一目的是防止彩虹表攻击,但它肯定比这更有价值吗?它不会也阻止基于字典的攻击吗?那么暴力破解呢,盐在那里有用吗?你能解释一下为什么吗?
其次,假设我有一个算法,它采用微时间、128 个字符的盐和 10 亿到 100 亿之间的随机数,并将它们散列在一起。这会提供高水平的安全性吗?因为即使攻击者知道其中一个细节,在我看来,计算其余部分在计算上仍然是不可行的。不过这样对吗?
谢谢,
本
编辑:为了澄清,攻击者无权访问散列算法,因此他们无法向系统发送任何垃圾信息。他们所拥有的只是哈希,他们必须弄清楚它是如何编译的。当然,即使他们知道哈希是如何生成的,尝试暴力破解所有长盐的组合也会变得不切实际?
此外,哈希不是用户的密码或用户名,它只是用于身份验证的一组随机字符。所以不需要存储盐和随机数,只需存储生成的哈希即可。在这种情况下,上述系统(如以下代码所示)是否是一个很好的系统,可以防止攻击者能够真实地猜测用户的哈希值可能是什么?
$salt = "some random characters I made up";
hash('sha256', microtime(true).$salt.mt_rand(1000,9999));
我知道这只是 1000-9999,而不是上面提到的数十亿。
再次感谢。
【问题讨论】:
-
下次登录时,系统如何知道创建密码时的微时间是多少?如果您不存储它,那么您将无法验证登录。如果你确实存储了它,那么它只是盐的一部分,无论如何你都会把盐粘在数据库中。
标签: encryption hash salt rainbowtable