AES对称加密算法
1.加密原理
它通过轮变换中的四个过程和在各轮变换中生成子密钥的方法来实现。
2.加密
.相关系数
设明文分组 (状态矩阵) 为 4 行 Nb 列,原始密钥为 4 行 Nk 列矩阵。 加密轮数 Nr = max {Nb + Nk} + 6 .
.流程
AES加密开始——读入原文——读入原始密钥——(1)产生轮子密钥——(2) AddRoundkey 变换——(3)轮变换: { ByteSub(); ShiftRow(); MixColumn(); AddRoundKey(); }——(4)最后轮变换:ByteSub(); ShiftRow (); AddRoundKey(); }——形成AES密文,加密结束
其中,步骤(3)重复进行 Nr - 1 轮
AES解密开始——读入密文——读入原始密钥——(1)产生轮子密钥——(2) AddRoundkey 变换——(3)轮变换: { 逆ByteSub(); 逆ShiftRow(); 逆MixColumn(); AddRoundKey(); }——(4)最后轮变换:逆ByteSub(); 逆ShiftRow (); AddRoundKey(); }——形成AES明文,解密结束
其中,步骤(3)重复进行 Nr - 1 轮
.轮变换过程
- ByteSub变换: 由加密S-盒映射实现(解密时有类似的解密S-盒);
- ShiftRow变换: 将状态矩阵的第 i 行循环左移 Ci 个 字节,一般 (C0, C1, C2, C3) = (0,1,2,3);
- MixColum变换: 将状态矩阵列的每列视为在 F(2的8次方) 上且次数小于4的多项式,将每列表示的多项式乘以a(x):
再将所得结果模 x的4次方+1,因为a(x)与 x的4次方+1 互素,从而保证了此变换是可逆的,由欧几里德扩展算法可求得其逆。
- AddRoundKey变换: 圈密钥是原始密钥通过密钥扩展得到的子密钥。圈密钥加法就是将状态矩阵与圈密钥矩阵进行模2加。
.轮变换生成子密钥
设明文矩阵为 Nb 列,原始密钥为
列数为Nk,则轮数 Nr = max(Nb, Nk) + 6 。分2种情况:
- 若 Nb ≤ 6,当 i 为 0 到 Nk - 1 时 ,定义第 i 个子密钥wi = ki ; 当 i 在 Nk 与 Nr-1 之间时,如果 i mod Nk ≠ 0 , 定义
否则令
为圈常数,Rcon [ i ]中每个分量视为有限域F(2的8次方)中的元素,定义Rotate是左移一个字节操作,ByteSub 是以一个4字节字作为输入,并返回对该四个字节字的每一个字节都进行一次 ByteSub 变换所得到的结果
- 若 Nk > 6,只多了一种条件下的操作: 当 i 为4的倍数时,须将前一个字 经过ByteSub 变换。
版权归原作者 打怪升级& 所有, 如有侵权,请联系我们删除。