AES加密框图,以密钥长度128bit为例。
一、AES加密过程
明文(4*4字节矩阵)与 圈密钥进行异或运算,进入圈迭代;
首先是第一圈,字节替换,行移位,列混合,圈密钥加,进入第二圈;
.....
一直到第九圈;
第十圈相比前九圈少了列混合,第十圈的变换结果就是密文。
详细步骤
1、字节替换
将128比特的输入数据变换成4*4的字节矩阵,将字节矩阵中每一个字节利用同一个S盒变换为另一个字节,变换后位置不变。
具体做法:将字节矩阵中一个字节转为16进制的数xy,替换表(S盒)中第x行第y列的字节就是对应的字节替换后的结果
2、行移位变换
将第i行循环左移i个字节。将原来同一列中4个元素分散到不同的列中。
3、列混合变换
用一个固定的字节矩阵乘以输入的字节矩阵。
4、圈密钥加
将密钥字节矩阵与当前状态字节矩阵的对应字节异或。圈密钥是通过密钥生成算法从初始密钥中产生,其长度等于分组长度。
密钥生成算法
AES的圈密钥长度为128bit,即4*32位字,若迭代次数Nr,则一共需要4*(Nr+1)*32位字的密钥。AES-128(需要迭代10次)则需要44个32位字的密钥。
w0 | w1 | w2 | w3 | w4 | .... | w43 | w44 |
每一个Wi是32位字。
记Nk=初始密钥长度/32。表示初始密钥可产生的32位字的个数。
密钥长度 | 128 | 192 | 256 |
Nk | 4 | 6 | 8 |
对于不同的密钥长度,密钥生成算法有两种。Nk=4和Nk=6用一种方式,Nk=8用另外一种方式。
方式一:密钥长度为128和192
前Nk个32位字直接取自初始密钥(W0,W1,...Wk-1),后面的Wi是由前Nk个32字递归产生。
方式二