【发布时间】:2010-09-30 01:38:27
【问题描述】:
我在理解密码加盐的用途时遇到了一些麻烦。据我了解,主要用途是阻止彩虹表攻击。然而,我所见过的实现这一点的方法似乎并没有真正让问题变得更难。
我看过很多教程建议将盐用作以下内容:
$hash = md5($salt.$password)
原因是哈希现在不是映射到原始密码,而是密码和盐的组合。但是说$salt=foo 和$password=bar 和$hash=3858f62230ac3c915f300c664312c63f。现在有彩虹表的人可以反转哈希并提出输入“foobar”。然后他们可以尝试所有密码组合(f、fo、foo、... oobar、obar、bar、ar、ar)。获取密码可能需要几毫秒的时间,但其他时间不多。
我见过的另一个用途是在我的 linux 系统上。在 /etc/shadow 中,散列密码实际上存储在 和 盐中。例如,“foo”的盐和“bar”的密码将散列为:$1$foo$te5SBM.7C25fFDu6bIRbX1。如果黑客能够以某种方式获得此文件,我看不出盐的用途,因为已知 te5SBM.7C25fFDu6bIRbX 的反向哈希包含“foo”。
感谢任何人对此提供的任何启发。
编辑:感谢您的帮助。总结一下我的理解,盐使散列密码更加复杂,从而使其不太可能存在于预先计算的彩虹表中。我之前的误解是我假设所有哈希都存在彩虹表。
【问题讨论】:
-
另外,在此处更新 - 使用 md5 散列不再是最佳实践。 *.com/questions/12724935/salt-and-passwords
-
感谢您的编辑。我有同样的疑问,现在已经澄清了。因此,“Salt”的真正意义在于首先使 Rainbow 表极不可能包含掺假(加盐)密码的哈希值。 :D
标签: hash cryptography salt rainbowtable