是否可以使用已知的盐攻击用户密码

时间:2011-02-21 09:13:58

标签: php security passwords salt

我被告知电子邮件是不好的,因为它不是唯一的并且与用户相关联 如果用户在2个站点上使用相同的密码,则会有相同的哈希值。

那么,它有什么问题?什么是攻击场景?
假设我们有哈希和盐。因此,其他站点在其数据库中具有相同的哈希值。 我们如何在其他网站上对此用户造成任何伤害?我们可以吗?

我认为没有任何可能性,但我不是安全方面的专家,因此,我想听听那些人的答案,当然还有实际和具体的答案。 < / p>

我不会打破任何事情。我在这个问题的背景下问这个问题:是电子邮件还是(注册时间戳)好盐?

请一定和实际的答案。

7 个答案:

答案 0 :(得分:28)

盐点是未知的,它是为了防止攻击者分摊网站所有用户(甚至是许多用户)的暴力或字典攻击的成本的网站)。

因此,使用像电子邮件地址这样的非随机盐的问题在于,它会向攻击者显示用户在多个站点上使用相同的密码,因此如果通过破解,则可以立即访问多个帐户蛮力或字典攻击。对于电子邮件地址(以及每个用户唯一的一切),这是一个相当假设的问题,因为它假设攻击者拥有几个站点的帐户数据,并且用户有相当大的重叠。

使用电子邮件地址的另一个问题是用户希望更改它 - 如果您将其用作盐,除非您将其存储在单独的盐列中,或者要求人们始终更改其密码,否则将无法进行更改电子邮件。

答案 1 :(得分:4)

这主要是一个理论问题。那么,“破解散列值”是如何工作的呢?有所谓的“彩虹表”,它只是列出了常用词和theire哈希值。对于盐渍哈希,攻击者需要这样的桌子也有盐渍哈希。因此理论上,对于每个用户而言,独特的盐都是攻击者,每个盐需要一个表(=&gt;用户)。如果你有一个静态盐,他“只”需要一个表用于你的数据库。创建这样的表非常昂贵,因此在大多数情况下,仅为单个页面创建它是不值得的。

结论:它(当然)更安全,为每个使用者使用独特的盐,但在高水平。静态盐通常“足够安全”。

答案 2 :(得分:3)

我能想到的第一个攻击是:

  • 用户在两个站点拥有相同的盐和密码
  • 两个网站都有允许阅读盐渍密码的漏洞
  • 一个网站使用密码或蛮力猜测密码

攻击者可以快速查看两个站点上相同的盐渍密码,并在两个站点找到密码相同的用户。然后在较弱的站点上读取密码或猜测密码,并在更安全的站点上使用它。

当然,不同的盐不会使问题显着更好,因为最终可以尝试所有百万个密码。但知道哪些用户拥有相同的密码将比在更强大的网站上盲目尝试所有用户密码更“安静”。

答案 3 :(得分:1)

想想你编程的网站 - 我敢打赌,这些系统中最强大的用户都有非常常见的用户名,如 admin root 等。作为攻击者我可以生成一个预先计算好的哈希列表,其中包含weakest and most common passwords最常见的用户名 - 也就是说,如果一个网络程序员天真地想用他们的密码加上用户名,那么我作为攻击者的工作就是变得更容易 - 碰撞非常容易预测。

使用电子邮件地址作为盐更好,但同样的原则适用。假设我已经破解了一个使用基于电子邮件的盐的数据库,我将更容易破解每个其他数据库执行相同的操作 - 至少对于存在于数据库中的电子邮件/密码组合。 (鉴于登录重用的数量,这很可能)。它不像用户名盐那么简单,但是碰撞就在那里,等待被发现。

作为程序员,我真正想要的是一个不会发生碰撞的密码哈希。每个用户的通用唯一哈希,无法在世界上任何其他数据库中找到。这是一个很高的订单,但它可以用足够长的随机生成的盐来实现。

游戏中存在群体免疫效果 - 使用不良盐会使攻击者在攻击数据库后更容易攻击类似系统。强盐将始终保护您的用户并帮助其他用户群受到损害。

答案 4 :(得分:0)

在安全性方面无法真正帮助你,但是如果你看一下vBulletin,每个用户都会获得他们自己生成的盐,他们使用加密密码,如下所示:

$password = md5(md5($clear_password) + $salt);

因此,每个用户和运行vBulletin的任何站点的盐都会有所不同(至少很有可能会有所不同),因此存储的密码对于每个站点都会有所不同。

这不是你要求的东西,而是要冥想的东西:)

答案 5 :(得分:0)

假设黑客拥有密码和盐,并且可以访问您的哈希公式。

与流行的beleif相反,这不会阻止字典攻击。它将停止简单的字典攻击,但完全可以使用每个用户帐户的盐来迭代字典。

有关更多相关信息,请参阅:Why do salts make dictionary attacks 'impossible'?

这就是为什么当你生成密码的哈希值而不是用盐哈希一次时,IE:

hashedPW = sha1(rawPassword + salt)

你会这样做:

hashedPW = sha1(rawPassword + salt)
for i = 0; i < 2000; i++){
    hashedPW = sha1(hashedPW + salt)
}

多哈希函数应该花费很长时间来计算。这意味着当黑客获得对数据库的访问权限时,字典攻击会成倍地耗费时间,只允许他破解非常小的用户帐户。

答案 6 :(得分:-3)

如果盐已经知道,那么你的手上就会出现更大的问题。

http://en.wikipedia.org/wiki/Rainbow_attack