AES为迭代型密码;明文长度固定128bit=16Byte,轮数依赖于密钥长度。密钥为128、192、256bit时,轮数分别为:10、12、14,本文以密钥长度为128bit为例。
整体过程:
明文16Byte按矩阵顺序填充(数据为16进制),初始密钥128bit(16Byte)以相同方式填充填充。
p00 | p01 | p02 | p03 |
p04 | p05 | p06 | p07 |
p08 | p09 | p10 | p11 |
p12 | p13 | p14 | p15 |
k00 | k01 | k02 | k03 |
k04 | k05 | k06 | k07 |
k08 | k09 | k10 | k11 |
k12 | k13 | k14 | k15 |
初始变换
将明文矩阵和初始密钥异或得初始变换(轮密钥加)。
9轮循环运算
1字节代换
将初始变换后的矩阵通过S盒(S-Box)形成一个字节到另一个字节的映射。
如若p[00]=19H,S-Box中1行9列对应元素为d4,则p[00]=d4H,重复此操作得到新矩阵
2行移位
将新矩阵的第0行不变,第1行左移1位,第2行左移2位,第3行左移3位。
3列混合
将最新矩阵左乘一个常矩阵(其运算中加法和乘法都是定义在GF(2^8)上的加法和乘法)
4轮密钥加
最新矩阵与子密钥矩阵异或
第10轮循环
无列混合步骤:
1、字节代换
2、行移位
3、轮密钥加
第10轮循环结束后的矩阵即密文矩阵。
密钥扩展
即将原本4行4列的初始密钥矩阵扩展成4行(4+40)列矩阵(再增加10个密钥矩阵)
设列数依次为W0,W1...Wi...W43
如果i不是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁W[i-1]
如果i是4的倍数,那么第i列由如下等式确定:W[i]=W[i-4]⨁T(W[i-1])
1、当i不是4的倍数时:
直接将W[i-4]与W[i-1]异或即可得到新密钥列W[i]。
2、当i是4的倍数时:
W[i]=W[i-4]⨁T(W[i-1]) 其中T函数包含1字循环、2字节代换、3轮常量异或。
a字循环:将1个字中的4个字节循环左移1个字节。
b字节代换:对字循环的结果用S盒字节代换。
c轮常量异或:将前两步的结果同轮常量Rcon[j]进⾏异或,其中j表示轮数
最后将得到的结果T(W[i-1])与W[i-4]异或得到新密钥列W[i]。