bcrypt iterations/cost 参数的安全性
Security of bcrypt iterations/cost parameter
事实 A. 根据鸽巢原理,即使 none 被发现,每个哈希函数都有无限次冲突。
事实 B. 重新散列哈希,如 hash(hash(password)) 并不比 hash(password) 更安全,实际上 hash(hash(password)) 会引发冲突攻击哈希(密码).
事实 C。基于 B,通过增加迭代,我们达到了大多数密码和盐将 return 相同的常量哈希值的程度。我的意思是碰撞的概率会很高,甚至是 100%。
事实 D. bcrypt 有一个 iteration/cost 参数,我们可以根据我们的硬件规格随时间增加该参数。
那么,结合这些事实,我们是否可以说,随着 bcrypt 成本值的增加,我们通过增加碰撞概率来降低安全性?
如果答案是 "no",为什么?
BCrypt 不会进行愚蠢的迭代,它在每次迭代中都包含原始密码和盐。 PBKDF2 也是如此,它在每次迭代中都使用 HMAC。看看 BCrypt 的 pseudo code。
illustrative answer关于信息安全关于迭代散列冲突的影响。在实践中,据我所知,冲突对于密码散列来说并不是真正的问题,即使在迭代时也是如此。
事实 A. 根据鸽巢原理,即使 none 被发现,每个哈希函数都有无限次冲突。
事实 B. 重新散列哈希,如 hash(hash(password)) 并不比 hash(password) 更安全,实际上 hash(hash(password)) 会引发冲突攻击哈希(密码).
事实 C。基于 B,通过增加迭代,我们达到了大多数密码和盐将 return 相同的常量哈希值的程度。我的意思是碰撞的概率会很高,甚至是 100%。
事实 D. bcrypt 有一个 iteration/cost 参数,我们可以根据我们的硬件规格随时间增加该参数。
那么,结合这些事实,我们是否可以说,随着 bcrypt 成本值的增加,我们通过增加碰撞概率来降低安全性? 如果答案是 "no",为什么?
BCrypt 不会进行愚蠢的迭代,它在每次迭代中都包含原始密码和盐。 PBKDF2 也是如此,它在每次迭代中都使用 HMAC。看看 BCrypt 的 pseudo code。
illustrative answer关于信息安全关于迭代散列冲突的影响。在实践中,据我所知,冲突对于密码散列来说并不是真正的问题,即使在迭代时也是如此。