哪些算法最容易受到 GPU 驱动的密码破解程序的攻击?例如,我听说在 unix shadow 文件中使用的 md5crypt 不是 GPU 破解的最佳选择,因为它实际上是 md5 比原始密码使用 1,000 倍来获取哈希......
什么算法最好被GPU破解?
MD5 的数千次迭代使每个人的密码散列变得更加困难,无论使用的硬件类型如何。对于 GPU 而言,它不会让事情变得更糟。使 GPU(与通用 CPU 相比)更难的是任何使用大量 RAM 的东西:GPU 可以访问大量 RAM,但不能完全并行。
依赖于 32 位整数运算(算术和逻辑)的算法在 GPU 上非常有效地实现。这包括 MD5、SHA-1 和“小型”SHA-2(SHA-224 和 SHA-256)。SHA-384 和 SHA-512 使用 64 位操作,而 GPU 在这方面遇到了麻烦——因此,与基于 SHA-256 的函数相比,破解基于 SHA-512 的密码散列时,GPU 给您的提升较小。Bcrypt对一个 4 kB 的变异数组使用大量内存访问,GPU 会因此受到影响,以至于基本 CPU 可能比 GPU 更适合尝试破解 bcrypt 密码。理论上,scrypt对 GPU 的敌意更大。
这就是为什么 bcrypt 可以被视为比PBKDF2更好的密码散列选择(使用 SHA-1 等通用散列函数进行多重嵌套散列的标准方法)(有关详细信息,请参阅此答案)。尽管如此,即使对于巨大的 GPU,可配置的迭代次数也会使密码破解变得相当困难,而具有一百万次迭代的 PBKDF2/SHA-256 将比单次调用 SHA-512 更加安全。
只有当您可以并行执行大量操作时,GPU 才会很快。通过将单轮哈希的结果输入到另一次迭代中来进行哈希“拉伸”,因为盐肯定会使整个过程变慢。不仅默认情况下您可以执行 1000 轮 MD5,而且您不能并行执行它们,因为第 2 轮必须等待第 1 轮完成。
加盐密码是 GPU 破解的另一个“障碍”。如果您有一个没有盐的散列方案,则可以将计算出的散列与您尝试破解的所有不同散列进行比较。使用适当的盐(高熵),如果您计算哈希,您可以将其与刚刚用于计算哈希的相同盐的哈希进行比较。通常这只是一个,除非你很幸运(或者拥有大量密码或短盐),而且你可以将你的值与几个哈希值进行比较,而不仅仅是一个。
我还没有讨论过的 GPU 破解的另一个方面是单个密码破解与多个密码破解。长话短说,破解多个密码可能比您尝试破解一个密码要快得多,因为您使用的是正确的软件。因此,在您开始运行破解工作之前,请先对您的数据进行短期运行,观察速度。如果它比平时慢很多,您可能需要使用不同的程序,或调整参数以提高性能。