5

我一直在看到使用 bcrypt 对密码进行哈希处理的建议,因为它能够跟上摩尔定律。

显然,这是因为攻击者破解 bcrypt 散列所需的时间比 SHA256 等通用散列函数生成的散列要长得多。

这怎么可能?尽管有摩尔定律,算法怎么会故意变慢呢?

4

2 回答 2

5

bcrypt可以使用称为“工作因子”的参数进行配置。在内部,它将连续多次执行类似于散列的操作。“多”是可以配置的部分,最多几十亿。因此,为了应对摩尔定律,只需提高该设置即可。PBKDF2(参见“迭代计数”参数)是另一个可以随心所欲地变慢的函数。

请注意,使密码散列变慢的目的是让攻击者感到困难,但它也机械地使“诚实系统”的事情变慢;这是一个权衡。有关更多详细信息,请参阅此答案(在 security.stackexchange 上)。

于 2011-09-17T14:02:46.947 回答
5

攻击者会想要尝试所有216,553 个英文单词

再加上 12 位常见变体的努力,可以说给出了 887,001,088 (2 29 ) 个可能的密码列表。

BCrypt 大约需要4,342,912(即 2 22)次操作来计算一个哈希值(成本=12)

今天的核心提供大约 2 31个周期/秒;最先进的技术是每个处理器 8 = 2 3 个内核,总共 2 3 * 231 = 2 34个周期/秒。服务器通常有 4 个处理器,总数增加到 2 2 * 2 34 = 2 36个周期/秒。2 22个周期来计算一个哈希 * 2 29个可能的(通用)密码 = 2 51个周期来运行所有(通用)密码。

这意味着它需要一个 4 处理器、八核服务器大约 2 51 / 2 36 = 2 15秒(9 小时)来运行所有常见密码。

实际上,我的密码并不常见,大约使用 44 位。2 44 个密码 * 2 22个周期每个密码 = 2 66个周期来尝试所有不常见的密码。2 66 / 2 36周期/秒 = 2 30秒(34 年)找到我的密码。

摩尔定律说,处理能力每 18 个月翻一番。

  • 今天:34年找到我不常见的密码
  • 1.5年:17年
  • 3年:8.5年
  • 4.5:4.25年
  • 6 年:2.125 年
  • 7.5年:1年
  • 9岁:6个月
  • 10.5岁:3个月
  • 12 岁:6 周
  • 13.5 岁:3 周
  • 15岁:10天
  • 17.5岁:5天
  • 19岁:63小时
  • 20.5 岁:31 小时

现在bcrypt违反了摩尔定律。

成本系数从12增加到13,这将使所涉及的时间增加一倍。

于 2012-10-09T13:32:48.453 回答