在数据库中存储未加密的密码哈希盐

时间:2013-02-15 14:33:35

标签: passwords cryptography

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

这似乎毫无意义。当然,如果攻击者可以访问数据库并且他们发现盐就像没有盐一样?

如果他们试图通过暴力破解密码并且他们在加密密码的同一行中有明显的未加密盐,他们可以将盐与他们将要尝试的所有单词/短语连接起来他们?

6 个答案:

答案 0 :(得分:3)

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

否则,攻击者可能会破解十亿个可能的密码,然后将每个散列密码与其列表进行比较。

答案 1 :(得分:1)

首先查看http://en.wikipedia.org/wiki/Rainbow_table

如果您为每个密码使用随机盐,则黑客无法使用彩虹表。

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

某些crypt函数将未加密的salt(以及其他内容)连接到加密的salted密码。例如Der php bcrypt blowfish。

答案 2 :(得分:0)

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

http://en.wikipedia.org/wiki/Salt_%28cryptography%29

答案 3 :(得分:0)

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

如果攻击者已经强制使用明文>像这样的哈希组合,他知道所有相同哈希的明文。

在散列之前将一个盐添加到明文中,因此相同的明文散列到不同的散列,迫使攻击者尝试每个散列的所有字母组合,从而大大减慢他的速度。

答案 4 :(得分:0)

你需要用盐来制作彩虹桌,而那些东西是无用的。

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

但看看它通常如何工作:你将盐发送到客户端,使用它来哈希盐+密码。因此,您的客户端必须首先解密盐,在许多情况下可以由任何atacker完成。在攻击者没有机会观察客户端行为的情况下,加密的哈希值可能会提高安全性(通过默默无闻的安全性)。

答案 5 :(得分:0)

如果某人掌握了您的数据库,那么出于各种原因,您将陷入巨大的麻烦之中。在理论上,攻击者获取(或猜测)单一盐会容易得多。如果他们知道您使用的唯一盐,他们可以同时强制所有密码。如果您为每个用户使用不同的盐,则攻击者必须知道每个盐的有效攻击。

至于加密用于存储的盐..我认为这样做并没有错,只是很少有攻击者能够转储整个数据库。如果可以的话,即使不必绕过身份验证,他们也可能无论如何都能得到他们所拥有的东西。