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