【问题标题】:salted password security加盐密码安全
【发布时间】:2012-07-05 02:31:52
【问题描述】:

为什么为每个密码使用不同的盐存储密码更安全? 由于密码在加盐后会进行哈希处理,因此我认为没有理由使用不同的盐。

用已知的盐或其他东西暴力破解密码更容易吗?或者黑客一旦知道了盐就可以制作自己的彩虹表?

亲切的问候

【问题讨论】:

  • @JohnConde 这并不是真正的重复。这个问题是关于为每个密码使用不同盐的优势。
  • 最近成为热门话题,但普遍的共识是,加盐密码和使用加密哈希还不够。改为使用密钥派生函数进行调查。
  • @Leigh:还有什么要读的吗?
  • @Creshal PBKDF2 on Wikipedia 的介绍性段落总结了为什么 KDF 更强大。 SCrypt paper 也有一些很好的(更技术性的)信息,用于生成更强大的 KDF。

标签: security passwords salt password-hash


【解决方案1】:

当您为每个密码指定单独的盐时,每个密码中的每个盐之间没有共同的联系。因此,即使“黑客”破解了一个密码,他也不会有任何其他密码的盐。

在使用 PHP 和加盐密码时,您应该使用慢速加密,例如 crypt。你加密的速度越快,“黑客”就能越快找到解密它的方法。

您可以简单地创建一个基于用户名、电子邮件或几项组合的新盐的函数。

【讨论】:

  • 回复您的第一段:即使他知道盐,他仍然必须对密码进行反哈希,这是“不可能”的,因为哈希是不可逆的?
  • 他可以使用您使用的加密方法,使用随机盐 + 密码暴力破解它。这就是 Creshal 和我都建议使用慢速加密方法的原因。
  • @TomBroucke 当只有一个哈希值时,暴力破解的速度要快几个数量级。您“仅”必须用盐计算每个哈希一次。为每个用户使用单独的盐,您必须为每个用户重复整个过程。我想不出一种更简单的方法来增加复杂性。
【解决方案2】:

如果您只使用一种盐,黑客只需重建他们的彩虹表一次,就可以将它们用于您的整个数据库。重复的密码也更容易找到。

使用单独的哈希和昂贵的算法(bcrypt、scrypt)。

【讨论】:

    【解决方案3】:

    好的,让我们直截了当地说:盐渍与彩虹桌无关。是的。再说一次。盐渍与彩虹桌无关。

    嗯,这并不完全正确。通过将攻击一个哈希的成本与其他哈希的成本分摊,盐用于防止时间和内存的权衡。

    在彩虹表的情况下,使用盐意味着整个表都失效了。

    但还有其他方法可以使整个表无效。您可以将静态字符串附加到每个密码(不是盐)。那会打败彩虹桌...

    真正的敌人

    这里真正的敌人不是彩虹桌。真正的敌人是蛮力。现代机器的暴力破解速度如此之快,以至于构建一个巨大的 GPU 集群并进行高级暴力破解比存储足够多的彩虹表以使其值得缓慢的磁盘访问更便宜。

    盐有助于击败暴力破解,因为它是独一无二的。不是每个密码。不是每个用户,但在宇宙中是独一无二的(至少在统计上)。这就是为什么您要使用随机数,而不是用户名、电子邮件或任何可预测的东西。

    再说一次,不是因为我们不想要可预测性。但是因为我们想要统计唯一性。如果攻击者攻击两个都使用用户名作为盐的网站,他可以同时对两个哈希进行分期付款(即使两者可能使用不同的密码)。

    盐应该是随机的,并且每个用户都是随机的。

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 2013-08-23
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2010-09-28
      相关资源
      最近更新 更多