有没有办法执行分布式(如在连接的计算机集群中)基于CUDA / openCL的字典攻击?
例如,如果我有一台带有一些NVIDIA卡的计算机与另一台耦合计算机共享字典攻击的负载,从而在那里使用第二组GPU?
我们的想法是确保可扩展性选项,以便将来扩展,而无需替换我们正在使用的整套硬件。 (让我们说云不是一种选择)
答案 0 :(得分:1)
这是一个简单的主/从工作委托问题。主工作服务器将任何连接从属进程分发给一个工作单元。奴隶在一个单位上工作并排队一个单位。当他们完成一个单元时,他们会向服务器报告。经过详尽检查的工作单位用于估算每秒的操作数。根据您的设置,我会将工作单位调整到15-60秒范围内的某个位置。任何未通过10分钟标记得到响应的东西都会被回收到队列中。
对于排队,提供当前未崩溃哈希列表,要检查的词典范围以及要应用的排列规则。主服务器应该能够调整每台机器和每个排列规则集的队列,以便所有机器在一分钟左右的时间内完成工作。
或者,如果每个工作单元的大小相同,编码可以更简单。即使这样,任何机器的闲置时间都不会超过最慢机器完成一个工作单元的时间。调整工作单元的大小,以便最快的机器不会进入资源不足的情况(不应该完成超过五秒的工作,应始终排队第二个单元)。使用这种方法,希望您最快的机器和最慢的机器不会超过100倍。
答案 1 :(得分:0)
在我看来,编写自己的服务会很容易做到这一点。
超级简易设置
假设您有一些支持GPU的程序X,它将哈希值h作为输入并使用字典单词列表D,然后使用字典单词来尝试破解密码。使用一台机器,您只需运行X(h,D)。
如果您有N台机器,则将字典拆分为N个部分(D_1,D_2,D_3,...,D_N)。然后在机器i上运行P(x,D_i)。
这可以使用SSH轻松完成。主机将字典拆分,使用SCP将其复制到每个从机,然后连接到从机并告诉它们运行程序。
稍微更智能的设置
当一台机器破解密码时,他们可以轻松通知主人他们已完成任务。然后主人杀死在其他奴隶上运行的程序。