我正在研究在 PHP 中使用 bcrypt 的哈希和加盐密码。有人可以向我解释为什么brcypt 使用“工作”/“回合”来防止攻击吗?
我已经阅读了“如何使用 bcrypt 在 PHP 中对密码进行哈希处理? ”,但我很难理解如果有人掌握了您的数据库并可以离线破解它,是什么让它如此特别?
是否可能由盐和哈希共同保护数据库免受彩虹表的影响?或者 bcrypt 是否做了一些特别的事情来帮助防止这样的攻击?
我正在研究在 PHP 中使用 bcrypt 的哈希和加盐密码。有人可以向我解释为什么brcypt 使用“工作”/“回合”来防止攻击吗?
我已经阅读了“如何使用 bcrypt 在 PHP 中对密码进行哈希处理? ”,但我很难理解如果有人掌握了您的数据库并可以离线破解它,是什么让它如此特别?
是否可能由盐和哈希共同保护数据库免受彩虹表的影响?或者 bcrypt 是否做了一些特别的事情来帮助防止这样的攻击?
简而言之,bcrypt
它比其他一些哈希算法(如sha
家庭)“更好”,因为它故意变慢并且可以通过使用高迭代次数故意变慢。此外,它需要使用防止使用预先计算的哈希值(彩虹表)的盐。盐值应该与 bcrypt 的每个输出一起生成/存储,以禁止不同用户的值之间的比较(如果他们使用相同的密码)。
即使攻击者获得了您的密码哈希和盐,只要您使用的bcrypt
是大量迭代,就无法快速找到匹配的密码。这是一个单向函数,因此您需要为每个尝试的密码执行一次 bcrypt 计算。当然,这对防止密码错误的保护作用不大。
简而言之,bcrypt 和其他密码拉伸算法都是关于工作放大的。攻击者必须做比您更多的工作来破解密码(因为您通常只会收到有效的登录请求或错误的密码,而且比率要低得多);因此,您每增加一毫秒的密码哈希时间,您的攻击者就必须支付一百万或十亿倍的费用。Bcrypt 和其他算法只是故意放慢速度,使攻击者花费更多时间尝试破解密码。