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