问题描述
|
我正在研究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
解决方法
有趣的问题,很难正确回答。可伸缩性是大多数时候“尝试一下”的事情之一。
要注意的一件事是,由于其他因素,多核系统将获得小于线性的缩放比例。
假设您的程序每秒可以比较
n
个键。因此,理想的(即线性)100核系统将每秒计算100n
个密钥。要比较所有密钥(在最坏的情况下,现实将是其中的一半)将需要2天的时间。
如果ѭ0是1000,则将花费5041220250650680569829087031221211天,这比某些关于宇宙年龄的估计要长约1000亿倍。
因此,我要说的是...否:)密码学算法是专为这类攻击而设计的。同样,在编写这样的应用程序时,Java将是最后选择的语言:
, 在理想的世界中,它围绕着:
2135次运算÷20天÷24小时/天÷60分钟/小时÷60秒/分钟÷100内核=每秒每内核1032次操作(Hz /内核),假设我的数学没有关闭。
您需要1032 Hz的内核,每个时钟进行一次计算。通常,它需要多个。至少可以说,这目前还无法实现。如果您幸运的话,超级计算机所能达到的最佳效果大概是在大约10 GHz = 1010 Hz /核心的整个范围内。
(这全都无视阿姆达尔定律...)
, 人们没有意识到数字有多大。
2 ^ 135大约是4e40,好的,43556142965880123323311949751266331066368。
假设您有一台能够执行1 exaflop的计算机,这比我们今天拥有的计算机快得多。因此,如果它能够在每个浮点运算中进行这些计算之一,那么它可以在一秒钟内完成10 ^ 18的运算。这仍然需要您4e22秒。每年大约有31536000秒,因此您的小企业仍将花费超过1e15年的时间。
好吧,取决于与您交谈的对象,宇宙大约在6000年到130亿年左右之间。
是否使用Java,答案是否定的。 (天网在这里吗?)
, 这些数字有些虚构。他们主要是为了提出观点。数学过于乐观以使其变得更容易。
一个内核每秒可处理40亿(232)次操作(这是非常乐观的数字)
并且由于每天有86400秒(最多217秒)
和20天(最多25天)
和100核(最多27个)
然后... 232 * 217 * 25 * 27 == 2(32 + 17 + 5 + 7)== 261个计算...
没有机会。甚至没有远程关闭。剩余的计算量是如此之大,我什至无法理解它的真正含义。对不起:-)
(根据以上数字,将需要279天...)
, 宇宙中至少有2 ^ 240个原子,因此即使每天进行一次计算,您甚至不需要半数原子就可以对其进行计算。再说一次,比尔·盖茨不是说过“谁需要宇宙中一半以上的原子?”