谁能给我一个想法?假设盐是已知的。
例如,如果我有一个在 MD5 和 bcrypt 中散列的 $k$ 字符长密码,有没有办法估计在 bcrypt 和 MD5 中暴力破解需要多长时间?
我知道这是一个模糊的问题,取决于许多因素,但请随意假设您想要的任何因素。只是想对差异有一个直观的感觉。
谁能给我一个想法?假设盐是已知的。
例如,如果我有一个在 MD5 和 bcrypt 中散列的 $k$ 字符长密码,有没有办法估计在 bcrypt 和 MD5 中暴力破解需要多长时间?
我知道这是一个模糊的问题,取决于许多因素,但请随意假设您想要的任何因素。只是想对差异有一个直观的感觉。
Bcrypt使用可配置的迭代计数,因此您的问题的答案是:无论您想要它是什么。
如果迭代计数使得一次 bcrypt 调用与 MD5 的 10 次计算一样昂贵,那么使用 bcrypt 暴力破解密码的成本将是使用 MD5 的 10 倍。
如果迭代次数是这样的一个bcrypt调用是一样贵10个百万MD5的计算,那么暴力破解密码将是10万次使用bcrypt比MD5更加昂贵。
这就是具有可配置的慢度的意义:您可以根据需要使功能变慢。或者,更准确地说,尽可能慢:事实上,一个慢的函数对每个人来说都是慢的,无论是攻击者还是防御者。
另一个因素是,从本质上讲,bcrypt 对 GPU 优化非常不利。这是由于算法中使用的操作类型。相比之下,MD5 很容易在 GPU 上实现和高效运行。这意味着攻击者在破解受 MD5 保护的密码时可能会从 GPU 中获得显着提升;而使用 bcrypt 时,他将需要使用与防守方相同类型的 CPU。有关更多详细信息,请参阅此答案。
如果我们想要一些现实的数据:使用好的 GPU(现成的,几百美元),MD5 速度可以达到每秒 100 亿个实例(参见那里的基准;机器高达 930 亿每秒包含 8 个 GPU)。但是,使用 bcrypt,习惯上会增加迭代次数,以便每次散列在您的服务器上花费 0.1 秒。攻击者无需购买 GPU,而是购买(或租用)几个多核 CPU,并且能够尝试每秒 100 个密码。有了这些数字,可以说 bcrypt 将使密码比 MD5 强1 亿倍。