首页 > 解决方案 > 为什么 BCrypt 对彩虹表特别有效?

问题描述

如果有人拥有 BCrypt 的加密功能,并加密密码字典并将其存储在 cd 上。获取对数据库中散列密码的访问权限,他们不应该能够吗?

我希望答案是否定的。如果是这样,为什么不呢?

标签: encryptionhashbcryptverification

解决方案


Bcrypt 与其他 PBKDF 函数一样,包括加盐和拉伸。加盐意味着它在密码中添加了一些额外的随机数据。盐是公开的。因此,例如,如果我的 salt 是“f588d29a”,而我的密码是“password”,那么我实际上要散列的是“f588d29apassword”(这并不是 bcrypt 的确切做法,但它是等价的)。

加盐后,您将进行散列(稍后再进行),输出将是:“f588d29a, hash ”。所以盐和哈希是众所周知的。但是现在包含“密码”的彩虹表没有任何用处。你需要“f588d29apassword”和“aaaaaaaapassword”和“aaaaaaabpassword”还有......很多密码散列。因此,这大大增加了您需要的时间和空间。更长的盐可以使攻击者的攻击变得非常困难,而防御者的成本却很低。这是使彩虹表基本无用的部分。即使我发现多个人使用相同的密码,他们的哈希值也会不同,所以我的表也无济于事。

bcrypt(和其他 PBKDF)的后半部分是拉伸的,这意味着执行散列函数是时间密集型的。我们通常说的是几十毫秒,所以这对人类或一个哈希来说并不是什么大问题,但它使密码猜测变得更加昂贵。


推荐阅读