欢迎光临散文网 会员登陆 & 注册

密码学之高级加密标准(AES)

2021-05-19 10:03 作者:刹那-Ksana-  | 我要投稿

前言

还是有关block cipher的文章。

上文的DES以及跟不上时代的步伐了,而代替DES的,是这篇文章的AES。

一、State

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

现在,我们用 s 代表这个二维数组,用下标 r(row)c(column) 来进行索引。

对于任意一个输入序列 i ,我们用如下的方式将其转化为State数组:

s%5Br%2Cc%5D%20%3D%20i%5Br%20%2B%204c%5D%2C0%3Cr%3C4%3B0%3Cc%3Cb%20

很明显,其逆运算——将State二维数组还原为一维序列o的方式为:

o%5Br%20%2B%204c%5D%20%3D%20s%5Br%2Cc%5D%20

二、AES算法

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

AES的的算法如下:

伪代码(引用来源:FIPS 197, Advanced Encryption Standard (AES))

*Nk为master key的长度除以32,Nb为本文中的b,Nr为round数(循环次数)。这里的word代表一个32-bit的二进制序列。

其中,四个函数SubBytesShiftRowsMixColumnsAddRoundKey分别如下:

SubBytes是用一个可逆的S-box: %20%5Cleft%5C%7B%200%2C1%20%5Cright%5C%7D%5E8%20%5Crightarrow%20%5Cleft%5C%7B%200%2C1%20%5Cright%5C%7D%5E8%20 将我们的State中的每一个元素替换为新的元素。我们的S-box,简单地说是一张 16%5Ctimes%2016%20 的表格,我们将一个8-bit序列切割为2个长度为4-bit的序列,第一个4-bit序列决定,第二个4-bit序列决定

ShiftRows是将State二维数组中的后三行rotate,如图所示

示意图(引用来源:FIPS 197, Advanced Encryption Standard (AES))

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

AddRoundKey是将我们的State与我们的round key进行一个XOR运算: %5Bs_%7B0%2Cc%7D'%2C%20s_%7B1%2Cc%7D'%2Cs_%7B2%2Cc%7D'%2Cs_%7B3%2Cc%7D'%5D%20%3D%20%5Bs_%7B0%2Cc%7D%2C%20s_%7B1%2Cc%7D%2Cs_%7B2%2Cc%7D%2Cs_%7B3%2Cc%7D%5D%20%5Coplus%20%5Bw_%7Bround*b%2Bc%7D%5D%20

三、Key Schedule

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

伪代码(引用来源:FIPS 197, Advanced Encryption Standard (AES))

其中,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.

密码学之高级加密标准(AES)的评论 (共 条)

分享到微博请遵守国家法律