这些密码方案真正被打败的速度有多快?

信息安全 密码学 哈希
2021-08-31 10:39:59

如果您使用 MD5 或 SHA-1 之类的快速哈希算法对密码进行哈希处理,并且根本不使用任何盐,那么黑客能多快找到我的密码?

如果我为每个用户使用真正随机的盐,这会在多大程度上影响破解密码的时间长度?

我听说像 md5 或 sha-1 这样的散列算法可以非常快速且大规模地计算,所以你现在不应该将它们用于密码方案。但我知道有很多系统都在使用它们,我很想知道这些系统能以多快的速度被击败,或者这更像是一个理论问题,直到十年后才会真正存在. 我知道用户选择的密码在这里很重要,如果您可以在回复中使用它,那就太好了。

作为奖励,哪种散列算法使用起来最安全?

4个回答

假设您没有彩虹表(或其他预先计算的哈希列表),并且实际上需要进行暴力破解或字典攻击。

该程序IGHASHGPU v0.90声称能够在单个 ATI HD5870 GPU 上每秒执行大约 13 亿次 SHA-1 哈希(即超过 2^30)。

假设密码为 40 位熵,这需要 2^10 秒,也就是大约 17 分钟。

一个 44 位熵的密码(就像著名的 XKCD 漫画中的密码)需要 68 分钟(最坏的情况,平均情况是这个的一半)。

在多个 GPU 上并行运行会按比例加快速度。

因此,使用快速哈希进行暴力破解是一种真正的危险,而不是理论上的危险。 而且许多密码的熵要低得多,这使得暴力破解更快。

如果我为每个用户使用真正随机的盐,这会在多大程度上影响破解密码的时间长度?

假设攻击者知道盐本身,并且它本身并不会增加单个密码的破解时间(它可能会增加一点,因为散列数据变得更长一个块,但最多加倍工作)。

(独立随机)盐的真正好处是攻击者不能使用相同的工作同时攻击多个用户的密码。当攻击者只想要任何用户的密码(或“尽可能多的”),并且您有数百万用户时,即使所有用户都拥有强密码,没有盐也可以按比例减少攻击时间。当然不是所有人都会有。

作为奖励,哪种散列算法使用起来最安全?

当前的标准是使用散列算法。PBKDF2、bcrypt 或 scrypt 都将密码和盐作为输入和可配置的工作因子 - 将此工作因子设置为用户在使用服务器硬件登录时接受的最高值。

  • PBKDF2只是一个迭代的快速散列(即仍然有效地可并行化)。(这是一个可以与不同的基本算法一起使用的方案。使用您在系统中使用的任何算法。)
  • Bcrypt需要一些 (4KB) 工作内存,因此在每个处理器缓存少于 4KB 的 GPU 上实现效率较低。
  • 除了处理时间之外, Scrypt 还使用(可配置的)大量内存,这使得在 GPU 或定制硬件上并行化的成本非常高,而“普通”计算机通常有足够的 RAM 可用。

所有这些函数都有一个盐输入,你应该使用它

如果你不使用盐,黑客可以简单地将它们输入谷歌并很可能找到它。MD5 加密你的密码,然后谷歌搜索结果,你就会明白我的意思了。

如果您选择了一个足够复杂的密码,那么它可能不会出现在 Google 上,但它仍然会出现在称为“彩虹表”的预先计算的表中(完整的表会占用太多空间,所以“彩虹表”技术用于压缩它们)。

如果没有使用任何表,那么密码是否加盐都没有关系。当然,总是使用表,所以是的,你应该给密码加盐。

一台台式机,带游戏卡(也可以用来加速密码破解),计算十亿哈希/秒。破解密码的速度取决于您的密码。它可以在几分钟内计算出所有短密码组合。但是,问题是指数级的,因此它无法计算出长密码的所有可能组合,即使你在 10 亿年中使用了 10 亿台计算机。

相反,黑客所做的是“变异字典”破解。他们从一个众所周知的单词列表开始。它被称为“字典”,但这样的列表包含许多您在真正的字典中找不到的单词,例如“ncc1701”,即星际迷航企业号的名称。对于每个单词,它都会进行一些突变,例如将某些字母大写,将某些字母更改为数字,例如“p4ssw0rd”,或附加字符,例如“password1234”。这工作的速度取决于黑客选择正确字典和正确突变的技能。这也可能会根据黑客对您的了解而改变。例如,如果您是西班牙裔,黑客会将西班牙语单词和名称添加到字典中。

您可以预期,如果您的密码数据库被盗,黑客将能够通过几天的工作破解大约一半的加盐密码。

好吧,如果您只是使用不含盐的 MD5 或 SHA-1,只需下载彩虹表并立即破解。

可以在此处找到关于彩虹表的主题,以及它们如何利用比在固定盐的情况下强制使用一个密码更好的效率。

实际生成彩虹表需要多长时间?

除了前两个(适用于任何无盐或固定盐的哈希)之外,MD5 还有很多安全漏洞(减少破解密码的时间)。

http://en.wikipedia.org/wiki/MD5

这张幻灯片描述了在 1 年内破解密码需要多少硬件投资:

它比较了不同轮数的各种 KDF,包括 MD5、PBKDF2、bcrypt、scrypt。

在此处输入图像描述