AES有几种不同的变体:


AES-128
AES-192
AES-256

但是为什么有人更喜欢使用一个在另一个之上?

评论

您将使用AES 256来防止量子暴力攻击。 Grover的算法通过n的平方根来加速暴力攻击(请参阅en.wikipedia.org/wiki/Grover's_algorithm)

#1 楼

出于实际目的,128位密钥足以确保安全性。较大的密钥大小主要是为了满足一些美国军事法规的要求,这些规则要求存在几个不同的“安全级别”,而不管打破最低级别是否已经远远超出现有技术。大小暗示一些CPU开销(对于192位密钥,增加20%,对于256位密钥,增加40%:在内部,AES是“舍入”序列,AES标准表示应为10、12或14个回合,分别用于128位,192位或256位密钥)。因此,出于某些合理的原因,请不要使用比必要的密钥大的密钥。

较大的密钥大小也可以更好地抵抗大型量子计算机的攻击:使用Grover算法,对任何k位进行暴力攻击密钥块密码仅需执行$ O(2 ^ {k / 2})$步,因此256位密钥仍将提供128位安全性,而128位密钥可能会在2 ^ 64次操作中被破解。是可行的。但据我所知,质量控制的威胁是别有用心的。同样,它也不能解释192位密钥的大小。
(这种大小的量子计算机在未来几年内还不会出现。)

评论


$ \ begingroup $
还应注意,与192位和256位AES相比,128位AES的审查要严格得多。
$ \ endgroup $
–固定
2011年10月15日,0:15

$ \ begingroup $
192/256位实现为什么要进行更多回合是有技术原因的吗,还是更长的密钥长度后面是相同的“越多越好”的逻辑?
$ \ endgroup $
–丹在火光中摆弄
2012年2月3日在21:35

$ \ begingroup $
@DanNeely:具有256位密钥的分组密码应该提供最高2 ^ {256} $的抵抗力;不应存在​​任何成本较低的(理论上的)攻击。成本为$ 2 ^ {200} $的攻击被视为具有256位密钥的分组密码的“破解”;但对于具有128位密钥的分组密码则不适用,对此我们“仅”要求最高$ 2 ^ {128} $操作的抵抗力。额外的回合有助于获得一定程度的抵抗力。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2012年2月6日在23:49

#2 楼

AES的所有变体之间的实际加密算法几乎相同。它们都采用一个128位的块,并应用相同的“回合”序列,每个回合都包含一些线性和非线性混排步骤。在各回合之间,在第一回合之前和最后一回合之前,都应用了一个回合密钥(通过XOR)。密钥大小使用更多轮数:AES-128使用10轮,AES-192使用12轮,AES-256使用14轮。
圆形密钥的派生看起来有些不同。

对于AES-128,我们需要11个圆形密钥,每个圆形密钥包含128位,即4个32位列。原始密码密钥由128位(即4列)组成。称这些$ k_0 $,$ k_1 $,$ k_2 $和$ k_3 $。密钥扩展算法现在将它们扩展到$ k_0 $到$ k_ {43} $(这样我们总共得到44列)。

密钥扩展的工作方式是$ k_i $仅直接依赖在$ k_ {i-1} $和$ k_ {i -N_k} $上(其中$ N_k $是密钥中的列数,即AES-128为4)。在大多数情况下,它是一个简单的$ \ oplus $,但是在每个$ N_k $键列之后,都会应用一个非线性函数$ f_i $。

                              ┏━━━┓
   k_0    k_1    k_2    k_3 ─→┃f_1┃─╮
    │      │      │      │    ┗━━━┛ │
 ╭──│──────│──────│──────│──────────╯
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓    ┏━━━┓
   k_4 ─╯ k_5 ─╯ k_6 ─╯ k_7 ─→┃f_2┃─╮
    │      │      │      │    ┗━━━┛ │
 ╭──│──────│──────│──────│──────────╯
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓     ┏━━━┓
   k_8 ─╯ k_9 ─╯ k_10 ╯ k_11 ─→┃f_3┃─╮
    │      │      │      │     ┗━━━┛ │
 ╭──│──────│──────│──────│───────────╯
 │  ↓      ↓      ↓      ↓
.......................................
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓
   k_40 ╯ k_41 ╯ k_42 ╯ k_43


函数$ f_i $是从AES S-box(分别应用于每个字节),旋转一个字节和具有取决于$ i $的舍入常数的XOR(这是$ GF(2的元素) ^ 8)$对应于$ x ^ {i-1} $,但标准中还有一个表。)

