AES算法

简介
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 转换字节数据的功能一致。

算法伪代码


猜你喜欢

转载自blog.csdn.net/dreambitbybit/article/details/80101052