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