这在小型超级计算机上是否实用?

时间:2011-06-25 01:47:22

标签: java supercomputers

我正在调查WEP,作为其中的一部分,我正在使用RC4算法。我正在试图决定是否可以写一个反表(虽然很大......我没有空间,我不打算写一个)。为此,我决定检查前10个字节中有多少匹配输出。这将有助于我决定逆表的工作情况。

当然,64位RC4加密有2 ^ 64个可能的密钥,因此这意味着进行~2 ^ 128比较。另外,每次比较必须生成10个字节,大约265个循环。 (RC4初始化为256,字节本身为10)。

开展业务:

在拥有大约100个核心的超级计算机上,是否可以在20天内执行大约2 ^ 135次计算?

(20天是限制,直到我开始。我最终只有8,或者我最终会有400+,但我猜的是100个核心。)

如果它意味着什么,我的程序是用Java编写的。 http://pastie.org/2118864

5 个答案:

答案 0 :(得分:4)

理想的世界中,它围绕着:

2 135 操作÷20天÷24小时/天÷60分钟/小时÷60秒/分钟÷100芯= 10 32 假设我的数学没有关闭,每核心每秒的操作数(Hz /核心)。

您需要10个 32 Hz内核,每个时钟执行计算。通常,它需要多个。那个......目前还不是很容易达成,至少可以这么说。如果你很幸运的话,用超级计算机达到的最佳值可能在~10 GHz = 10 10 Hz / core的一般区域附近。

(这都是忽略Amdahl's law ...)

答案 1 :(得分:4)

有趣的问题,很难正确回答。可扩展性是大多数时候“尝试和看到”事物之一。

有一点需要注意的是,由于其他因素,you're going to get less-than-linear scaling with multi-core systems

假设您的程序每秒可以比较n个密钥。因此,理想的(即线性)100核系统将每秒计算100n个密钥。要比较所有密钥(最糟糕的情况,现实情况只有一半)需要(2^135/100n)/86400天。

如果n为1000,则需要5041220250680569829087031221211天,这比宇宙年龄估计的时间长约10亿次。

所以我要说......没有:)密码算法是针对这类攻击而设计的。此外,Java是编写此类应用程序时要选择的最后一种语言:p

答案 2 :(得分:3)

这些数字有些虚构。他们主要是为了说明问题。数学过于乐观,使其变得更容易。

  1. 单核可以每秒处理40亿(2 32 )操作(这是非常乐观的数字)

  2. 因为每天有86400秒(最多2个 17

  3. 和20天(最多2 5

  4. 和100个核心(最多2个 7

  5. 然后...... 2 32 * 2 17 * 2 5 * 2 7 == 2 < sup>(32 + 17 + 5 + 7) == 2 61 计算......所以:

    没有机会。甚至没有远程关闭。剩余的计算量如此惊人我甚至无法理解它究竟是什么。对不起: - )

    (上述数字需要2 79 天......)

答案 3 :(得分:3)

人们没有意识到一个数字有多大。

2 ^ 135大约是4e40,好的,43556142965880123323311949751266331066368。

假设您的计算机能够执行1次exaflop,速度远远超过我们现有的任何速度。因此,如果它能够在每个浮点运算中进行这些计算之一,那么它可以在一秒钟内完成10 ^ 18个计算。这仍然需要4e22秒。每年大约有31536000秒,因此您的小企业仍需要超过1年的时间。

好的,根据你与谁交谈,宇宙大概在6000岁之间,大约130亿年左右。

Java与否,答案是否定的。 (天网在这吗?)

答案 4 :(得分:1)

宇宙中至少有2 ^ 240个原子,所以即使每天计算一次,你甚至不需要其中一半来计算它们。再说一遍,比尔盖茨曾经说过“谁需要宇宙中超过一半的原子?”