【问题标题】:Why is BCrypt specifically effective against rainbow tables?为什么 BCrypt 对彩虹表特别有效?
【发布时间】:2018-11-22 08:59:41
【问题描述】:

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

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

【问题讨论】:

  • 看看什么是盐。

标签: encryption hash bcrypt verification


【解决方案1】:

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

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

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

【讨论】:

  • 另一种观点:如果每个密码都有自己的盐,彩虹表只会找到这个单一的密码,因为彩虹表是为这个特定的盐构建的。但是,仅仅为了找到一个密码而构建整个表是没有意义的,因为暴力破解更快。
  • 拉伸主要是为了阻止暴力攻击。如果处理密码需要 1/20 秒,那么普通用户不会注意到轻微的延迟。然而,暴力攻击者每处理器每秒只能尝试 20 次密码猜测。这会增加攻击的时间和/或成本。
  • 同意@rossum。我讨论了拉伸,因为它是 bcrypt 的一部分,但我并不是要暗示它与彩虹表有关。单独腌制就足以击败彩虹桌(不仅仅是阻止它们;足够的腌制会使桌子变得无用)。正如 rossum 所说,拉伸旨在阻止暴力攻击。
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 2012-11-13
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
相关资源
最近更新 更多