详细描述AES算法中的字节代换、行移位、列混合、轮密钥加、密钥扩展、逆字节代换、逆行移位、逆列混合、逆轮密钥加的原理和过程、所用的式子、所用的数学算法
时间: 2023-10-05 16:15:13 浏览: 54
AES算法是一种对称加密算法,主要包含以下几个步骤:
1.密钥扩展(Key Expansion):将输入的密钥扩展为一系列轮密钥。这个步骤是在加密和解密过程中都需要的。
2.初始轮密钥加(Initial Round):将输入的明文与第一个轮密钥进行异或操作。
3.重复轮(Rounds):重复进行代换、移位、混合和轮密钥加操作,共进行n-1轮,其中n为加密密钥长度(128、192或256位)。
4.最后一轮(Final Round):在最后一轮中,不再进行列混合操作。
5.逆处理(Inverse Transformation):将最后一轮处理的结果与最后一个轮密钥进行异或操作,并进行逆列混合、逆行移位和逆字节代换操作。
下面分别介绍其中的每一个步骤:
1.密钥扩展(Key Expansion):
密钥扩展是将输入的密钥扩展为一系列轮密钥的过程。扩展后的轮密钥的数量与密钥长度有关,对于128位加密密钥,需要扩展10个轮密钥;192位加密密钥,需要扩展12个轮密钥;256位加密密钥,需要扩展14个轮密钥。
密钥扩展的主要步骤如下:
(1)将密钥按列排列,每列4个字节,共有N列,N=密钥长度/4。
(2)对于每个列,通过一系列代换、移位和异或操作,生成4个新的字节。
(3)将生成的4个字节与上一个轮密钥的4个字节进行异或操作,生成本轮的轮密钥。
(4)重复第(2)和第(3)步,直到生成所有的轮密钥。
2.初始轮密钥加(Initial Round):
初始轮密钥加是将输入的明文与第一个轮密钥进行异或操作的过程。
假设输入的明文为M,第一个轮密钥为K0,则初始轮密钥加的结果为M ⊕ K0。
3.重复轮(Rounds):
重复轮的过程包含以下四个步骤:字节代换、行移位、列混合和轮密钥加。
(1)字节代换(SubBytes):
字节代换是将输入的明文中的每个字节替换为一个固定的值。这个固定的值是通过一个S盒(Substitution Box)查表得到的。S盒是由16×16的矩阵构成的,输入一个字节,就会输出另一个字节。
(2)行移位(ShiftRows):
行移位是将输入的明文中的每一行循环左移一定的位数。第一行不移动,第二行左移1个字节,第三行左移2个字节,第四行左移3个字节。这个移位操作可以增加明文的随机性。
(3)列混合(MixColumns):
列混合是将输入的明文中的每一列进行混合的操作。混合的过程是通过矩阵乘法实现的。具体来说,将每一列看成一个四维向量,通过一个固定的矩阵进行乘法运算得到一个新的四维向量。
(4)轮密钥加(AddRoundKey):
轮密钥加是将输入的明文与当前轮的轮密钥进行异或操作的过程。假设当前轮密钥为Ki,则轮密钥加的结果为M ⊕ Ki。
重复轮的过程可以分成n-1轮和最后一轮两个部分。在n-1轮中,需要进行字节代换、行移位、列混合和轮密钥加操作;在最后一轮中,只需要进行字节代换和轮密钥加操作。
4.逆处理(Inverse Transformation):
逆处理是将最后一轮处理的结果与最后一个轮密钥进行异或操作,并进行逆列混合、逆行移位和逆字节代换操作。
逆处理的主要步骤如下:
(1)逆轮密钥加(Inverse AddRoundKey):
将最后一轮处理的结果与最后一个轮密钥进行异或操作。
(2)逆列混合(Inverse MixColumns):
逆列混合是将最后一轮处理的结果中的每一列进行反向混合的操作。混合的过程是通过矩阵乘法实现的。具体来说,将每一列看成一个四维向量,通过一个固定的矩阵进行乘法运算得到一个新的四维向量。
(3)逆行移位(Inverse ShiftRows):
逆行移位是将最后一轮处理的结果中的每一行循环右移一定的位数。第一行不移动,第二行右移1个字节,第三行右移2个字节,第四行右移3个字节。
(4)逆字节代换(Inverse SubBytes):
逆字节代换是将最后一轮处理的结果中的每个字节替换为一个固定的值。这个固定的值是通过一个逆S盒(Inverse Substitution Box)查表得到的。逆S盒是由16×16的矩阵构成的,输入一个字节,就会输出另一个字节。
以上就是AES算法中的字节代换、行移位、列混合、轮密钥加、密钥扩展、逆字节代换、逆行移位、逆列混合、逆轮密钥加的原理和过程、所用的式子、所用的数学算法的详细描述。