我正在调查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
答案 0 :(得分:4)
在理想的世界中,它围绕着:
2 135 操作÷20天÷24小时/天÷60分钟/小时÷60秒/分钟÷100芯= 10 32 假设我的数学没有关闭,每核心每秒的操作数(Hz /核心)。
您需要10个 32 Hz内核,每个时钟执行单计算。通常,它需要多个。那个......目前还不是很容易达成,至少可以这么说。如果你很幸运的话,用超级计算机达到的最佳值可能在~10 GHz = 10 10 Hz / core的一般区域附近。
答案 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)
这些数字有些虚构。他们主要是为了说明问题。数学过于乐观,使其变得更容易。
单核可以每秒处理40亿(2 32 )操作(这是非常乐观的数字)
因为每天有86400秒(最多2个 17 )
和20天(最多2 5 )
和100个核心(最多2个 7 )
然后...... 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个原子,所以即使每天计算一次,你甚至不需要其中一半来计算它们。再说一遍,比尔盖茨曾经说过“谁需要宇宙中超过一半的原子?”