高级加密标准(AES)简介

1.简介

DES的56位密钥在穷举密钥搜索的攻势下显得不太安全,64位块也不够强大,急需一个新算法。美国政府想把已经广泛使用的加密算法标准化,称为高级加密标准(Advanced Encrypted Standard,AES),经过多次讨论,最终采用了Rijndael算法(AES候选算法之一)。
AES采用128位块和128位密钥。AES的主要特性如下:
 对称与并行结构:是算法实现具有很大的灵活性,而且能够很好地抵抗密码分析攻击。
 适应现代处理器:算法很适合现代处理器,如:Pentium、RISC、并行处理器等。
 适合智能卡。
Rijndael支持的密钥长度和明文块长度为128位~256位(步长为32位)。密钥长度与明文长度要分别选取。AES规定,明文块长度必须是128位,密钥长度是128位、192位或256位。通常使用的两个AES版本是:128位明文块加128块密钥,以及128位明文块加256位密钥。
由于128位明文块加128位密钥更像是一个商用标准,因此只介绍这个版本。其他版本的原理是相同的。

2.操作

与DES的工作方法类似,Rijndael也使用了替换和变换的基本技术。密钥长度和明文块长度决定了需要运行的轮数。最少轮数为10(当密钥长度和明文块长度都为128位时),最多轮数是14。DES和Rijndael的一个主要不同之处是:所有的Rijndael操作都涉及整个字节,而不是字节的单个位。这使得可以更好的进行该算法实现的硬件和软件优化。Rijndael的步骤如下:
完成以下一些一次性初始化处理:
1.扩展16字节的密钥,以得到所用的实际的密钥块;
2.完成16字节明文块(称为状况)的一次性初始化;
3.该状况与密钥块进行XOR运算。
对每一轮,完成以下工作:
1.对每个明文块应用S盒;
2.把明文块的k行旋转k个字节;
3.执行一个混合列操作;
4.该状况与密钥块进行XOR运算。

3.一次性初始化操作

3.1 得到实际密钥块
与正常情况不一样,该算法的输入是密钥和明文。在这种情况下,密钥长度是16字节。这一步是要把这个16字节密钥扩展到11个数组中,每个数组含有4行4列。密钥扩展过程下图所示:
在这里插入图片描述
换句话说,初始16字节的密钥被扩展为一个含有11×4×4=176字节的密钥。这11个数组中的一个用于初始化处理,其余10个数组用在10轮中,每轮一个数组。
AES上下文中的术语“词”,一个词意为4个字节,所以,16个字节的初始密钥(4个词)将扩展成为176个字节的密钥(44个词)。
(1)首先,把初始16字节的初始密钥复制到扩展密钥的前4个词中,如下图所示:
在这里插入图片描述
另一种表示如下图所示:
在这里插入图片描述
(2)如上填充了扩展密钥的第一个数组(标号为W0~ W3)后,逐个填充剩余的10个数组(标号为W4~W43)。每次填充一个4×4的数组,即4个词。添加每个密钥数组块与上一个块以及位于该块之前的第4个块有关,也就是说,添加的每个词的W[i]与W [i-1]和W [i-4]有关,其逻辑如下:
(a)在W数组中,如果索引是4的倍数的词,就需要使用一些复杂的逻辑,即对于W[4],W[8],W[12],⋯,W[40],其填充逻辑如下图所示:
在这里插入图片描述
(b)对于其他的词,只需要简单的XOR运算即可。
在图3-4中,第一for循环,用来将输入密钥块复制到输出密钥块的前四个词中。在第二个for循环中,将检查当前词的索引是否为4的倍数。如果是,则执行3个函数Substitute、Rotate和Constant。如果不是,则只需要把前面第一个词和前面第四个词进行XOR运算。
函数Substitute对输入词的每个字节进行字节替换。为此使用了下表所示的S盒:
在这里插入图片描述
函数Rotate把词的内容完成一个左移位循环,每次移动一个字节。这样,如果输入词中含有标号为[B1 B2 B3 B4]的四个字节,那么输出词将含有四个字节为[B2 B3 B4 B1]。
在函数Constant中,以上步骤的输出与一个常量进行XOR运算。该常量是一个词,由4个字节组成的。该常量的值与轮数有关,常量词的后三个字节总为0。这样,与这样的一个常量进行XOR运算的输入词总是与输入词的第一个字节进行XOR运算一样,每轮的常量值如下表所示:
在这里插入图片描述
3.2 明文块的一次性初始化
这里把16字节的明文块复制到一个称为state的二维4×4数组中,复制顺序是按列进行,也就是,该明文块的前4个字节复制到state数组的第一列中,接下来的4个字节复制到state数组的第二列中,一次类推,复制顺序如下图所示:
在这里插入图片描述
3.3 密文块与state数组进行XOR运算
现在扩展密钥的前16字节(即4个词W[0],W[1],W[2]和W[3])进行XOR运算后存储到16字节的state数组(即图3-5所示的B1~B16)。于是,state数组中的每个字节被其自己扩展密钥的对应字节做XOR运算后的结果替换。

4.每轮的操作

对于每一轮,运行下面步骤10次。
4.1 对每个明文字节应用S盒
这一步很简单,按state数组的内容查找S盒(对应于表3-1)。用S盒的对应项替换state数组的内容,从而完成逐个字节的替换。
4.2 把明文块的k行旋转k个字节
State数组(有4行)的每一行都向左旋转,行0旋转0个字节(即不旋转),行1旋转1个字节,行2旋转2个字节,行3旋转3个字节。这有助于数据的混淆。其旋转后的数组表示如下表所示:
表3-3 旋转操作前后数组对比初始数组	旋转后的数组1 5 9 132 6 10 143 7 11 154 8 12 16	1 5 9 136 10 14 211 15 3 716 4 8 12
4.3 进行混合列操作
现在进行混合列操作,且相互之间是没有关联的,这需要使用到矩阵相乘操作。这一步输出是旧值与常量矩阵进行矩阵相乘的结果。
state数组组织成了一个4×4的矩阵,矩阵相乘是一次一列(即一次4个字节)进行的。列的每个值要与矩阵的每个值相乘(即总共进行16次乘法),这些相乘的结果一起进行XOR运算,只生成4个字节,用作下一个state数组。这种乘法是每次用矩阵的一行乘以state列的每个值。
这里总共有4个输入、16次乘法、12次XOR运算以及4个输出字节。
4.4 把state数组与密钥块进行XOR运算
这一步是把该轮的密钥与state数组进行XOR运算。
对于解密,其执行过程正好相反。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值