hash - 如果有人获得了加盐 key ,加盐密码是否毫无意义?关闭服务器加盐?

标签 hash passwords salt

听说大型科技公司最近发生的所有黑客攻击事件,让我想知道他们对密码存储的使用。

我知道 salting + hashing 通常被认为是安全的,但我见过的 salting 示例将 salt key 硬编码到通常存储在同一服务器上的密码脚本中。

那么,最初对用户密码进行哈希处理,将该哈希值传递给“加盐服务器”或异地存储的某些函数,然后传回加盐后的哈希值是否是一种合乎逻辑的解决方案?

我的看法是,如果入侵者获得对包含存储密码的服务器或数据库的访问权限,他们将不会立即访问盐 key 。

最佳答案

不——即使攻击者知道盐仍然有效。

salt 的想法是它使对大量用户的字典攻击变得更加困难。如果没有加盐,攻击者会散列字典中的所有单词,并查看哪些与您用户的散列密码相匹配。使用 salt,他必须多次对字典中的每个单词进行哈希处理(对每个可能的哈希值进行一次),以确定适合每个用户的单词。

这种乘以几千(或者可能几百万,取决于你使用的盐的大小)增加了散列所有值的时间,并且存储需要存储结果 - 这一点(你希望)它是不切实际。

但是,我应该补充一点,在许多(大多数?)情况下,非常大的盐并不能真正增加很多安全性。问题是,如果您使用 24 位盐(约 1600 万个可能值)但只有几百个用户,攻击者可以提前收集您实际使用的盐值,然后执行他的字典攻击仅针对这些值,而不是全部约 1600 万个潜在值。简而言之,您的 24 位 salt 只增加了一点点难度,超过 ~8 位 salt 所提供的难度。

OTOH,对于大型服务器(谷歌、Facebook 等)来说,情况完全不同——大量的盐会变得非常有益。

关于hash - 如果有人获得了加盐 key ,加盐密码是否毫无意义?关闭服务器加盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14972290/

相关文章:

javascript - 在密码输入上使用 required 属性

c# - 当为密码创建哈希+盐时,有没有办法避免将盐保存为数据库中的单独字段

c# - 在 C# 中生成随机盐的最佳方式?

java - pHash 开源感知哈希库有哪些替代方案?

python - 匹配文件中的哈希值

data-structures - 哈希 : Tables, 列表和 map ,哦,天哪?

ruby - 如何使用哈希在 Ruby 中存储方法?

security - 你如何强制执行强密码?

java - 我如何在 Spring Security 中检查加盐密码?

security - 自动生成的密码中应避免使用的字符