破解 2016 年 12 月 14 日宣布的雅虎黑客攻击中被盗的密码需要多长时间?

信息安全 哈希 密码破解 md5 雅虎
2021-08-14 06:15:41

显然,雅虎再次遭到黑客攻击,多达 10 亿个用户帐户遭到入侵。文章称雅虎使用 MD5 进行密码散列。

黑客也有可能破解密码吗?破解1个密码需要多长时间?难道破解10亿的时间,就只有1B*t吗?

4个回答

是的,他们很可能能够在短时间内破解许多密码。

来自雅虎官方声明

对于可能受影响的帐户,被盗的用户帐户信息可能包括姓名、电子邮件地址、电话号码、出生日期、散列密码(使用 MD5),在某些情况下,还包括加密或未加密的安全问题和答案。

MD5 是密码散列的一个有争议的 选择,因为它的速度使得破解 MD5 散列的密码非常快此外,它们可能没有加盐,因为雅虎肯定会让我们知道。(盐会有助于防止在开裂时使用彩虹表。)

当您将其与 2015 年泄露 3600 万个帐户的 Ashley Madison 漏洞进行比较时,您可以看到简单 MD5 哈希的缺点。在这种情况下,他们使用了带有 2 12 个密钥扩展轮的bcrypt ,而不是 Yahoo 的普通 MD5,这就是为什么当时研究人员在第一次尝试时只能破译 4,000 个密码。

来自文章:

在 Pierce 的案例中,bcrypt 将他的四 GPU 破解设备的速度限制为每秒 156 次猜测。[...] 与极其缓慢且计算要求高的 bcrypt 不同,MD5、SHA1 和大量其他散列算法旨在将轻量级硬件的压力降至最低。比如说,这对路由器制造商来说是好事,对饼干来说甚至更好。例如,如果 Ashley Madison 使用 MD5,Pierce 的服务器每秒可以完成 1100 万次1猜测,如果加盐的话,他可以在 3.7 年内测试所有 3600 万个密码哈希,如果不加盐,则只需 3 秒。 (许多网站仍然不加盐)。

因此,破解大部分雅虎密码只需几秒钟(而一些更强大的密码将保持不变)。确切的答案将取决于可用的计算能力和雅虎客户的密码安全意识。


1正如@grc 所指出的,每秒 1100 万次哈希似乎相当慢。@Morgoroth 链接的8x Nvidia GTX 1080 Hashcat 基准测试(MD5 总计为 200.3 GH/s)是更新测量的好资源。

(总结在最后一段。)

破解1个密码需要多长时间?是时候破解10亿了1e9 * t吗?

想象一下我有这个散列算法:

function hash(password):
    hash = 0
    foreach character in password:
        hash = hash + toNumber(character)
    return hash

如果你调用hash("ab")它可能会返回 3,因为第一个字符的数值可能是 1,第二个可能是 2,然后将它们相加,得到 3。

现在,如果您有一个充满数字的数据库,例如 583、140、8582 等,那么破解需要多长时间?

在此示例中,hash("ab")将导致 3 和hash("ba"),这称为冲突(两个输入映射到相同的输出)。在 md5 中,这不会那么容易发生。顺序很重要,您无法在给定输出的情况下得出有关输入的任何信息。连长度都没有。

因此,您必须尝试所有可能性,直到找到一种可以为您提供正确输出的可能性。如果有人有一个强大的、随机的、20 个字符的密码,它可能需要几个世纪的时间。但大多数人使用“horselover49”、“letmein”或“penis”之类的密码(尽管后者可能太短),这些密码更容易破解。

每个人都在抱怨使用 md5 的原因是它速度很快。但是散列算法的速度很快MD5 可能会因其他目的而被破坏,但不适用于密码散列。您只是不应该使用任何散列算法的单遍,无论是 md5 或 sha1 还是 sha512。

更好的算法,例如 bcrypt/scrypt/pbkdf2/等。使用散列算法一百万次(除其他外)。现在,您不必为每次猜测运行一次算法,而是需要为每次猜测运行一百万次。这需要更长的时间,允许您尝试更少的密码,从而更好地保护弱密码。

所以,是的,与使用 MD5 的其他违规行为一样,也会发生同样的情况:大量密码将被破解。但它们不会全部被破解,而且绝对不会在线性时间内被破解。更强的将花费成倍的更多时间。

请记住,开始从系统中获取可用密码的时间远少于找到任何特定用户密码的时间。选择一个密码,对其进行散列,找到密码散列到该值的所有用户(如果您之前将用户存储在由密码散列键控的散列表中,则速度非常快),重复。在这一大群用户中,几乎任何密码都有可能有人使用它,而普通/草率的密码将有很多人使用它们。

我们不知道没有额外的信息。

首先,有人说“他们使用了 MD5”。获取密码并使用 MD5 对其进行哈希处理非常非常快。如前所述,有些机器每秒可以进行 280 亿次密码猜测并计算 MD5 哈希码。那会很糟糕。但是,他们可能使用了多轮 MD5 散列。他们可能已经对密码进行了哈希处理,然后再对结果进行了数百万次哈希处理。现在可以猜出的密码数量和计算的哈希值“仅”为每秒 28,000 个。

其次,我们需要知道密码是否“加盐”。“加盐”密码意味着对于每个用户,密码中都添加了不同的“盐”。例如,如果我愚蠢地使用了密码 1234,而您愚蠢地使用了相同的密码,那么我们的“真实”密码可能是 k39fja0eflaei-1234 和 oe0vnda9afnlad-1234。所以即使我的密码被破解了,这也无助于破解你的密码。每个密码都必须单独破解。

使用无盐密码,如果十亿用户中的任何一个使用该密码,那么 28,000 次密码猜测中的每一次都会成功。因此,经过数十亿次猜测,所有更容易的密码都将被破解。使用加盐密码,需要数十亿次猜测只会让您获得一些简单的密码。但如果他们使用普通的 MD5,那么每秒 280 亿次密码猜测将很快破解,即使是加盐。