图解DES、3DES和AES加密算法

阅读: 评论:0

图解DES、3DES和AES加密算法
⽂章⽬录
⼀、DES
1. 加密和解密
DES是⼀种将64bit的明⽂加密成64bit的密⽂的对称加密算法。它的密钥长度是56bit。从规格上来讲,DES密钥长度是64bit,但是由于每隔7bit会设置⼀个⽤于校验检查的校验位,所以实质上密钥长度是56bit。
DES是以64bit的明⽂为⼀个单位来进⾏分组加密的,所以DES每次只能加密64bit的数据。如果需要加密很长的数据,就需要对DES加密进⾏迭代,⽽迭代的具体⽅式就称为模式(ECB、CBC、CFB、OFB、CTR)。
2. DES的结构(Feistel⽹络)
DES的基本结构是由Horst Feistel设计的,因此也叫Feistel⽹络、Feistel 结构 或者Feistel密码。很多密码算法中都⽤到这种结构。
在Feistel⽹络中,加密的各个步骤称之为轮,整个加密过程就是进⾏若⼲次轮的循环。DES 是⼀种16轮循环的Feistel⽹络。
上图表⽰Fesitel⽹络中的⼀轮,根据上图讲解⼀下Fesitel⽹络的具体结构。
1.
1. 上⾯两个⽅框表⽰本轮要加密的64bit 明⽂,输⼊的数据会被分为左右两个部分分别处理。
2. 下⾯两个⽅框表⽰本轮输出的左侧(密⽂)和右侧(明⽂)
3. 中间的⼦密钥指的是本轮加密所使⽤的密钥,在Fesitel⽹络中,每⼀轮都需要不同的⼦密钥。由于⼦密钥只是在⼀轮中使⽤,所以它
是局部密钥,因此才被称为⼦密钥。
4. 轮函数 的作⽤是根据 右侧 和 ⼦密钥 ⽣成对左侧进⾏加密的bit序列,它是密码系统的核⼼。将轮函数输出的bit序列与左侧进⾏异或
运算,其结果就是加密后的左侧。
5. 输⼊的右侧将直接输出
如果只看上⾯,我们的右侧是没有被加密的,所以我们才需要⽤不同的⼦密钥进⾏多次的轮操作,并且每两轮直接左右需要对调。如下图:
上图是进⾏了3轮循环,DES加密是16轮。
⼆、3DES
1. 3DES加密
3DES也是三重DES,是为了增加DES的强度,将DES重复3次所得到的⼀种加密算法。
由于DES密钥长度实质上是56bit,此三重DES的密钥长度就是3*56=168 bit。
上图我们可以发现,三重DES并不是进⾏三次DES加密(加密 -> 加密 -> 加密),⽽是加密-解密-加密的过程。为什么加密算法中要加⼊解密算法呢?其⽬的是为了让3DES兼容普通的DES。
当三重DES中所有密钥都相同时,三重DES就等于普通的DES了。因为前两次加密-解密得到的就是最初的明⽂,然后在进⾏⼀次DES加密,就相当于只做了⼀次DES加密。因此以前⽤DES加密的密⽂,也能⽤3DES来进⾏解密。
如果密钥1和密钥3相同,密钥2使⽤不同的密钥,这种三重DES就称为 DES_EDE2,如下图:
2. 3DES解密
三重DES解密过程和加密过程正好相反,以密钥3-密钥2-密钥1的顺序执⾏解密-加密-解密的操作
三、AES
AES也是分段加密的,它是取代DES⽽成为新标准的⼀种对称密码算法。
1. AES最终候选算法和算法确定
AES最终候选算法名单
名称提交者
MARS IBM公司
RC6RSA公司
Rijndael Daemen、Rijmen
Serpent Anderson、Biham、Knudsen
Twofish Coumterpane公司
最终Rijndael,被NIST选定为AES标准
2. Rijndael
2.1 什么是Rijndael
Rijndael的分组长度和密钥长度可以分别以32bit为单位在128bit~256bit范围内进⾏选择,不过在AES的规格中,分组长度固定为
128bit,密钥长度只有128、192和256bit 三种。
2.2 Rijndael的加密和解密
和DES⼀样,Rijndael算法也是由多个轮构成,其中每⼀轮分别为SubBytes(逐字节替换)、ShiftRows(平移⾏)、MixColumns(混合列) 和 AddRoundKey(与轮密钥异或) 共4个步骤。
Rijndael输⼊分组为128bit,也就是16字节。输⼊的明⽂和密钥都是由16个字节组成的数据,它是按照字节的先后顺序从上到下、从左到右进⾏排列的。
然后对输⼊的16个字节逐个进⾏SubBytes处理。所谓SubBytes,就是以每个字节的值(0~255的任意
值)为索引,从⼀张拥有256个值的替换表(S-Box)中查出对应值的处理(注意:S-Box表是通过某种⽅法计算出来的)。简单说就是将⼀个1字节的值替换成另⼀个1字节的值。如下图所⽰为4x4=16字节的数据中通过S-Box替换1字节的情形。
SubBytes之后需要进⾏ShiftRows处理。这⼀步是将以4字节为单位的⾏按照⼀定的规则向左平移。且每⾏平移的字节数是不同的。如下图:
ShiftRows之后需要进⾏MixColumns处理。混合列变换是通过矩阵相乘来实现的,经⾏移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵,如下图:
最后将MixColumns输出的与轮密钥进⾏异或,即进⾏AddRoundKey 处理。如下图:
通过上⾯的结构我们可以知道AES⼀轮加密的过程,经过⼀轮已经感觉很复杂了。⽽完整的AES加密需要经过多轮,密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。
3. AES密钥⽣成
上⾯讲了明⽂加密过程,现在讲⼀下AES密钥⽣成过程.
128位密钥也是⽤字节为单位的矩阵表⽰,矩阵的每⼀列被称为1个32位⽐特字。通过密钥编排函数该密钥矩阵被扩展成⼀个44个字组成的序列W[0],W[1], … W[42],W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,⽤于加密运算中的初始轮AddRoundKey。后⾯40个字分为10组,每组4个字(128⽐特)分别⽤于10轮加密运算中的AddRoundKey,如下图所⽰:
图⽚来源:
4. AES算法流程图
AES解密过程就是⼀个逆过程,这⾥就不细讲了。
参考博客:、、
参考书籍:《图解加解密技术》

本文发布于:2023-05-05 22:23:51,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/88727.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:密钥   加密   矩阵   算法   长度   处理   密码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图