简介
AES
为Advanced Encryption Standard
的简称,其分组长度为128
比特,密钥长度有128
、192
和256
。不同长度的密钥在加解密是循环次数不相同,分别为10,12,14
次。
整体加解密流程
Nr
取10
、12
或14
。Plaintext
为明文,ciphertext
为加密后的密文。除了最后一个round
,前面的round
都是分为四个步骤subBytes
、shiftRows
、MixColumns
及AddRoundKey
,而最后一个round
省略掉MixColumns
。
AES-128
情况下的编解码流程
AES
算法中的数据结构
数据结构指的是数据流在处理中的排列顺序,及处理生成序列的流程。
SubBytes (Substitute Bytes)
SubBytes
的处理是将输入数据进行映射转换,转换表生成按照一定方式,方法是公开的。SubBytes
与InvSubBytes(Inverse Substitute Bytes)
是一对逆过程,采用两张不同的表格。映射方式是将原始字节为0xXY
的信息转换为表格中X
行Y
列中指示的数据。
ShiftRows(Shift Row Transformation)
ShiftRows
是将数据进行循环移位,第一行不做移位,第二行左移1
个字节,第三行左移两个字节,第四行左移3
个字节(
都是需要循环左移)
。InvShiftRows
过程是向相反的方向去进行移位。
MixColumns (Mix Column Transformation)
MixColumn
是通过有限域GF(2^8)
算法现实的,现在结果不能超过2^8
,采用的多项式为
x
8
+ x
4
+ x
3
+ x + 1
。
MixColumn
矩阵运算方式如下
公式为
展开式,其中点号为多项式乘运算,加号为异或运算,结果需要使用多项式进行二进制取模运算
InvMixColumns
为MixColumns
的逆运算,其公式如下,亦即系数为MixColumns
矩阵的逆矩阵
AddRoundKey ( Add Round Key Transformation )
简单的异或运算,通过输入数据和key
进行按位进行异或运算得到输出结果,按列进行Add Round Key
运算。
Round key
的生成
下图示例为AES-128
的情形,而对于AES-192
和AES-256
,算法类似,不同在于初始N
个不需要生成的word
,对于128
、192
、156
,N
分别为4,6,8
。
W8-W43
的生成方式类似方式推到下去,伪代码实现,RotWord
为一个字节的循环左移运算,亦即b0b1b2b3
转换为b1b2b3b0;SubWord
和SubBytes
转换字节数据的功能一致。
算法伪代码