AES加密算法介绍
AES(Advanced Encryption Standard)算法是一种对称加密算法,它对数据进行加密时执行了一系列复杂的变换。AES算法的核心是由四个基本操作组成的一轮变换,这些操作包括:
-
字节代换(SubBytes) :
- 这一步是对状态矩阵中的每一个字节进行非线性替换。AES定义了一个 S 盒(S-box),这是一个固定的查找表,用于将输入字节映射到另一个输出字节。S 盒的设计是为了增加算法的复杂度,使得加密更加难以被破解。
-
行位移(ShiftRows) :
- 这一步是将状态矩阵的每一行向左循环移位。第一行不移动,第二行向左移一位,第三行向左移两位,第四行向左移三位。这一操作增加了数据块内部的扩散性。
-
列混合(MixColumns) :
- 这一步是对状态矩阵的每一列应用一个固定的线性变换,通常通过矩阵乘法实现。这一操作增强了数据块之间的相互依赖性,使得单个字节的变化能够影响到整个数据块。
-
轮密钥加(AddRoundKey) :
- 这一步是将轮密钥与状态矩阵中的数据进行逐位异或操作。轮密钥是从主密钥派生出来的,每一轮都有不同的轮密钥。这一操作确保了每一轮变换的结果都是基于密钥的,从而增加了破解难度。
AES算法的加密过程通常包括一个初始轮密钥加操作,然后是多轮上述四个操作的重复执行,最后再执行一次不包括列混合的变换。对于AES-128,总共有10轮变换;对于AES-192,有12轮;对于AES-256,则有14轮。
示例流程
以AES-128为例,加密过程大致如下:
- 初始轮密钥加 :
- 将初始明文与第一个轮密钥进行逐位异或。
- 9轮主要变换 :
- 每轮包括:字节代换、行位移、列混合、轮密钥加。
- 最终轮变换 :
- 包括:字节代换、行位移、轮密钥加(不包括列混合)。
通过这些变换,AES算法实现了对数据的加密,使得即使知道加密算法的具体步骤,没有正确的密钥也很难恢复原始数据。
AES的不同模式比较
AES的不同工作模式指的是在使用AES算法进行数据加密和解密时采用的不同策略。虽然AES算法本身的加密和解密过程(即上述的字节代换、行位移、列混合、轮密钥加)是相同的,但不同的工作模式会影响数据如何被处理以及密钥如何应用于数据。以下是几种常见的AES工作模式特点和其优缺点:
- ECB(Electronic Codebook)模式 :
- 每个数据块独立地使用相同的密钥进行加密或解密。
- 优点:
- 是简单、快速、支持并行计算。
- 缺点:
- 相同的明文块总是产生相同的密文块,密文会暴露明文的排列顺序。
- 通过删除、替换密文分组可以对明文进行操作。
- 密文比特位出错时对应的分组也会出错。
- 不能抵御重放攻击。
- 安全性较低。
- CBC(Cipher Block Chaining)模式 :
- 每个数据块在加密前与前一个密文块进行异或操作,首块使用一个初始化向量(IV)。
- 解密时,先用密钥解密当前密文块,然后与前一个密文块异或得到明文。
- 提供了更好的扩散性,使得相同的明文块在不同的位置会产生不同的密文块。
- 优点:
- 明文重复排列不会反应在密文中。
- 解密支持并行计算。
- 呢能够解密任意密文分组。
- 缺点:
- 对包含错误比特的密文解密时,第一个分组的全部比特以及后一个分组的相应比特会出错。
- 加密不支持并行。
- CFB(Cipher Feedback)模式 :
- 将前一个密文块的一部分(或一个完整的块)作为反馈输入到加密函数中,产生的输出与当前明文块异或得到当前密文块。
- 解密时,同样的过程被用于生成一个伪随机序列,与密文块异或得到明文。
- 可以将块加密算法转换为流加密算法。
- 优点:
- 不需要填充(padding)。
- 解密支持并行。
- 能够解密任意密文分组。
- 缺点:
- 加密不支持并行。
- 对包含某些错误比特的密文进行解密时,第一个分组的相应比特及后一个分组的全部比特会出错。
- 不能抵御重放攻击。
- OFB(Output Feedback)模式 :
- 与CFB类似,但密文块不直接参与当前明文块的加密过程,而是通过将密钥和前一个密文块(或其部分)的加密结果作为反馈,生成一个伪随机序列,与明文块异或得到密文块。
- 解密时,使用相同的伪随机序列与密文块异或得到明文。
- 优点:
- 不需要填充。
- 可提前做好加密解密的准备,提高生成密文或者明文的速度。
- 对包含某些错误比特的密文进行解密时,只有相应的比特会出错。
- 缺点:
- 不支持并行计算。
- 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转。
- CTR(Counter)模式 :
- 使用一个计数器(通常是一个初始化向量IV)加上一个递增的数值,作为每个数据块的输入,通过加密函数生成伪随机序列,与明文块异或得到密文块。
- 解密时,使用相同的计数器序列与密文块异或得到明文。
- 允许并行处理,提高了性能。
- 优点:
- 不需要填充。
- 可提前做好加密解密的准备。
- 加解密结构相同。
- 对包含某些错误比特的密文进行解密时,只有相应的比特会出错。
- 加解密都支持并行计算。
- 缺点:
- 主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转。
每种模式都有其适用场景和优缺点。例如,ECB适用于不需要扩散性的简单场景,而CBC则更适合需要更高安全性的应用场景。CFB和OFB模式适用于流加密,而CTR模式支持并行处理,提高了效率。选择哪种模式取决于具体的应用需求,如安全性要求、性能考虑等。
S-box之谜
S-box 是 AES 算法的一个核心组件,用于提供非线性变换,增强算法的安全性。AES 的 S-box 是预先定义好的,并且在整个加密过程中保持不变。S-box 的设计是基于有限域 GF(2^8) 上的数学运算,具体来说,它结合了多项式逆元、仿射变换和其他操作来构建一个固定的非线性映射表。
S-box 的设计目的是为了增加算法的复杂度,使得攻击者难以通过简单的数学手段来推断出密钥或明文。S-box 的固定性质意味着无论何时执行 AES 加密或解密,只要使用的密钥和模式相同,S-box 的行为就是一致的。
在 AES 的加密过程中,S-box 用于替换状态矩阵中的每一个字节,这个过程称为“字节代换”(SubBytes)。每个字节通过查找 S-box 得到一个对应的输出字节,这个过程是固定的,并且在 AES 标准中明确定义。这种固定的特性有助于确保 AES 算法的安全性和一致性。
AES128名称简单介绍
128bit == 16byte,当选择128比特的分组长度时,AES可以对16字节的明文进行加密,并生成16字节的密文。
Copyright
/**
* @file aes.md
* @author jimu (minijimu@foxmail.com)
* @brief 分组密码是如何迭代的
* @version 0.1
* @date 2024-09-01
* @reference 《图解密技术-第3版》
* @copyright Copyright (c) 2024
*
*/