我读过 GPU 可以用于暴力攻击?但是如何做到这一点,是否需要任何其他硬件设备(例如硬盘)?
注意:我对 Web 应用程序安全性更感兴趣,但我不想蒙蔽双眼。如果我的问题对你来说很荒谬,我很抱歉,但我的硬件背景不是很好。我只知道基本组件如何协同工作以及如何组合它们。
我读过 GPU 可以用于暴力攻击?但是如何做到这一点,是否需要任何其他硬件设备(例如硬盘)?
注意:我对 Web 应用程序安全性更感兴趣,但我不想蒙蔽双眼。如果我的问题对你来说很荒谬,我很抱歉,但我的硬件背景不是很好。我只知道基本组件如何协同工作以及如何组合它们。
人们在这里给出了很好的答案,直接回答了你的问题,但我想给出一个补充答案,以更深入地解释为什么 GPU 对这个和其他应用程序如此强大。
正如一些人所指出的,GPU 专门设计用于快速进行数学运算,因为在屏幕上绘制东西都是数学运算(绘制顶点位置、矩阵操作、混合 RBG 值、读取纹理空间等)。然而,这并不是性能提升背后的主要驱动力。主要驱动力是并行性。高端 CPU可能有 12 个逻辑内核,而高端 GPU可能会打包 3072 之类的东西。
为简单起见,逻辑内核的数量等于可以针对给定数据集进行的并发操作的总数。例如,我想比较或获取两个数组的值的总和。假设数组的长度是 3072。在 CPU 上,我可以创建一个具有相同长度的新空数组,然后生成 12 个线程,这些线程将以等于线程数 (12) 的步长遍历两个输入数组和同时将值的总和转储到第三个输出数组中。这总共需要 256 次迭代。
然而,使用 GPU,我可以从 CPU 将这些相同的值上传到 GPU,然后编写一个内核,该内核可以同时针对该内核生成 3072 个线程,并在一次迭代中完成整个操作。
这对于处理本质上可以支持以可并行化方式“处理”的任何数据都很方便。我想说的是,这不仅限于黑客/邪恶工具。这就是为什么GPGPU正变得越来越流行,诸如 OpenCL、OpenMP 之类的东西应运而生,因为人们已经意识到,当 PC 中有一个巨大的发电厂,相比之下几乎没有使用时,我们的程序员正在让我们可怜的小 CPU 陷入困境。这不仅仅是为了破解软件。例如,有一次我编写了一个精心设计的 CUDA 程序,该程序记录了过去 30 年的乐透历史,并计算了所有可能数字的各种组合的彩票的奖/赢概率,每张彩票的游戏次数各不相同,因为我认为这样更好想法而不是使用这些伟大的技能来获得一份工作(这是为了笑,但遗憾的是也是如此)。
虽然我不一定赞同做这个演示的人,但这个演示给出了一个非常简单但相当准确的说明,说明为什么 GPU 对于任何可以并行化的东西都如此出色,尤其是没有任何形式的锁定(它会阻止其他线程,大大降低了并行性的积极影响)。
您不需要任何其他设备,只需要合适的 GPU 和软件。例如,cRARk可以使用您的 GPU 来暴力破解 rar 密码。oclhashcat可以使用你的 GPU 来暴力破解很多东西。
为什么GPU的破解速度比CPU快得多?因为破解是可以并行运行的(您可以使用每个内核同时尝试不同的密码)并且GPU 有很多可以并行使用的内核。
例如:GeForce GTX980 Ti,这是一款高端 GPU,拥有2816 个核心。虽然没有 PC CPU 有超过16 核(我知道的最高的是72 核,但用于超级计算和服务器目的)。
但是为什么与 GPU 相比,CPU 的内核数量很少呢?他们不能制造具有大量内核的CPU吗?当然可以,但没有好处。因为通常不可能像图形一样并行处理。很多软件必须顺序处理,即使可以并行处理,编写并行处理的软件也不常见,因为这对开发人员来说更难。
见下图:
假设平均 %50 的处理可以并行化,那么 16 核的加速比只有 2 倍。因此,增加核心数量对 CPU 的回报非常递减。
在工作中,我们有专门的服务器来解决“计算困难的路由问题”。每台主机的规格都相当好,有四个插槽和四核至强,因此还有 16 个物理内核和 HT。称之为 32 核。
每个盒子都有一个 PCIe 扩展机箱,里面有多个更高端的 NVidia GPU,以及为它们供电的大型 PSU。由于每张显卡都有大约 2000 个 CUDA 内核,因此每台主机大约有 30,000 个 CUDA 内核。
因此,如果我们手动将 CUDA 核心称为 CPU 核心,则该服务器与在普通 CPU 上运行的一千台服务器相同。因为 CUDA 核心在某些任务上不擅长,但在其他方面非常擅长。
想象一下通过枚举所有可能的路线并选择最佳路线来解决旅行商问题。或者列举当前棋盘中所有可能的棋步,然后选择最有可能为下一步棋带来成功的单步棋。
当所有可能的答案都被计算出来后,就不需要任何讨厌的启发式方法了!这就是暴力攻击的定义。