我只是想决定选择128位Rijndael作为AES密码,即使使用192位和256位密钥也是如此。即使使用256位密钥,每个128位块也只能获得2 ^ 128个可能的输出,因此使较大的密钥大小变得毫无意义(更不用说较弱的密钥计划了)。

这是对AES进行标准化时的NIST监督吗?随时知道答案。)

评论

注意:实际上有$(2 ^ n)!$个n位排列,即大约有$ 2 ^ {2 ^ {135}} $个128位排列,这意味着找到$ 2 ^ {256} $个不是太辛苦。

我自己的分析表明,几乎所有分组密码的密钥大小都至少应比分组大小大1.4倍

@RichieFrame您是怎么想到这个数字的?

对几个小块密码上所有密钥的所有可能PT / CT对的@kasperd蛮力计算,然后查看多种密钥大小的对的分布。对于所有块大小,它约为1.4,我假设实际上约为$ \ sqrt2 $,为此它与某个度量标准存在100%的匹配,我不再拥有数据文件(它们占用了大量空间)。当键和块大小匹配时($ 1 / \ sqrt2 $?),相同的度量标准是0.7

#1 楼

不,这不是疏忽。 AES是一种分组密码,是一种密钥排列。现在,如果您有三个元素的置换,则可能有几种置换:

a -> a
b -> b
c -> c


而且:

a -> b
b -> c
c -> a




a -> c
b -> a
c -> b




a -> c
b -> b
c -> a


($ 3应该是$ 6 $ $,三个阶乘,我不会全部写出来)

现在,如果仔细观察,可能有3种以上的排列。实际的排列数高于输入/输出!确切地说,排列数是$(2 ^ {128})!$,比$ 2 ^ {256} $大得多。

键的目的是选择一个可能的排列。因此密钥可能比256位大很多,并且仍然有意义。这也意味着可能存在多个将特定密文块映射到特定明文块的密钥。攻击者可能必须验证更多对,才能合理地确保成功。例如,在示例的最后两个排列中,a映射到c


块大小是-如Yehuda Lindell在另一个答案中所写-加密许多块时需要。例如,当您为CTR模式选择随机随机数时,分块大小必须足够高,否则您将在计数器中产生重叠以进行加密以创建密钥流(即在示例中选择a两次)。在这种情况下,密钥流将重复执行,从而破坏流密码。


最大密码比块大小大得多的块密码的一个示例是Blowfish,其块大小为64位,密钥大小最大448位。作者Bruce Schneier认为河豚已被弃用。除了其他问题之外,小块大小也是导致弃用的主要原因。两种后续加密算法Twofish和Threefish都扩大了块大小。

评论


$ \ begingroup $
例如:$(2 ^ {128})!\ approx2 ^ {2 ^ {135}} \ approx2 ^ {4306521928262132675756558040498023782891} $
$ \ endgroup $
– SEJPM♦
15年12月22日在20:45

$ \ begingroup $
实际上,对于三个元素,只有$ 6 = 3!$,而不是9。
$ \ endgroup $
–PaŭloEbermann
15/12/22在21:42

$ \ begingroup $
谢谢,我发现我缺少一些东西,事实证明这不是乐高积压的理由。 :)
$ \ endgroup $
–斯科特·阿西塞夫斯基(Scott Arciszewski)
2015年12月23日下午6:45

$ \ begingroup $
不错的文章,但我认为您不是Lego的理由:)
$ \ endgroup $
–马腾·博德威斯♦
15年12月23日在10:23

#2 楼

这里没有NIST监督。密钥大小和块大小是两个完全不同的参数和问题。需要大块大小的唯一原因是,当加密太多块时,坏事开始发生。具体来说,对于$ n $位的块大小,生日悖论在$ \ sqrt {2 ^ n} $处出现。因此,对于128位块,您需要加密太多,以至于没有区别。相反,更大的密钥和更多的回合(这是AES-192和AES-256的结果)为您提供了更好的安全性,可防止密码分析。