AES加密的详细过程是咋样的( 二 )


state每一行(row)内部做shift,直接上示意图就明白了(图摘自matt-wu/AES):
AES加密的详细过程是咋样的

AES ShiftRows3. MixColumns:列混合。
官方的说法是以多项式做模为理论基础分析展开的,容易把人看懵。单单从操作上来理解:state每一列(column)单独和一个常数矩阵做乘法(自行回忆矩阵乘法)。实际操作示意图如下:
AES加密的详细过程是咋样的

AES MixColumns4. AddRoundKey:和roundkey(轮密)做XOR(位或)操作。
在一个完整的round中,密钥只参与了这步操作:4X4的state矩阵和4X4的roundkey每一位做XOR操作(图摘自一个超有趣的博客《A Stick Figure Guide to the Advanced Encryption Standard (AES)》):
AES加密的详细过程是咋样的

AES AddRoundKey
整个round结束了,是不是挺简单的?接下来还有个问题:roundkey(轮密)是怎么迭代的?
AES Key Expansion(密钥扩展) - roundkey(轮密)迭代过程Key Expansion,也被称为Key Schedule,还是先来看整体概览图:
AES加密的详细过程是咋样的

AES Key Expansion概览一步步拆解,一次key expansion可以拆解为4个步骤:
1. RotWord:只对最后一列操作,平移列(类似ShiftRow)。
roundkey是一个4X4的密钥byte矩阵,每一列被称作一个word(在state矩阵中也是一样,word=column)。这一步取出最后一个word,对这个word向上shift1个,示意图如下:
AES加密的详细过程是咋样的

AES RotWord2. SubWord:只对最后一列操作,逐字节替换(类似SubBytes)。
完全类似SubBytes的操作:查S-box并进行byte替换。不同的是,对于state而言每一个byte都要查表;而roundkey只需要替换最后一个word的4个byte即可。
3. KeyXOR - 这一步没有官方名称,自己瞎起了一个名词。
具体做法:第1个word(第一列)、经过上述两步操作后的最后1个word(第四列)和一个常量列向量RCON做XOR操作。RCON是一个常数项量,如下:
AES加密的详细过程是咋样的

AES RCON具体做法也可以看下图:
AES加密的详细过程是咋样的

AES AES 和RCON位或操作4. KeyXOR - 这一步也没有官方名称。 具体做法:新roundkey的对应word和旧roundkey的上一个word做XOR操作。语言描述不直观,需要借助公式说明,放心,一点都不复杂。先记旧roundkey=K,有K=,新roundkey=K\u0026#39;,有K\u0026#39;=。
w\u0026#39;_i = w\u0026#39;_i-1 XOR w_i, 1\u0026lt;i\u0026lt;=4综上,一次roundkey生成的过程结束了,再回头看整个迭代生成过程的示意图是不是觉得一下子豁然开朗了?(什么?没有?嗯,那你需要细细品品了。)
到这里,一个AES的一个block内的加密过程结束了。但还是遗留了问题:block和blcok之间怎么拼接呢?
AES Block Cipher Mode(分组密码工作模式)这一块推荐文章《现代分组密码的操作模式》和《Block cipher mode》,我们可以看看EBC和CBC这2种模式,来感受下:


推荐阅读