为了使专门的硬件更难以定位哈希,我直观地认为混合一组不同的哈希算法应该提供额外的强度。为简单起见,我们假设, is和isHash1
的迭代次数:SHA256
Hash2
bcrypt
Hash3
scrypt
myhash = Hash1(Hash2(Hash3(0, password, salt), password, salt), password, salt)
假设Hash1
、Hash2
和Hash3
每个在典型用户的硬件上计算需要 1/3 秒,为什么似乎更倾向于使用
myhash = Hash1(Hash1(Hash1(0, password, salt), password, salt), password, salt)
编辑:将 short format 更改Hash1(Hash1(Hash1(password ^ salt)))
为更准确的 format Hash1(Hash1(Hash1(0, password, salt), password, salt), password, salt)
,以避免仅指出与前一种格式冲突数量较多的答案。只要剩余的熵myhash
(~256 - x 由于碰撞,x 接近 0)明显高于用户密码的熵,冲突就不是用户密码散列的一个因素。除非由密码生成器选择,否则用户的密码几乎总是少于 60 位的熵。