然后,密钥选择算法只需将$ k_0 \ dots k_3 $作为第一个回合密钥,第二个为$ k_4 \ dots k_7 $,最后一个为$ k_ {40} \ dots k_ {43} $。

AES-192看起来几乎一样,但是六个平行的列(类似的图表,您可以在我对另一个问题的回答中看到)。由于我们需要13个圆形键(= 52个键列),因此将一直执行到$ k_ {51} $(即8个完整行和第9行中的四个键)为止。

对于AES-256(以及具有192位以上密钥的Rijndael的所有变体),在第四列之后还有一个附加的非线性变换:

g $是$ f_i $的更简单的变体:只需在列的每个字节上并行应用AES S-box(无需旋转或舍入常量,因此无需索引)。

这里我们需要15个圆键,即60列,这意味着要进行7个半圆的键扩展。确实适用于此...但是似乎没有更好的问题可以将其发布为答案,因此我仍将其发布在这里。)

评论


$ \ begingroup $
今天遇到了这个问题。很好。关于AES的维基百科文章使我感到困惑。在“ MixColumns”步骤下,当使用“ 128位密钥”时,它们给出用于乘法的矩阵。认为AES中所有密钥大小的混合列步骤都相同,但是当块大小更改时,混合列步骤却不同。维基百科错了吗?
$ \ endgroup $
– Mikeikeazo
13年11月27日13:00



$ \ begingroup $
@mikeazo是的,我认为这里应该是“ 128位块”。 (我现在将对此进行编辑。)
$ \ endgroup $
–PaŭloEbermann
13年11月27日在20:43

$ \ begingroup $
实际上,MixColumns步骤在每一列上应用相同的操作,Rijndael的不同块大小变体仅在列数上有所不同,而在列数上没有差异。因此,对于所有Rijndael(和AES)变体,矩阵均保持不变。
$ \ endgroup $
–PaŭloEbermann
13年11月27日在20:59

#3 楼

我认为,如果AES-128被破坏,那么AES-192和AES-256也很有可能也会崩溃(因为这些类型的攻击是结构性的,很容易扩展到更长的密钥长度)。实际上,我们知道对AES的成功攻击不会通过在常规计算机上进行详尽的密钥搜索来实现。假设攻击大约占用键空间大小的平方根(有点像哈希函数的碰撞攻击;实际上,量子计算机将通过Grover算法在穷举键搜索中提供这种加速)。这样,$ 2 ^ {128} $的平方根就变得实用了,而$ 2 ^ {256} $的平方根仍然遥不可及。不过,我保证如果AES-128跌落,人们会很快从长键变体中迁移出来,而不必担心它们也会跌落。变得更好。

#4 楼

不同之处在于,所有对AES的已知攻击都需要两次尝试才能成功;也就是说,没有比通过蛮力尝试不同的密钥更好的方法了。 />
当然,使用256位密钥计算每个加密块也比较困难。

密钥长度的选择应基于风险:如果发生攻击,将造成损害成功。

评论


$ \ begingroup $
换句话说,如果破裂会导致世界末日,请使用1024? ;)
$ \ endgroup $
– Arlen Beiler
2011年7月12日在21:11

$ \ begingroup $
取决于您愿意等待大决战的时间。严重的是,如果某些东西对于256位太敏感了,那么您应该更多地担心有人证明P = NP,因为那样就不能下注了。
$ \ endgroup $
–查理·马丁(Charlie Martin)
2011年7月13日在0:41

$ \ begingroup $
密钥长度的选择还应该基于时间:您的数据必须安全多少时间? (考虑到随着时间的流逝,更便宜,更强大的计算机,以及AES将来的最终突破)。
$ \ endgroup $
–Géal
2011年7月13日在7:56

$ \ begingroup $
实际上有几种针对AES的攻击,可将时间缩短到2 ^ length以下。可以分别在2 ^ 119、2 ^ 176和2 ^ 200中进行攻击。 schneier.com/blog/archives/2009/07/another_new_aes.html
$ \ endgroup $
–萨摩斯
2011年7月13日在13:19

$ \ begingroup $
@samoz我还没有阅读完整的论文,但是请注意,有几个特殊条件:轮数少于标准轮数和相关按键。现实世界中使用的轮次与标准轮次相同,并且使用来自熵源的无关密钥。但是,您是对的,在特殊条件下,已知对AES变体的攻击计算强度较低。
$ \ endgroup $
–查理·马丁(Charlie Martin)
2011年7月15日14:04