Php 解释bcrypt';s功能

Php 解释bcrypt';s功能,php,hash,cryptography,salt,bcrypt,Php,Hash,Cryptography,Salt,Bcrypt,我正在研究在PHP中使用bcrypt的哈希和salt密码。 有人能给我解释一下为什么brcypt使用“工作”/“回合”来防止攻击吗 我已经读过“”,但我很难理解,如果有人掌握了您的数据库并可以脱机破解它,那么它有什么特别之处 是否可能由salt和hash共同保护数据库免受rainbow表的攻击?或者bcrypt是否做了一些特殊的事情来帮助防止这样的攻击?简单地说,bcrypt比其他一些散列算法(如sha系列)更“优秀”,因为它故意变慢,并且可以通过使用高迭代次数故意变慢。此外,它还需要使用一种盐

我正在研究在PHP中使用bcrypt的哈希和salt密码。 有人能给我解释一下为什么brcypt使用“工作”/“回合”来防止攻击吗

我已经读过“”,但我很难理解,如果有人掌握了您的数据库并可以脱机破解它,那么它有什么特别之处


是否可能由salt和hash共同保护数据库免受rainbow表的攻击?或者bcrypt是否做了一些特殊的事情来帮助防止这样的攻击?

简单地说,
bcrypt
比其他一些散列算法(如
sha
系列)更“优秀”,因为它故意变慢,并且可以通过使用高迭代次数故意变慢。此外,它还需要使用一种盐来防止使用预先计算的哈希值(彩虹表)。salt值应与bcrypt的每个输出一起生成/存储,以禁止不同用户的值之间进行比较(如果他们使用相同的密码)


即使攻击者获得了您的密码哈希和盐,只要您使用的
bcrypt
使用了大量迭代,就不可能快速找到匹配的密码。这是一个单向函数,因此您需要为每个尝试的密码执行一次bcrypt计算。这当然是对坏密码的一点保护。

简而言之,bcrypt和其他密码拉伸算法都是关于工作放大的。攻击者破解密码所做的工作要比您所做的多得多(因为您通常只会以更低的速率获得有效的登录请求或错误的密码);因此,每增加一毫秒密码散列时间,攻击者就要多付一百万或十亿倍的费用。Bcrypt和其他算法只是故意放慢速度,使攻击者花费更多时间尝试破解密码。

我对这个答案做了一些重要更改:算法是已知的/静态的。使用的硬件不会改变bcrypt的结果。bcrypt只依赖于迭代计数的速度;在专用硬件/软件平台上,bcrypt计算可能要快得多。请记住,虽然答案的要点是正确的,但更详细的信息肯定不是。