我很难理解在密码或其他重要信息的数据库受到危害时,如何将附加到哈希值的盐帮助提高安全性。有人可以解释盐如何帮助存储散列密码?
如果盐是,例如,“你好”,并追加到密码“密码”,则盐和密码被存储在一起,“hellopassword”和散列以产生:
94e66f94517d606d5ad6d9191b980408952f2ed2 (sha1)
与然后附加盐:
hello$94e66f94517d606d5ad6d9191b980408952f2ed2
这是如何更安全?攻击者知道盐,所以现在可以计算密码,没有多少额外的困难......对吧?或者我从根本上误解了什么?
您通常不会在sha1之后追加salt,就像您在示例中一样。相反,您可以将盐添加到密码“salt $ password”中,然后从'94e66f94517d606d5ad6d9191b980408952f2ed2'生成一个sha1。这样盐和密码就不会暴露在任何数据结构中。 – tidwall 2010-09-04 17:11:01
你会如何保持盐的秘密?你会把它作为程序中硬编码的秘密值吗? – 2010-09-04 17:14:55
没有必要保守盐的秘密 - 事实上,所有使用salt的Linux密码哈希方案(这是所有常见的哈希方案)都会像您所做的那样将salt加入哈希中。无论攻击者是否知道盐的含义,盐的主要工作(使彩虹桌不可行)都可以实现,并且使用密码存储它可以很容易地随意更换盐,而无需让所有用户重置密码。每个密码甚至可以有不同的盐分。 – cHao 2010-09-04 17:22:41