简介
AES(Advanced Encryption Standard)高级加密标准,旨在取代DES加密标准,本文介绍aes128的加密流程,aes128,192,256在加密过程中使用到的s盒,矩阵,轮密钥常量通常是固定的。
工作流程图
首先将明文分割为128位的明文分组,把明文序列变形,按照从左到右,从上到下的顺序进行排列。第一列从上到下排满四个,然后排第二列,形成4×4的矩阵,每个位置都是一个字节。16字节的密钥也是这样排列,24字节和32字节排成6列及8列。

初始变换
将变形过的明文分组与密钥分组进行异或运算(XOR),初始变换后的分组参与10轮轮函数(aes192,aes256分别进行12轮,14轮轮函数)。注意,前n-1次的轮函数变换相同,第n次不同。
轮函数
前九轮
字节代替
矩阵中每个元素,按照前四位为行,后四位为列的置换原则,找到s盒中的唯一元素。例如下图中的第一个元素EA,代表E行A列,对应元素为87。


行位移
矩阵中第一行元素左移0个字节,第二行左移1个,第三行左移2个,第四行左移3个。

列混淆
按照矩阵乘法规则,左乘一个给定的矩阵。

该矩阵是给定的,其中
×01代表元素本身
×02代表将二进制数左移一位,同时如果元素最左侧为1,要XOR一个二进制数0001 1011
×03代表(01+02),把02的操作结果和其本身进行XOR运算。
轮密钥加
与每轮的密钥进行对应位置的XOR运算,得到的矩阵参与下一轮运算。
第十轮
与前九轮唯一的区别是没有列混淆,其余操作一样。
密钥扩展
密钥变换成矩阵的过程与明文分组一样,成为一个4列的矩阵参与初始变换,下面对密钥进行扩展,设要扩展的是第i列元素Wi。
i mod 4 ≠0
Wi=Wi-4 XOR Wi-1
i mod 4 =0
当i为4的倍数,即第四列,第八列等,Wi =Wi-4 XOR T(Wi-1 )。T()函数首先将第i-1列进行字循环,即将该列的元素上移一格,然后按照s盒的字节代替规则进行字节代替,最后跟一个给定的轮常量进行XOR操作,将结果与Wi-4进行XOR运算得到Wi。

aes128最终将密钥扩展成44列的密钥,每轮轮函数按照顺序使用4列,加上初始变换时使用的4列原始密钥,共44列。