?xml version="1.0" encoding="UTF-8"?
美国国家标准技术研究所在 2001 年发布了高级加密标准(AES)。AES 是一个对称分组密码算法,旨在取代 DES 成为广泛使用的标准。
根据使用的密码长度,AES 最常见的有 3 种方案,用以适应不同的场景要求,分别是 AES-128、AES-192 和 AES-256。本文主要对 AES-128 进行介绍,另外两种的思路基本一样,只是轮数会适当增加。
1 算法流程
AES 加解密的流程图如下:
AES 加密过程涉及到 4 种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。
加解密中每轮的密钥分别由初始密钥扩展得到。算法中 16 字节的明文、密文和轮密钥都以一个 4x4 的矩阵表示。
接下来分别对上述 5 种操作进行介绍。
1.1 字节替代
字节代替的主要功能是通过 S 盒完成一个字节到另外一个字节的映射。S 盒的详细构造方法可以参考文献[1]。
下图(a)为 S 盒,图(b)为 S-1(S盒的逆)。
S 和 S-1 分别为 16x16 的矩阵。假设输入字节的值为 a=a7a6a5a4a3a2a1a0,则输出值为 S[a7a6a5a4][a3a2a1a0],S-1 的变换也同理。
例如:字节 00 替换后的值为(S[0][0]=)63,再通过 S-1 即可得到替换前的值,(S-1 [6][3]=)00。
1.2 行移位
行移位的功能是实现一个 4x4 矩阵内部字节之间的置换。
1.2.1 正向行移位
正向行移位的原理图如下:
实际移位的操作即是:第一行保存不变,第二行循环左移 1 个字节,第三行循环左移 2 个字节,第四行循环左移 3 个字节。
假设矩阵的名字为 state,用公式表示如下:
state’[i][j] = state[i][(j+i)%4]; 其中 i、j 属于 [0,3]
1.2.2 逆向行移位
逆向行移位即是相反的操作,用公式表示如下:
state’[i][j] = state[i][(4+j-i)%4]; 其中 i、j 属于 [0,3]
1.3 列混淆
列混淆:利用 GF(28) 域上算术特性的一个代替。
1.3.1 正向列混淆
正向列混淆的原理图如下:
根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的 4 个值有关系。此处的乘法和加法都是定义在 GF(28) 上的,需要注意如下几点:
1) 将某个字节所对应的值乘以 2,其结果就是将该值的二进制位左移一位,如果该值的最高位为 1(表示该数值不小于 128),则还需要将移位后的结果异或 00011011;[1]
2) 乘法对加法满足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)
3) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模 2 加法(相当于是异或运算)。
假设某一列的值如下图,运算过程如下:
同理可以求出另外几个值。
1.3.2 逆向列混淆
逆向列混淆的原理图如下:
由于:
说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文。
1.4 轮密码加
任何数和自身的异或结果为0。加密过程中,每轮的输入与轮密钥异或一次;因此,解密时再异或上该轮的密钥即可恢复输入。
1.5 密钥扩展
密钥扩展的原理图如下:
密钥扩展过程说明:
1) 将初始密钥以列为主,转化为 4 个 32 bits 的字,分别记为 w[0…3];
2) 按照如下方式,依次求解 w[j],其中 j 是整数并且属于 [4,43];
3) 若 j%4=0,则 w[j]=w[j-4]⊕g(w[j-1]),否则 w[j]=w[j-4]⊕w[j-1];
函数 g 的流程说明:
4) 将 w 循环左移一个字节;
5) 分别对每个字节按 S 盒进行映射;
6) 与 32 bits 的常量(RC[j/4],0,0,0)进行异或,RC 是一个一维数组,其值如下。(RC 的值只需要有 10 个,而此处用了 11 个,实际上 RC[0] 在运算中没有用到,增加 RC[0] 是为了便于程序中用数组表示。由于 j 的最小取值是 4,j/4 的最小取值则是 1,因此不会产生错误。)
RC = {00, 01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}
2 源码
在 GitHub 上找到的 AES 实现代码,感觉写得不错。
https://github.com/dhuertas/AES/blob/master/aes.c
3 参考文献
[1] William Stallings著;王张宜等译. 密码编码学与网络安全——原理与实践(第五版)[M]. 北京:电子工业出版社,2011.1.