为什么为每个密码使用不同的盐存储密码更安全?由于密码在加盐后被散列,我认为没有理由使用不同的盐。
用已知的盐或其他东西暴力破解密码更容易吗?或者黑客一旦知道了盐,他们会制作自己的彩虹表吗?
亲切的问候
为什么为每个密码使用不同的盐存储密码更安全?由于密码在加盐后被散列,我认为没有理由使用不同的盐。
用已知的盐或其他东西暴力破解密码更容易吗?或者黑客一旦知道了盐,他们会制作自己的彩虹表吗?
亲切的问候
当您为每个密码提供自己的盐时,每个密码中的每个盐之间没有共同的联系。因此,即使“黑客”破解了一个密码,他也不会有任何其他密码的盐。
在使用 PHP 和加盐密码时,您应该使用慢速加密,例如 crypt。加密的速度越快,“黑客”就能越快找到解密它的方法。
您可以简单地创建一个基于人的用户名、电子邮件或一些东西的组合创建新盐的函数。
如果你只使用一种盐,黑客只需重建他们的彩虹表一次,就可以将它们用于你的整个数据库。重复的密码也更容易找到。
使用单独的哈希和昂贵的算法(bcrypt、scrypt)。
好的,让我们直截了当地说:盐渍与彩虹表无关。是的。再说一次。盐渍与彩虹桌无关。
嗯,这并不完全正确。通过将攻击一个哈希的成本与其他哈希的成本分摊,盐用于防止时间和内存的权衡。
在彩虹表的情况下,使用盐意味着整个表无效。
但是还有其他方法可以使整个表无效。您可以将静态字符串附加到每个密码(不是盐)。那会打败彩虹桌......
真正的敌人
这里真正的敌人不是彩虹桌。真正的敌人是蛮力。现代机器的暴力破解速度如此之快,以至于构建一个巨大的 GPU 集群并进行高级暴力破解比存储足够的彩虹表以使其值得缓慢的磁盘访问更便宜。
盐有助于击败暴力破解,因为它是独一无二的。不是每个密码。不是每个用户,但在宇宙中是独一无二的(至少在统计上)。这就是为什么您要使用随机数,而不是用户名、电子邮件或任何可预测的东西。
同样,不是因为我们不想要可预测性。但是因为我们想要统计唯一性。如果攻击者攻击两个都使用用户名作为盐的站点,他可以同时分摊他对两个哈希的攻击(即使两者可能使用不同的密码)。
盐应该是随机的,并且每个用户。