为什么要在散列密码旁边存储盐?

信息安全 哈希 应用安全 证书
2021-08-24 14:51:58

了解需要使用昂贵的散列来保护凭证并使用加密随机盐。

我想了解的是,为什么要将盐与散列一起存储在数据库中,这不会违背拥有一个的意义吗?

以一个 SQL 注入漏洞为例,我可以在其中转储 User 表中的数据。如果我可以访问哈希以及盐,它不会使我的蛮力尝试更容易(而不是不知道盐?)。

如果将盐与哈希一起存储 - 这不会破坏针对彩虹攻击的保护点吗?(如果攻击者有权访问数据库)。

1个回答

我可以看到你来自哪里,但答案基本上是“这不是盐的用途”。如果我试图发现特定用户的密码,那么如果盐就在散列旁边,它就没有多大帮助。但是,在这种情况下预计不会有用 - 破解个人用户的密码已经够难的了。

加盐的重点是在散列之前添加到每个密码中,这样每个密码都是唯一的 - 如果两个用户都拥有hunter2密码,则散列需要不同。

假设攻击者正在通过数据库(或整个数据库范围)寻找密码为letmein123. 没有盐,他们可以做一次哈希并搜索哈希。

如果攻击者在数据库中发现两个或多个相同的哈希值,如果没有加盐,则表明这是一个弱密码(因为多个用户选择了相同的密码),并且可以集中精力首先破解它。

但是盐是在散列之前添加到密码中的用户特定前缀/后缀,因此(即使使用“公共”盐)攻击者必须重新计算每个用户的散列 - 因此针对 10000 个用户检查一个密码这并不比针对一个用户检查 10000 个密码更有效,这就是重点。