Passwords 在数据库中为密码哈希存储未加密的salt

Passwords 在数据库中为密码哈希存储未加密的salt,passwords,cryptography,Passwords,Cryptography,在密码散列中使用salt时,为什么建议对每个密码使用不同的salt并将其未加密存储在数据库中 这似乎毫无意义。当然,如果攻击者能够访问数据库,并且发现了盐,那就好像根本没有盐一样 如果他们试图通过bruteforce破解密码,并且他们的普通未加密salt与加密密码位于同一行,他们可以将salt与他们要尝试的所有单词/短语连接起来,不是吗?salt的目的是防止有人一次攻击所有密码。由于每个密码都有不同的salt,攻击者必须单独攻击它们。这大大减少了他可以为每个帐户尝试的可能密码的数量 否则,攻击者

在密码散列中使用salt时,为什么建议对每个密码使用不同的salt并将其未加密存储在数据库中

这似乎毫无意义。当然,如果攻击者能够访问数据库,并且发现了盐,那就好像根本没有盐一样


如果他们试图通过bruteforce破解密码,并且他们的普通未加密salt与加密密码位于同一行,他们可以将salt与他们要尝试的所有单词/短语连接起来,不是吗?

salt的目的是防止有人一次攻击所有密码。由于每个密码都有不同的salt,攻击者必须单独攻击它们。这大大减少了他可以为每个帐户尝试的可能密码的数量

否则,攻击者只需对10亿个可能的密码进行哈希运算,然后将每个哈希运算后的密码与其列表进行比较。

请参见第一部分

如果你对每个密码使用随机密码,黑客就不能使用彩虹表

您需要存储未加密的salt,以便能够散列字符串以检查它是否与原始密码的salt散列匹配


一些加密函数将未加密的salt(除其他外)连接到加密的salt密码。例如,Der php bcrypt河豚。

公共盐会使破解密码列表更加耗时。但是,在破解单个密码时,这并不会使字典攻击更加困难。攻击者可以访问加密密码和salt,因此在运行字典攻击时,攻击者可以在尝试破解密码时简单地使用已知salt


要强制使用散列密码,攻击者需要尝试散列所有可能的字母和符号组合,并将其与他拥有的散列进行比较

如果攻击者曾经如此粗暴地使用明文>哈希组合,则他知道所有相同哈希的明文


在散列之前,将盐添加到明文中,以便将相同的明文散列到不同的散列中,迫使攻击者为每个散列尝试所有字母组合,从而大大降低了攻击速度。

您需要盐来制作彩虹表以及其他无用的东西

当然,盐可以加密存储,这使得破解一个密码变得更为复杂


但看看它通常是如何工作的:您将salt发送给客户机,客户机使用salt对salt+密码进行哈希运算。因此,您的客户机必须首先解密salt,在许多情况下,这可以由任何atacker完成。在攻击者没有机会观察客户端行为的情况下,加密哈希可能会提高安全性(通过模糊性实现安全性)

如果有人控制了你的数据库,你会因为各种原因陷入大麻烦。攻击者获得(或猜测)一种盐要容易得多。。理论上。如果他们知道你使用的唯一一种盐,他们可以同时强制使用所有密码。如果您为每个用户使用不同的salt,攻击者必须知道每个salt才能有效地进行攻击


至于对盐进行加密储存。。我想这样做没有什么错,只是希望攻击者能够转储整个数据库的情况很少。如果可以的话,即使不需要绕过身份验证,他们也可以得到他们想要的东西。

投票人,想解释一下吗?投票人:“这个问题没有显示任何研究成果”可能是需要徽章的人。他们从不解释。@deceze没有显示任何研究成果?“你在开玩笑吗?”安迪这个问题以前已经被回答过很多次了。