AES算法

密码学学习笔记

Posted by Liu Ke on April 21, 2018

Contents

  1. 简介
  2. Rijndael算法
    1. SubBytes逐字节替换
    2. ShiftRows平移行
    3. MixColumns混合列
    4. AddRoundKey与轮密钥进行XOR

简介

AES(Advanced Encryption Standard),因为它是为了取代前任DES成为新的加密标准,所以叫了个“Advanced”,然后就变成了“高级”加密标准。AES采用了Rijndael算法,还是惯例,这个名字也是来源于两个人名,比利时的两个密码学家Joan Daemen和Vincent Rijmen。

AES也是一种分组密码,分组长度固定为128比特,密钥长度有128、192和256比特三种。


Rijndael算法

Rijndael算法采用了SPN结构。Rijndael算法也是由多个轮构成,每轮按顺序分为4个步骤,Rijndael需要进行10到14次轮运算,每轮具体步骤如下:

  1. SubBytes逐字节替换
  2. ShiftRows平移行
  3. MixColumns混合列
  4. AddRoundKey与轮密钥进行XOR

Rijndael的解密过程,则是与上面相反的顺序进行。AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes,与轮密钥进行异或这步加密和解密完全相同,接下来三个步骤则是加密过程每一步的逆运算。

SubBytes逐字节替换

Rijndael的输入分组为128比特,即16字节,这个16字节的分组描述为一个4×4的方阵。首先,逐个字节地对16个字节进行逐字节替换。就是以每个字节的值(0~255任意值)为索引,从一张有256个值得替换表中查找出对应值的处理。简单点来说,就是有一个大大的表,上面有256个一字节的值对应的另一个一字节的值,按照这个表,把4×4方阵中的每个字节的值逐个替换成表中对应的值。

ShiftRows平移行

平移行就是将4×4方阵中的每一行(4个字节)按一定的规则向左平移,并且每一行平移的字节数不相同。

MixColumns混合列

混合列是将4×4方阵中4字节的每一列进行矩阵运算,变成另外4个字节的值。

AddRoundKey与轮密钥进行XOR

这一步是将第三步混合列的输出4×4方阵中的每个字节与轮密钥进行异或XOR,轮密钥也是一个4×4字节的方阵。


优势

DES每轮只能加密一半的比特输入,AES与之相比,每一轮中所有的比特都会被加密,所有AES加密所需的轮数更少。

还有,AES的逐字节替换、平移行和混合列可以分别以字节、行和列为单位进行并行计算。

Rijndael算法明文到密文的计算过程全部都可以用数学公式来表示,理论上也可以通过方法进行破译。但是目前为止,还没有出现针对Rijndael的有效攻击

参考资料:《图解密码技术》 [日] 结城浩 著;周自恒 译


Fork me on GitHub