AES和DES加密算法
阅读数:216 评论数:0
跳转到新版页面分类
算法/数据结构
正文
一、密码学的常见概念
1、代替密码
代替密码是指先建立一个替换表,加密时通过查表,将明文的每个字母依次替换为对应的字符,生成密文。
按替换表的个数又细分为:
(1)单表代替密码
即一个明文字符对应一个密文字符。
(2)多字母代替密码
字符块被成组加密。
(3)多表代替密码
明文可以映射成密文字母的多个映射。
二、DES算法
DES分组长度为64比特,使用密钥为64比特,实际使用56比特,另外8比特用作奇偶校验,密钥对明文口上进行16轮加密,加密和解密共用同一算法,所以它是对称加密算法。
1、初始转换IP与逆初始转换
(1)初始转换IP的作用:将64位明文打乱重新排列。
(2)初始置换结果分为两组:左L0(32位)、右R0(32位)
2、子密钥产生
64位密钥经过上面的步骤产生16个长度48位的子密钥。
(1)置换选择1
去掉密钥中位置位8的整数倍的奇偶校验位,共8个,去掉奇偶检验位后,生成左28位,右28位。
(2)循环左移
DES每一轮迭代对应子密钥循环左移的次数。
3、转换选择2
这是一个压缩转换,把56位的输入压缩为48位。
4、安全性
如果DES密钥太短经不起穷尽攻击。
三、3DES
3DES有两种加密方式:
1、第一、三次加密使用同一种密钥,这种方式密钥长度128位(112位有效)。
2、三次加密使用不同密钥,这种方式密钥长度192位(168位有效)。
四、AES算法
Advanced Encryption Standard的缩写,是常见的对称加密算法。
AES和DES一样都应用了轮的思想,将明文经过多轮处理得到密文。二者不同之处是,AES明文分组长度和密钥长度可以灵活组合。加密过程首先对明文进行分组,AES明文分组长度可以是128位、192位、256位;密钥长度也可以是128位、192位、256位。
1、AES数学
(1)有限域
有限域的元素个数必须是一个素数的幂次$p^n$
n为正整数,元素个数为$p^n$的有限域一般记为$GF(p^n)$
(2)乘法逆元
对于有限域$GF(p^n)$,任意的存在$w\in GF(p^n)$,$w\not=0,\quad z\in GF(p^n)$,使得$x*z\equiv 1 mod p$,则z为w在该有限域上的乘法逆元。
2、AES运算的特点
AES中的运算包含面向字节(8位)或4字节(32位)的运算。
3、AES算法框架
(1)明文矩阵
用二维矩阵表示,4行,$N_b$列,每个元素为1个字节。
$N_b=\frac{数据块长度}{32}$,当数据块长128时,$N_b=4$,当数据块192位,$N_b=6$,当数据块256位,$N_b=8$。
(2)密钥矩阵
用于维矩阵表示,4行,$N_k$列,每个元素1个宽了节。
$N_k=\frac{密钥长度}{32}$
(3)加密轮数
值取决于明文块和密钥块长度。
(4)算法框架
以AES-128为例,前9轮执行的操作相同,第10轮执行的操作与前面的不同。
加密时,明文按照128位为单位进行分组,每组包含16个字节,组成4x4的矩阵,称为明文矩阵。
以128位密钥为例,密钥长度为16个字节,也用4x4的矩阵表示,称为密钥矩阵。
AES通过密钥编排函数把密钥矩阵扩展成一个包含44个字(字=4个字节,32位)的密钥序列,其中的前4个字为原始密钥用于初始加密,后面40个字用于10轮加密,每轮使用其中的4个字。密钥递归产生的规则 如下:
如果i不是4的倍数,那么$w[i]=w[i-4]\oplus w[i-1]$,如果i是4的倍数,$w[i]=w[i-4]\oplus T(w[i-1])$
(5)字节代替
与$GF(2^8)$上的乘法逆元有关,具有良好的非线性特性。
(6)行移位
每一行都向左循环位移某个偏移量。
(7)列混淆
每一列的四个字节通过线性变换互相结合。
(8)轮密钥加
将当前矩阵与本回合矩阵合并,即矩阵中每个对京原字节异或加法。