我一直在看到使用 bcrypt 对密码进行哈希处理的建议,因为它能够跟上摩尔定律。
显然,这是因为攻击者破解 bcrypt 散列所需的时间比 SHA256 等通用散列函数生成的散列要长得多。
这怎么可能?尽管有摩尔定律,算法怎么会故意变慢呢?
攻击者会想要尝试所有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 个月翻一番。
现在bcrypt违反了摩尔定律。
将成本系数从12增加到13,这将使所涉及的时间增加一倍。