为什么 BCrypt 对彩虹表特别有效?

Jon*_*bek 2 encryption verification hash bcrypt

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

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

Rob*_*ier 10

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

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

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