2

我听说盐的唯一目的是防止彩虹表攻击,但它肯定比这更有价值吗?它不会也阻止基于字典的攻击吗?那么暴力破解呢,盐在那里有用吗?你能解释一下为什么吗?

其次,假设我有一个算法,它采用微时间、128 个字符的盐和 10 亿到 100 亿之间的随机数,并将它们散列在一起。这会提供高水平的安全性吗?因为即使攻击者知道其中一个细节,在我看来,计算其余部分在计算上仍然是不可行的。对吗?

谢谢,

编辑:澄清一下,攻击者无权访问散列算法,因此他们无法向系统发送任何垃圾信息。他们所拥有的只是哈希,他们必须弄清楚它是如何编译的。当然,即使他们知道哈希是如何生成的,尝试用长盐暴力破解所有组合也会使其不切实际吗?

此外,哈希不是用户的密码或用户名,它只是用于身份验证的一组随机字符。所以不需要存储盐和随机数,只需存储生成的哈希即可。在这种情况下,上面的系统(用下面的代码表示)是否是一个很好的系统,可以防止攻击者能够真实地猜测用户的哈希值可能是什么?

$salt = "some random characters I made up";
hash('sha256', microtime(true).$salt.mt_rand(1000,9999));

我知道那只是 1000-9999 而不是上面提到的数十亿。

再次感谢。

4

2 回答 2

5

否 - 它只防止彩虹表攻击。由于攻击者需要为每个密码条目构建彩虹表。因为盐添加了一种小香料,可以将密码散列与其他所有散列区分开来。

基于字典的攻击和暴力破解攻击在这里本质上是一样的。加盐不会阻止这些,因为您的验证算法类似于

plain-text-passwd = 'secret provided by user'
salt = getSalt(username) //looks the salt value up in database based on the users username
hash-password-in-db = getPassword(username) // looks up hashed password bassed on users username
if(hash(plain-text-passwd + salt) == hash-password-in-db) //if true, password is correct

对于基于字典和暴力破解的攻击,plain-text-passwd 的值会被用户发送垃圾邮件,而用户又会使用盐进行哈希处理。所以加盐什么都不做

其次,假设我有一个算法......

这是没有意义的,您需要根据用户信息表存储所有这些信息,其中 5 个字符的盐值用于相同的目的。

于 2010-03-03T01:15:11.503 回答
3

彩虹表是一种优化方法,可用于字典攻击和蛮力攻击。

正确使用的盐使得预计算对于字典和蛮力攻击不可行。由于彩虹表是一种预计算优化,因此它是一种通过盐渍中和的优化。

您的第二个示例实际上只是更长的盐,具有一些较低的熵部分。令人担忧的是,您区分“随机数”和“盐”,因为盐应该是随机数。

于 2010-03-03T01:47:45.267 回答