密钥扩展算法与密码限制 "hashing"

Key stretching algorithms vs throttling for password "hashing"

为什么人们建议使用像 bcrypt/pbkdf2 这样需要更长计算时间(故意)的密钥拉伸算法,而不是使用速度更快的算法,这些算法也是安全的,例如 salted sha-256 或 sha-512 和使用节流机制来限制暴力攻击?

节流不受 CPU 约束,并且会为暴力攻击提供相同的 "delay",同时对于普通用户来说速度仍然很快。另一方面,bcrypt/pbkdf2 受到 CPU 约束,并且总是很慢。

当您使用密钥扩展时,您就可以为攻击者从您的数据库中窃取哈希值的情况做好准备。然后,攻击者可以开始 离线攻击 并以其 GPU/CPU 的全速暴力破解密码。

只有计算哈希的绝对必要代码才是重要的,因为所有其他代码(如节流)都可以简单地省略。要设置每个哈希的最短时间,您必须使问题本身难以解决。这就是密钥拉伸,没有比计算所有轮次哈希更便宜的方法来获得可比较的哈希。

像BCrypt/SCrypt这样的一些算法是额外设计的,所以它们很难用GPU解决。