为了账号安全,请及时绑定邮箱和手机立即绑定

密码盐对彩虹表攻击有什么帮助?

/ 猿问

密码盐对彩虹表攻击有什么帮助?

密码盐对彩虹表攻击有什么帮助?

我有点搞不懂把盐变成密码的目的。我的理解是,主要用途是阻止彩虹桌攻击。然而,我看到的实现这个问题的方法似乎并没有使问题变得更加困难。

我已经看过许多教程,建议将盐用作以下内容:

$hash =  md5($salt.$password)

其原因是哈希现在不是映射到原始密码,而是密码和SALT的组合。但是说$salt=foo$password=bar$hash=3858f62230ac3c915f300c664312c63f..现在,有彩虹表的人可以倒转哈希,并得到输入“foobar”。然后他们可以尝试所有密码组合(f,fo,foo,.Oobar,Obar,bar,Ar,Ar)。获得密码可能需要几毫秒,但其他时间不多。

我看到的另一个用途是在我的Linux系统上。在/etc/阴影中,哈希密码实际上是存储的。带着盐。例如,“foo”的盐类和“bar”的密码将散列如下:$1$foo$te5SBM.7C25fFDu6bIRbX1..如果黑客以某种方式得到了这个文件,我看不出盐有什么用途,因为te5SBM.7C25fFDu6bIRbX已知含有“foo”。

谢谢任何人都能在这上面撒点光。

编辑谢谢你的帮助。总结一下我所理解的,SALT使得散列密码更加复杂,从而使它更不可能存在于预先计算的彩虹表中。我之前误解的是,我假设所有的散列都有彩虹表。



查看完整描述

2 回答

?
幕布斯7119047

公众的意愿当破解单个密码时,使字典攻击更加困难。正如您已经指出的,攻击者可以访问哈希密码和SALT,因此在运行字典攻击时,她可以在试图破解密码时使用已知的SALT。

公共盐可以做两件事:破解一大串密码花费更多的时间,而使用彩虹表则是不可行的。

要理解第一个密码文件,请设想一个包含数百个用户名和密码的密码文件。如果没有SALT,我可以计算“md5(尝试[0])”,然后扫描文件,看看散列是否出现在任何地方。如果存在盐,那么我必须计算“md5(salt[a].try[0])”,与条目A进行比较,然后“md5(salt[b].try[0])”,比较条目B,等等。n做同样多的工作n文件中包含的用户名和密码数。

要理解第二个问题,你必须了解彩虹桌是什么。彩虹表是用于常用密码的预计算散列的大列表。再设想一下,密码文件没有盐类。我所要做的就是遍历文件的每一行,取出散列密码,并在彩虹表中查找它。我从来不需要计算一个散列。如果查找比散列函数快得多(可能是),这将大大加快文件的破解速度。

但是如果密码文件是咸的,那么彩虹表就必须包含“salt.Password”预哈希。如果盐是足够随机的,这是非常不可能的。我可能会把“hello”、“foobar”和“qwerty”这样的东西放在我常用的预散列密码(彩虹表)中,但是我不会像“jX95psDzhello”或“lpgB0sdgxfoobar”或“dZVUABJtqwerty”那样预先计算。这会使彩虹桌变得大得让人望而却步。

因此,SALT将攻击者减少到每行一次的计算,如果再加上足够长、足够随机的密码,(一般来说)是无法破解的。


查看完整回答
反对 回复 2019-07-12
?
临摹微笑

其他的答案似乎并没有解决你对这个话题的误解,下面是这样说的:

盐的两种不同用途

我已经看过许多教程,建议将盐用作以下内容:

$hash = md5($salt.$password)

[...]

我看到的另一个用途是在我的Linux系统上。在/etc/阴影中,散列密码实际上是用SALT存储的。

你,你们必须使用密码存储SALT,因为为了验证用户根据密码数据库输入的内容,必须将输入与SALT结合起来,对其进行散列,并将其与存储的哈希进行比较。

散列的安全性

现在,有彩虹表的人可以倒转哈希,并得到输入“foobar”。

[...]

因为te5SBM.7C25fFDu6bIRbX的反向散列已知包含“foo”。

这是不可能扭转哈希本身(至少在理论上)。“foo”的散列和“saltfoo”的散列有没什么共同之处。即使在加密哈希函数的输入中更改一位,也应该完全改变输出。

这意味着您不能用普通密码构建彩虹表,然后再用一些SALT“更新”它。你必须从一开始就把盐考虑进去。

这就是为什么你首先需要一张彩虹桌的全部原因。因为您无法从散列中获得密码,所以预先计算最可能使用的密码的所有散列,然后将您的散列与它们的散列进行比较。

盐质

但是说$salt=foo

“foo”将是盐的选择很差。通常,您会使用一个随机值,编码在ASCII中。

另外,每个密码都有自己的SALT,与系统上的所有其他盐类不同(希望如此)。这意味着攻击者必须单独攻击每个密码,而不是希望哈希值与数据库中的一个值匹配。

袭击

如果黑客能拿到这份文件,我看不出盐有什么用,

彩虹桌攻击需要/etc/passwd(或使用任何密码数据库),否则如何将彩虹表中的散列与实际密码的散列进行比较?

至于目的:假设攻击者想要为10万个常用的英语单词和典型密码(想想“秘密”)构建一个彩虹表。如果没有盐,她将不得不预先计算100,000个散列。即使传统的UNIX盐只有2个字符(每个字符都是64个字符中的一个):[a–zA–Z0–9./])她必须计算和存储4096,000,000散列.有了很大的进步。


查看完整回答
反对 回复 2019-07-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信