type
status
date
slug
summary
tags
category
icon
password
AES 加密算法分类
本篇主要研究AES-128
AES-128 原理分析
参数
Data: 128 位
Key: 128 位
Mode:AES 工作方式,加密或者解密 (CBC 模式和 ECB 模式)
AES 加密算法流程
1、n 个子密钥生成
2、子密钥和data进行密钥加法层运算(xor)
3、密钥加法层的结果进行字节代换层运算
4、进入行位移层运算,移位
5、进入列混淆层运算,乘以混淆矩阵
6、一共进行10轮这样的加密,最后一步不用列混淆,得到密文
AES 算法流程图
1.0 密钥加法层
这里是将 128 位的明文 x 和 128 位的密钥 k[0]进行一个按字节异或的操作,前提是按照固定的排列顺序
2.0 字节代换层
需要用到一个 s 盒,如下
这里的理解如下,输入的字符 1:0011 0001,即(0011,0001),即 (3,1),取到 0xC7
3.0 行位移——shiftrows
这里的解释就是,第一行不变,然后第二行左移 1 个字节,第三行左移 2 个字节,第四行左移 3 个字节, 解密时就是一个相反的过程:
4.0 列混淆——mixcolumn
这里主要是左乘了一个矩阵,然后将加法和乘法运算利用 GF (128) 下的有限域去求解,转成特殊的运算,从而使得输入的数据再次混淆,这里解密时,用的是正矩阵的逆矩阵:
加密完毕,最后应该注意要将密文结果从矩阵形式还原成字符串形式输出!
这就是一轮的加密处理操作,当进行到最后一轮的时候,不再进行列混淆的操作了
5.0 密钥生成
这里有个 g 函数的处理,作用主要有 2 个
- 一是增强密钥编排中的非线性
- 二是消除 aes 中的对称性,可以有效地抵抗分组密码的攻击
从这里可以看到,k0 就是初始密钥 k,然后(1,4)通过异或运算生成了 5,接着(2,5)生成了 6,以此类推
每 4 个为一个周期生成密钥,一共生成了 16 个密钥 (如果轮数是 16 的话)
6.0 解密
刚好是反向的过程,但是第一次有列混淆的逆向处理操作,最后回到第一轮时就没有了,同时 s 盒是变的,然后其他的都是可以逆向的,难点其实是 S 盒和逆 S 盒的生成,涉及到数论的知识点,我们这里会用即可