-1

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

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

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

4

6 回答 6

3

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

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

于 2013-02-15T14:36:33.367 回答
1

首先参见http://en.wikipedia.org/wiki/Rainbow_table

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

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

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

于 2013-02-15T14:37:01.407 回答
0

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

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

于 2013-02-15T14:37:20.620 回答
0

要暴力破解散列密码,攻击者需要尝试散列所有可能的字母和符号组合,并将其与他拥有的散列值进行比较。

如果攻击者曾经暴力破解过一次这样的明文 > 哈希组合,他就知道所有相同哈希的明文。

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

于 2013-02-15T14:38:25.340 回答
0

你需要盐来制作彩虹桌和那些没用的东西。

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

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

于 2013-02-15T14:38:38.137 回答
0

如果有人掌握了您的数据库,由于各种原因,您将遇到大麻烦。理论上,攻击者获得(或猜测)一种盐会容易得多。如果他们知道您使用的唯一盐,他们可以同时暴力破解所有密码。如果您为每个用户使用不同的盐,攻击者必须知道每个盐才能有效攻击。

至于加密存储的盐..我想这样做没有任何问题,只是希望攻击者能够转储您的整个数据库的情况很少见。如果可以的话,他们可能无论如何都能够获得他们想要的东西,即使不必绕过身份验证。

于 2013-02-15T14:40:27.750 回答