高级加密标准(AES)

AES 可参数化

以 AES-128 为例。

AES是一个替换置换网络(不是Feistel网络)。

首先将消息安排在元素为8比特的4 × 4矩阵中,向下填充,然后向右填充。

AES 操作

这 10 轮加密过程之前会有一次密钥加法(因此,总共有 11 次密钥加法)。最后一轮稍有不同:没有列混淆操作。

AES

AES 的字节操作

AES 是一种面向字节的加密算法。被各轮操作处理的 128 位“状态”(state)被视为 16 个字节,并排列成一个矩阵的形式:

AES_matrix

如:0x53⊗0xCA/(x8+x4+x3+x+1)

=(x6+x4+x+1)(x7+x6+x3+x)/(x8+x4+x3+x+1) ​ =0x01

字节代换

AES-SubBytes.svg

矩阵中的各字节透过一个8位的S-box进行转换。这个步骤提供了非线性的变换能力。

行移位

AES-ShiftRows.svg

列混淆

AES-MixColumns.svg

将每一列分别混合,通过与矩阵相乘来实现:

AES_matrix_times

每一列的四个字节透过线性变换互相结合。每一列的四个元素分别当作 1,x,x2,x3 的系数,合并即为 GF(28) 中的一个多项式,接着将此多项式和一个固定的多项式 c(x)=3x3+x2+x+2 在模 x4+1 下相乘。

轮密钥加

AES-AddRoundKey.svg

密钥调度

派生轮密钥 Ki 的方法如下:将 K 分成四个字 W0,W1,W2 和 W3 各32位。

rci=xi−1modx8+x4+x3+x+1