AES加密

发布时间 2023-11-29 15:31:25作者: 上好佳28

AES加密

高级加密标准(AES,Advanced Encryption Standard)是一种对称密钥加密算法,用于保护敏感信息。它取代了原先的数据加密标准(DES),因为DES已经不再被认为足够安全

密钥是AES算法实现加密和解密的根本,对称加密对明文的加密和解密需要使用同一个密钥

AES支持三种长度的密钥:128位,192位,256位,对应AES128,AES192,AES256

填充

AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit,这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果

基本步骤

1、填充分组:

AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit,这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果

填充涉及以下三种填充模式:

NoPadding:不做任何填充,但是要求明文必须是16字节的整数倍

PKCS5Padding(默认):如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数

比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}

ISO10126Padding:如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。

比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则可能补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

2、密钥扩展:

密钥扩展是AES算法中的一个关键步骤,它负责将初始密钥扩展为每轮加密所需的轮密钥也叫子密钥(Round Keys)。AES支持三种密钥长度:128位、192位和256位,密钥扩展的细节会根据不同的密钥长度有所不同

密钥扩展的基本思想是利用初始密钥生成一系列的轮密钥,这些轮密钥将在加密的每一轮中与状态矩阵进行异或运算。密钥扩展包括以下主要步骤:

  1. 轮常量生成(Round Constants): 针对每一轮,生成一个固定的常量,用于与某一部分扩展密钥进行异或。

  2. 子密钥生成(Key Schedule): 将初始密钥分割成多个字,并对这些字进行一系列变换,生成每一轮所需的轮密钥。这个过程包括:

    • 初始轮密钥生成: 将初始密钥的字直接作为初始轮密钥。

    • 后续轮密钥生成: 初始轮密钥后面的每个字都通过一系列的变换生成。这个过程涉及字的旋转、S盒替代和与轮常量的异或运算。

不同密钥长度下,轮密钥的生成步骤和数量会有所不同。例如,128位密钥生成10轮的轮密钥,192位密钥生成12轮的轮密钥,256位密钥生成14轮的轮密钥。

密钥扩展的目的是引入密钥的复杂性,使得加密算法更加强大。它确保了每一轮加密使用的密钥都是唯一的,并且与初始密钥之间存在一定的复杂关系,提高了算法的安全性

3、初始轮加密(Initial Round):

在第一轮中,将明文与轮密钥进行异或运算。

4、多轮加密:

除了最后一轮,其余每一轮都包括四个步骤:SubBytes、ShiftRows、MixColumns、AddRoundKey。

  • SubBytes: 这一步骤是通过一个称为S盒(Substitution Box)的查找表进行的。S盒是一个16×16的字节替代表,用于将输入的每个字节替换为预定义的字节。S盒的目的是引入非线性,增强算法的安全性。S盒中的元素是经过数学运算选定的,确保了一定的代替性和扩散性

  • ShiftRows: 这一步骤涉及对AES状态矩阵的行进行位移操作。状态矩阵是一个4×4的字节矩阵,存储了输入数据。ShiftRows的目的是在不改变列的顺序的情况下,对状态矩阵的每一行进行循环左移。具体地:

    • 第1行不动。

    • 第2行左移1字节。

    • 第3行左移2字节。

    • 第4行左移3字节。

  • MixColumns: 这一步骤对状态矩阵的每一列进行混淆操作。MixColumns使用一个特定的矩阵乘法,将每一列映射成一个新的列。这个步骤的目的是增加算法的混淆性质

  • AddRoundKey: 在每一轮中,状态矩阵都与该轮的轮密钥进行异或操作。轮密钥是通过密钥扩展算法生成的

5、最后一轮

最后一轮没有MixColumns步骤,只包含SubBytes、ShiftRows、AddRoundKey。

6、加密完成:

经过多轮加密后,得到密文

 

AES算法是一个迭代的、对称的加密算法,其安全性依赖于选择的密钥长度。目前,128位的AES密钥仍然被认为足够安全,但对于更高级的安全需求,可以考虑使用192位或256位的密钥。 AES是一种快速、高效的加密算法,被广泛应用于安全通信和数据存储领域