如果有人获得盐密钥访问权限,那么密码是否毫无意义?关闭服务器盐析?

时间:2013-02-20 04:27:00

标签: hash passwords salt

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

我知道salting + hashing被认为通常是安全的,但是我已经看到salting有盐密钥硬编码到密码脚本中,通常存储在同一台服务器上。

这是一个逻辑解决方案,最初哈希用户的密码,将该哈希传递给" salting服务器"或者某些函数存储在异地,然后传回盐渍哈希?

我看待它的方式是,如果入侵者获得对包含存储密码的服务器或数据库的访问权限,他们将无法立即访问salt密钥。

5 个答案:

答案 0 :(得分:4)

否 - 即使攻击者知道,盐仍然有效。

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

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

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

OTOH,对于大型服务器(谷歌,Facebook等)而言,故事完全不同 - 大盐变得非常有益。

答案 1 :(得分:3)

即使入侵者知道盐,盐析也很有用。

如果密码未加密,则可以使用广泛使用的预先计算rainbow tables来快速攻击您的密码。

如果你的密码表是盐渍的,那么预先计算彩虹表是非常困难的 - 为每种可能的盐创建彩虹表是不切实际的。

如果您使用每个密码输入不同的随机盐,并将其放在旁边的明文中,则入侵者很难攻击您的密码,而不是暴力攻击。

答案 2 :(得分:1)

Salting密码可以保护密码免受攻击者拥有散列密码列表的攻击。有一些常见的哈希算法,黑客有表格,允许他们查找哈希并检索密码。为了实现这一点,黑客必须闯入密码存储并窃取哈希值。

如果密码被加密,则攻击者必须使用散列算法和salt重新生成其哈希表。根据散列算法,这可能需要一些时间。为了加快速度,黑客还使用最常用的密码和字典单词列表。盐的想法是减缓攻击者的速度。

为每个密码使用不同的盐的最佳方法,使其长而随机,并且可以将盐存储在每个密码旁边。这确实减慢了攻击者的速度,因为他们必须针对每个单独的密码运行哈希表生成,以用于公共密码和字典单词的每种组合。这会使攻击者推断出强密码难以置信。

我读过一篇很好的文章,我现在找不到。但谷歌搜索'密码盐'给出了一些好的结果。看看this article

答案 3 :(得分:0)

我想指出,你用硬编码盐描述的方案实际上是不是盐,而是像钥匙或胡椒一样工作。盐和胡椒解决了不同的问题。

应为每个密码随机生成 salt ,并且可以与散列密码一起存储在数据库中。它可以存储为纯文本,即使在攻击者知道的情况下也可以满足它的目的。

pepper 是一个密钥,将用于所有密码。它不会存储在数据库中,而应存放在安全的地方。如果攻击者知道辣椒,就会变得无用。

我尝试用小tutorial来解释差异,也许你想看看那里。

答案 4 :(得分:0)

  

有道理。对于攻击者来说,似乎更多的努力(除非它是一个具有重要价值或重要性的站点)。

所有小型或大型网站,无论重要与否,都应将密码哈希视为高度重要性

只要每个哈希都有自己的大型随机盐,那么它确实变得无法实现,如果每个哈希都使用静态盐,你可以使用Rainbow表来清除使用password1的用户哈希,例如

使用良好的散列算法也很重要(使用MD5或SHA1几乎就像使用明文一样使用mutli gpu设置)如果不是bcrypt则使用scrypt或者如果你必须使用PBKDF2那么(你需要轮次)非常高)