我读过几次书,存储密码时,对字符串进行“双散列”是一个很好的做法(例如,使用md5然后使用sha1,显然都使用了盐)。
我想第一个问题是,“这实际上正确吗?” 如果不是,那么请忽略此问题的其余部分:)
我问的原因是,从表面上看,我会说这是有道理的。但是,当我考虑它时,每次重新哈希(可能添加了一些东西)时,我所看到的就是最终“唯一性”的上限减小了……该界限与初始输入。
让我换一种说法:我们有x个字符串,这些字符串经过哈希处理后减少为y个可能的字符串。也就是说,第一组中有碰撞。现在从第二组返回到第三组,是否不可能发生同一件事(即,所有可能的“ y”字符串组中的冲突导致第三组出现相同的哈希)?
在我的脑海中,我看到的只是每个哈希函数调用的“漏斗”,将无限的可能性“漏斗”到有限的集合中,依此类推,但是显然每个调用都在它之前的有限集合上进行,给了我们一个设置不大于输入。
也许有一个例子可以解释我的漫步?取'hash_function_a',它将给'a'和'b'哈希值'1',并将给'c'和'd'哈希值'2'。使用此功能存储密码,即使密码为“ a”,我也可以使用密码“ b”。
取'hash_function_b',它将为'1'和'2'提供哈希值'3'。如果我将其用作“ hash_function_a”之后的“第二哈希”,那么即使密码为“ a”,我也可以使用“ b”,“ c”或“ d”。
最重要的是,我知道应该使用盐,但是它们并没有真正改变我们每次将“ x”输入映射到“小于x”输出的事实。我不认为
有人可以告诉我我在这里想念什么吗?
谢谢!
编辑:对于它的价值,我自己不做,我使用bcrypt。而且我并不真正担心它对于“黑客”的“耗尽周期”是否有用。我真的只是想知道从哈希冲突的角度来看,该过程是否会降低“安全性”。
MD5(password)
。我们说这是不安全的,所以他们建议MD5(MD5(password))
改用...