又称Rijndael加密法,在我讲DES的文章中说过是DES的进阶版,随着DES被计算机日益强大的计算性能所打败,另外DES、3DES不适用与硬件加密,因此急需另一种加密方式。
1997年,NIST又立项招标一个加密项目。
1998年,总计获得15个方案。
1999年,由NIST挑选后,还剩下5个方案。
2000年,NIST最终选出了名为Rijndael的加密算法,改名为AES。
AES Key可以长128、192、256bits,Block长128bits。理论上而言,Key选择的越长,安全性就越高,当然加密成本也就是加密速度就越慢。
于大部分块加密使用Feistel网络作为核心不同的是,AES选用了基于代入置换网络(Substitution Permutation Network),其核心加密流程如下图所示:
输入(input)是以一个4*4矩阵的形式输入的,先进过⊕k0(每回合都会由主密钥产生一把回合密钥)的操作,称为AddRoundKey,之后再经过ByteSub、ShiftRow、MixColumn三步操作,这一系列操作统称为一个回合。根据密钥长短的不等总计要通过10-14个回合后输出最后的密文。
(1)AddRoundKey:Key与矩阵进行⊕操作。
(2)ByteSub:简单的来说就是一系列数学置换;具体而言就是通过一个1byte的S-box进行矩阵内数值的置换。
(3)ShiftRow:对行进行位移操作,如下图所示:
(4)MixColumn:对矩阵的列进行线性变换。
1.最佳密钥恢复攻击(Best Key Recovery Attack):最快速度是穷举法的四倍,也就是说,从2^128时间变为了2^126时间、、、
2.相关密钥攻击(Related Key Attack):需要4个关联Key等前提条件,并且预计需要2^99时间。
3.边侧道攻击(Side Channel Attack)
AES有5种工作模式,分别为CBC、ECB、CTR、OCF、CFB,每个模式都有实现上的略微区别,也各有利弊,在此也就不一一赘述了。
1. 电码本模式(Electronic Codebook Book (ECB))
2.密码分组链接模式(Cipher Block Chaining (CBC))
3.计算器模式(Counter (CTR))
4.密码反馈模式(Cipher FeedBack (CFB))
5.输出反馈模式(Output FeedBack (OFB))