AES加密详细解释
AES加密详细解释
AiY0uAES简单介绍
常见密码算法我们将其分为三类:
- 对称密码算法(Symmetric-key Algorithm)
- 非对称密码算法(Asymmetric-key Algorithm)
- 摘要算法(Digest Algorithm)
对称密码算法是指加密秘钥和解密秘钥相同的密码算法
而对称密码又分为分组密码算法和流密码算法
进入正题:
AES全称为Advanced Encryption Standard(高级加密标准),属于对称密码算法中的分组密码算法
分组密码大体上是先将明文分成若干个明文块,再对每个明文块用相同的密钥和算法进行加密,最后将加密后的密文块拼接在一起。
AES是目前安全强度最高且广泛应用的分组密码。
常见的AES-128处理128比特的块,使用的是128比特的密钥。该密码在实际上想要破解是不可行的,目前公开的任何攻击方法也只是理论上可行。
AES-128加密流程
我们先准备一个s-box
我们后续会需要用到
一、密钥拓展
我们最初应当由128位初始密钥,形成一个 4×4 字节矩阵(16 字节)
W₀ | W₁ | W₂ | W₃ | W₄ | W₅ | W₆ | W₇ |
---|---|---|---|---|---|---|---|
00 | 10 | 20 | 30 | ||||
01 | 11 | 21 | 31 | ||||
02 | 12 | 22 | 32 | ||||
03 | 13 | 23 | 33 |
以上表格中每一个元素都是十六进制
上表中,左侧4*4矩阵已经可以成为第一块轮密钥,在后续的加密过程中,它负责参与对明文块的第一轮加密
我们需要按照以下算法把矩阵往右侧延申,再得到一个4*4的矩阵,用于第二轮加密,我们把要生成的每一列元素记为Wᵢ
生成Wᵢ时,需要拿出Wᵢ₋₄和Wᵢ₋₁
然后需分类讨论:
1.当i = 4k(k=1,2,3,4……)
字循环位移
对Wᵢ₋₁要做特殊处理,先把它向上循环平移一字节
S盒替换
然后掏出S-BOX
对十六进制数ab,就去找S-box中a行b列的元素,替换原本的元素
轮常量异或
再掏出Wᵢ₋₄和轮常量轮常量 Rcon (i/4) ,让它仨对应位置异或(即w[i] = w[i-1] ⊕ w[i-4] ⊕ Rcon (i/4)),得到的就是新的Wᵢ ⨁
⨁ Rcon (i/4) = ?
2.当i ≠ 4k
直接让w[i] = w[i-1] ⊕ w[i-4]
也就是说我们正常情况下,生成一轮密钥需要一次情况1,三次情况2
最终我们需要再生成十块轮密钥,共十一
之后我们将每块轮密钥称为RoundKey[i]
二、初始轮
仅执行轮密钥加(AddRoundKey
将明文块(state)与第一个轮密钥逐字节异或
1 | State = State ⊕ RoundKey[0] |
三、主轮
1. 字节替换(SubBytes)
通过S盒对State中的每个字节进行替换
2.行移位(ShiftRows)
第一行循环左移0字节
第二行循环左移1字节
第三行循环左移2字节
第四行循环左移3字节
3.列混合(MixColumns)
首先声明列混合是在有限域GF(2⁸)上进行的
在这一步操作中。需要对State中的每一列进行有限域GF(2⁸)上的矩阵乘法
1 | | b0 | | 02 03 01 01 | | a0 | |
其中等号左侧[b0, b1, b2, b3]^T
是变换后的结果列
右侧[a0, a1, a2, a3]^T
是原始列的四个字节
右边矩阵是 AES 标准中固定的 4×4 矩阵,元素为 GF(28) 中的常量
有限域GF(2⁸)上的运算法则参照另一篇博客
我还没写,应该快了
4.轮密钥加(AddRoundKey)
将State
与当前轮的轮密钥逐字节异或。
1 | State = State ⊕ RoundKey[i](i 为轮数) |
四、最终轮
最终轮除了缺少列混合操作外,其余三步与主轮一致
最终加密流程可以表示为:
1 | 明文块(128位) |
AES-128解密流程
AES-128解密我们可以使用两种解密流程
应当注意两种解密流程解密时需要按逆序来使用轮密钥,从RoundKey10用到RoundKey0
密钥扩展
与加密过程相同,从128位密钥生成11个轮密钥
其他单步骤与加密过程的区别
将状态矩阵与轮密钥逐字节异或
再次强调使用轮密钥时应当倒着用,从RoundKey10用到RoundKey0
这里使用到了上文有限域GF(2⁸)中常量组成矩阵的逆矩阵
1 | | b0 | | 0E 0B 0D 09 | | a0 | |
移位的过程与行移位刚好相反
将第二、三、四行分别循环右移一定的字节,不再赘述
使用S盒的逆映射替换每个字节
全部解密流程可以表示为以下两种
1.完全颠倒无脑型
具体体现为把加密过程完全反过来
1 | 密文块(128位) |
2.主轮换序型
这种解密方式的特点是只有主轮的步骤顺序发生了变化
1 | 密文块(128位) |
这两种解密流程是完全等价的