为什么你会选择减慢密码哈希的计算速度?
减慢密码哈希计算的目的是什么?
计算被故意放慢,以使攻击者更难暴力破解用户密码,以防密码数据库被盗等情况。
因为散列函数只能以“一种方式”工作,所以要获取散列的密码,您必须对随机密码进行散列,直到找到具有匹配散列的密码。(彩虹表提供了一个权衡)。
使用 GPU 可以暴力破解每秒数十亿,例如 MD5 哈希值。
这就是为什么像bcrypt或scrypt这样的哈希函数被开发来通过缓慢运行来缓解这个问题,并且在 scrypt 需要大量内存的情况下,因此使用 GPU 计算哈希是不可行的。
对于您的“普通”应用程序,这很可能仍然足够快,因为您只计算单个哈希,因此性能影响可以忽略不计。
可能让您感到困惑的是,它并没有更清楚......计算根本没有减慢!
也就是说:没有“更快”的方式被故意忽略(不是我们所知道的);算法中没有人为的“等待”。
相反,计算被设计为缓慢的。或者内存密集型。或者更好的是,两者兼而有之。除了漫长而曲折的道路之外,没有其他道路可以得到结果。
这样,一次计算(正确密码的计算)仍然非常非常快。对于诚实的用户来说,没有任何明显的变化。十分之一秒或十亿分之一秒似乎差别不大。
但是10 亿次计算(在 10 亿个候选者中找出哪个是正确的密码 - 实际上还有很多很多)将非常缓慢,这保证了对所有可能密码的“蛮力”检查注定会失败。
因此,如果我们有一个太快的散列算法,我们不需要它的第一次迭代,而是它的(比如说)百万分之一。如果安全的话。希望没有办法(我们知道)直接跳到第 100 万个结果;你必须把它们全部计算出来。如果这不能做到——如果迭代可以“短路”以更快地得到答案——那么我们说算法不安全(足够)。
密码哈希是一种计算速度较慢的计算,因为如果密码哈希泄露,它会显着减慢攻击者试图找到明文密码的速度。
如果密码哈希的计算速度很慢,那么暴力破解密码会变得非常非常慢,这将在大数据集或猜测次数上加起来。如果需要更长的时间,您将获得更多的时间来处理违规行为。