哈希盐是否有任何其他用途,而不是防止彩虹表攻击?

Ben*_*Ben 2 encryption hash salt rainbowtable

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

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

谢谢,

编辑:为了澄清,攻击者无法访问哈希算法,因此他们不能向系统发送任何信息.它们只有散列,它们必须弄清楚它是如何编译的.当然,即使他们知道哈希是如何产生的,试图用长盐来强制所有组合也会让它变得不切实际?

此外,哈希不是用户的密码或用户名,它只是用于身份验证的随机字符集.因此,不需要存储salt和随机数,只需要存储结果.在这种情况下,上面的系统,如下面的代码所示,是一个很好的系统,以防止攻击者能够真实地猜测用户的哈希可能是什么?

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

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

再次感谢.

Jas*_*son 5

不 - 它只能防止彩虹表攻击.攻击者需要为每个密码条目构建彩虹表.因为盐添加了一个lil spice,可以区分密码哈希和其他所有密码哈希.

基于字典和强制攻击的攻击在这里基本相同.Salting并不会阻止这些,因为您的验证算法是类似的

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
Run Code Online (Sandbox Code Playgroud)

对于基于字典和强制攻击的攻击,plain-text-passwd的值被用户发送垃圾邮件,而用户又会使用盐进行哈希处理.因此盐腌没有任何作用

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

这是毫无意义的,您需要将所有这些信息存储在用户信息表中,其中5个字符的salt值用于相同的目的.