AES
AES(Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES。其密钥长度则可以是128,192或256比特。
AES选定过程
1997年2月,美国国家标准与技术研究院(NIST)宣布希望选出一种新的加密算法用于替代DES。数月后15种加密算法被提交,分别是:CAST-256,CRYPTON,DEAL,DFC,E2,FROG,HPC,LOKI97,MAGENTA,MARS,RC6,Rijndael,SAFER+,Serpent,Twofish。
经过数轮的讨论与筛选,最终5种算法进入最终轮:MARS,RC6,Rijndael,Serpent, Twofish。最后经过专家投票,Rijndael胜出,成为了AES标准。
Rijndael: 86 positive, 10 negative
Serpent: 59 positive, 7 negative
Twofish: 31 positive, 21 negative
RC6: 23 positive, 37 negative
MARS:13 positive, 84 negative
算法
- SubBytes:通过一个非线性的替换函数,用查找表(S-Box)的方式把每个字节替换成对应的字节。
- ShiftRows:将矩阵中的每个横列进行循环式移位。
- MixColumns:每一列的四个字节通过线性变换互相结合得到新的4字节值.
- AddRoundKey:将输入与轮密钥进行XOR。
以上就是AES加密中的一轮,不同密钥长度进行的轮数不同,128位10轮,192位12轮,256位14轮。
下面具体分析每一步:
SubBytes
从一张拥有256个值的替换表(S-Box)中找出对应的值替换。S-Box是固定的,查找公式也是固定。具体可参见Rijndael S-box。用此步骤混淆了输入内容。
ShiftRows
上一步处理后将16个字节分为4组,每组4字节。以字节位单位进行乱序处理,这种打乱是有规律的。如上图中输入第一组第一个字节移动到输出第一组第一个字节,输入第一组第二个字节移动到输入第二组第二个字节,输入第一组第三个字节移动到输出第三组第三个字节。
MixColumns
可以理解为采用固定的公式,将每组4个字节做运算得出另外4个字节。具体可参见Rijndael mix columns。
AddRoundKey
与轮密钥做异或。
轮密钥
轮密钥是通过密钥编排得到:将原始输入的密钥(128位、192位、256位)作为输入,得到子密钥。