AES算法

  • Post author:
  • Post category:其他




算法简介

AES本质是一种对称分组密码体制,采用代替/置换网络。每轮由三层组成:线性混合层确保多轮之上的高度扩散,非线性层由16个S盒并置起到混淆的作用,秘钥加密层将子秘钥异或到中间状态。

AES加密数据块和秘钥长度可以是128比特,192比特,256比特,AES加密有很多轮的重复和变换。

大致步骤如下:

  • 1、秘钥扩展(KeyExpansion)
  • 2、初始化轮(Initial Round)
  • 3、重复轮(Rounds),每一轮又包括:SubBytes,ShiftRows,MixColumns,AddRoundKey
  • 4、最终轮(Final Round),最终轮没有MixColums)

    在这里插入图片描述



AES的轮函数



字节代换 (SubBytes)

非线性代换,

独立地

对状态的

每个字节

进行,并且代换表(S盒)可逆,记为ByteSub(State),分两步:

  • (1)将字节作为GF(2

    8

    )上的元素映射到自己的逆元
  • (2)将字节做GF(2)上的放射变换,即 y=Ax

    -1

    +B,其中A是一个GF(2)上8☓8的可逆矩阵,B是GF(2)上一个8位列向量

在这里插入图片描述

AES的S盒

在这里插入图片描述

S盒的使用:输入8a,输出就是7e

在这里插入图片描述



逆字节代换

逆字节替代变换是字节替代变换的逆变换,在状态的每个字节上应用逆S盒

y=A

-1

(x-B)

输入7e,输出8a

在这里插入图片描述

上述S-盒对状态的

所有字节

所做的变换记为ByteSub (State)

在这里插入图片描述



行移位(ShiftRow)

将状态阵列的各行进行循环移位,不同行的移位量不同:

  • 0行:不动
  • 1行:循环左移C1字节
  • 2行:循环左移C2字节
  • 3行:循环左移C3字节

在这里插入图片描述

算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数N

b

为分组长度除32,可看成字节组成的一维数组。

N

b

=6的状态阵列

在这里插入图片描述

行移位示意图:

在这里插入图片描述



逆行移位

逆行移位变换是行移位变换的逆变换,它对状态的每一行进行循环右移

  • 第0行保持不变
  • 第1行循环右移C1个字节
  • 第2行循环右移C2个字节
  • 第3行循环右移C3个字节


列混淆(MixColumn)

将每列视为GF(2

8

)上多项式,与固定的多项式c(x)进行模x4+1乘法,要求c(x)模x4+1可逆。

在这里插入图片描述

列混淆运算也可写为矩阵乘法。

在这里插入图片描述

示意图:

在这里插入图片描述



轮密钥加(AddRoundKey)

轮密钥与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到。轮密钥长度与分组长度相同



密钥编排

密钥编排指从种子密钥得到轮密钥的过程,它由密钥扩展和轮密钥选取两部分组成。其基本原则如下:

  • (1)轮密钥的比特数等于分组长度乘以轮数加1;例如要将128比特的明文经过10轮的加密,则总共需要(10+1)*128=1408比特的密钥。
  • (2)种子密钥被扩展成为扩展密钥;
  • (3)轮密钥从扩展密钥中取,其中第1轮轮密钥取扩展密钥的前N

    b

    个字,第2轮轮密钥取接下来的N

    b

    个字,如此下去。


密钥扩展

扩展密钥是以4字节字为元素的一维阵列,表示为W[Nb* (Nr+1)],其中前Nk个字取为种子密钥,以后每个字按递归方式定义。扩展算法根据Nk≤6和Nk>6有所不同。

种子密钥:以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除32

N

k

=4的情况:
在这里插入图片描述

在这里插入图片描述

N

k

<=6

在这里插入图片描述

在这里插入图片描述



轮密钥选取

轮密钥i(即第i 个轮密钥)由轮密钥缓冲字W[Nb* i]到W[Nb*(i+1)]给出,如图所示。

在这里插入图片描述



版权声明:本文为qq_41683305原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。