PHP 的 password_hash() BCRYPT 成本因子如何转化为破解计算时间

信息安全 哈希 php bcrypt 密码破解
2021-08-18 07:57:20

我试图完全理解BCRYPT's因素之间的关系,以及机器使用 PHP 5.5 的password_hash()COST破解密码需要多长时间

我在普通服务器上观察到 password_hash() 的加密时间是:

COST 14 takes 1.23s to 2s
COST 13 takes 0.6 to 1s
COST 12 takes about 0.3s
COST 11 takes about 0.15s
COST 10 takes about 0.08s
COST 09 takes about 0.04s
  1. 轮数是否与所用时间成线性比例?

  2. 破解密码所需的计算时间是相同的线性比例还是指数?

例如,如果 COST 10 哈希需要 1 分钟才能破解。对于相同的密码,我们需要花费多少时间使用 COST 14?我认为这会因密码熵而异。因此,让我们以平均相当弱的 10 个字母密码(例如“EasyCrack1”)作为推理的基础。

1个回答

正如crypt() 函数页面中间接记录的那样,该cost参数是迭代计数的以 2 为底的对数,或者换句话说,每增加 1cost表示迭代次数加倍。

如果一个 cost-10 的哈希需要一分钟来破解,一个 cost-14 将需要 2^(14-10) = 16 分钟。破解像 bcrypt 这样的密码散列包括猜测密码是什么,对其进行散列,并查看散列是否匹配,因此破解难度与散列时间成正比。就像将成本增加 1 会使散列时间加倍一样,它也会使破解散列所涉及的工作量加倍。