我们都知道我们应该采用相当慢的散列算法,对密码进行加盐,并运行散列进行多次迭代。假设我几乎遵循除了一条规则之外的所有内容,并且我有一个静态盐。像这样的东西:
password = 'yaypuppies' + some_static_salt
1000.times do
password = amazing_hash(password)
end
现在password
是一个伟大的哈希和盐渍的东西。世界一切安好。
但是如果我们运行它更多的迭代呢?
3000000000000000000.times do # 3 quintillion
password = amazing_hash(password)
end
理论上,许多密码会发生冲突吗?即这会发生吗?
pass1 -> lkajsdlkajslkjda > 23oiuolekeq > n,mznxc,mnzxc > common_thing > 987123oijd > liasjdlkajsd > 09893oiehd > 09uasodij
pass2 -> loiuoklncas > 9830984cjlas > ioasjdknckauyieuh > common_thing > 987123oijd > liasjdlkajsd > 09893oiehd > 09uasodij
两个密码最终都散列到09uasodij
?
使用非随机密码盐,每次添加的迭代都会增加冲突的可能性吗?