密码学之高级加密标准(AES)
前言
还是有关block cipher的文章。
上文的DES以及跟不上时代的步伐了,而代替DES的,是这篇文章的AES。

一、State
AES的所有运算都是基于一个State的概念,State是一个二维数组,一共4行列,数组中的每一个元素都是一个8-bit (1 byte)的二进制序列。
的值是根据输入序列的长度(也就是block length)
决定的:
.如果block length为128,那么就是4行4列。

现在,我们用 代表这个二维数组,用下标
和
来进行索引。
对于任意一个输入序列 ,我们用如下的方式将其转化为State数组:
很明显,其逆运算——将State二维数组还原为一维序列的方式为:

二、AES算法
AES一共可以有三种不同的master key的长度,128 bits, 192 bits和256 bits. 每一个长度对应不同的round数——128 bits对应10轮,192 bits对应12轮,256 bits对应14轮。
AES的的算法如下:

*Nk为master key的长度除以32,Nb为本文中的b,Nr为round数(循环次数)。这里的word代表一个32-bit的二进制序列。
其中,四个函数SubBytes、ShiftRows、MixColumns和AddRoundKey分别如下:
SubBytes是用一个可逆的S-box: 将我们的State中的每一个元素替换为新的元素。我们的S-box,简单地说是一张
的表格,我们将一个8-bit序列切割为2个长度为4-bit的序列,第一个4-bit序列决定行,第二个4-bit序列决定列。
ShiftRows是将State二维数组中的后三行rotate,如图所示

MixColumns是对我们State中的每一列进行一系列的运算,同一列中的每一个元素都将参与到运算中(故名Mix Column),详细可参照FIPS 197的文档,在此不进行说明。
AddRoundKey是将我们的State与我们的round key进行一个XOR运算:

三、Key Schedule
我们用 来代表我们的master key,我们用如下的方法来将我们的
扩张成为
(这里的w就是上一节里面的w):

其中,SubWord是将一个32-bit的序列切分为4个8-bit的序列,每一个8-bit序列通过上述的S-Box替换为一个新的8-bit值。RotWord是将一个32-bit/4-byte的序列向左旋转1个byte的长度。

后记
block cipher好像写得差不多了…准备近几天再看看有没有其他值得写得地方。
参考资料:
NIST Computer Security Division - FIPS 197, Advanced Encryption Standard (AES)
使用工具:Drawio: https://app.diagrams.net

THE END.