一、前言
DES不靠谱,大佬们从世界征集加密算法,AES突出重围。期末考试第六项--AES加密算法。
二、轮密钥生成
1、密钥长度
不同于DES的64位密钥,AES不仅扩展了密钥长度,并且还提供了三种密钥长度供人们选择,分别是128位、196位、256位。
不同的密钥长度,决定了密钥生成过程中轮密钥生成数量。128位产生10轮密钥,196轮产生12轮,256轮产生14轮。
但是无论密钥长度是多长,其加密原理都是一样的,因此 我们选择128位的密钥 来进行对AES的讲解。
2、密钥的一轮循环
当我们创建了128位密码后,我们需要先对密码进行分组排列,1字节 - 8比特 为1组,我们可以将128位密码 Key 分为16组:s0,s1...s15。并将它如图排列,每列标号位w_i
轮密钥的生成公式分两种,是通过该密钥的下标i来决定的。
①wi : i不是4的倍数 wi = w(i-4) + w(i-1)
如:i = 5时 w5 = w1 + w4
②wi : i是4的倍数 wi = w(i-4) + T[w(i-1)]
如:i = 4时 w4 = w0+T[w3]
T[ ]是一个函数
3、T函数运算
① 字循环
将原本为s0、s1、s2、s3的w序列,进行移位循环
变为s1、s2、s3、s0
② 字节代换
将字循环后的w0通过S盒映射
如:s1 = 00101101 中有8比特位
前4位控制行 0010 = 2 (行)
后4位控制列 1101 = 13 (列)
找到S盒中的2行13列的值,替代s1
s2、s3、s0 也是一样的操作
③ 轮常量异或
用给定的常量与字节代换后的结果进行异或
三、AES加密过程
1、初始加密
当我们输入完明文M和密钥key之后,我们会对M和key进行摩尔加,这里叫做初始加密,或者入口处理变换。
2、轮加密函数
轮加密函数分为两种:
1、前1~9轮:字节代替变换、行移位变换、列混合变换、轮密钥加
2、第10轮:字节代替变换、行移位变换、轮密钥加
① 字节代替变换:
将128位明文M 分为16组:s0,s1...s15。并将它如图排列,每列标号位w_i
查找s盒,高四位确定行,低四位确定列进行替换。
② 行移位:
将第一行移位0位
将第二行移位1位
将第三行移位2位
将第四行移位3位
③列混合:
行移位后的行列式 与 一个给定的常量行列式 相乘(多项式模乘)
④轮密钥加:
将该轮密钥key_i与列混合后的值进行摩尔加
执行完第十轮后,得出密文C