DES和3DES的一些小总结

DES参考文章详情: https://www.cnblogs.com/songwenlong/p/5944139.html

DES之前还是在学校的密码学课程的时候学的了,上课的时候只听了个大概,最近准备复习一下。

DES表面上的顶部流程大概是这个样子

64bit的数据和56bit的密钥进行一个DES加密处理,得到64bit的密文,解密也是一样。

在细分一点的顶部处理结构大概是Feistel网络这样的结构

如果是偶数轮的话要进行一次左右对调,因为在中途交叉会导致左右位置的互换,奇数轮无影响不对调的话执行两次Feistel轮会导致解密

DES加密的内部细节

主要分为几个流程,IP置换,密钥置换,E扩展置换,S盒代替,P盒置换,IP-1末置换

IP置换

  IP置换目的是将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。

  置换规则如下表所示:

585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

  表中的数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。

 要注意一点,位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的位为1,最右边的位为64。

密钥置换

  不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56和64这8位):

57494133251791585042342618
10259514335271911360524436
635547393123157625446383022
1466153453729211352820124

  在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:

  1).将56位的密钥分成两部分,每部分28位。

  2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:

轮数12345678910111213141516
位数1122222212222221

  移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如下表(注意表中没有9,18,22,25,35,38,43和54这8位):

14171124153281562110
23191242681672720132
415231374755304051453348
444939563453464250362932

         置换方法同上,此处省略。

E扩展置换

  扩展置置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4位×8组)输出。

  扩展置换目的有两个:生成与密钥相同长度的数据以进行异或运算;提供更长的结果,在后续的替代运算中可以进行压缩。

  扩展置换原理如下表:

3212345
456789
8910111213
121314151617
161718192021
202122232425
242526272829
28293031321

  表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。

  我们举个例子看一下(虽然扩展置换针对的是上步IP置换中的R0,但为便于观察扩展,这里不取R0举例):

  输入数据0x1081 1001,转换为二进制就是0001 0000 1000 0001B,按照上表扩展得下表

100010
100001
010000
000010
100010
100000
000000
000010

  表中的黄色数据是从临近的上下组取得的,二进制为1000 1010 0001 0100 0000 0010 1000 1010 0000 0000 0000 0010B,转换为十六进制0x8A14 028A 0002。

       扩展置换之后,右半部分数据R0变为48位,与密钥置换得到的轮密钥进行异或。

S盒代替

  压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

  一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。

  8个S盒如下:

  S盒1

1441312151183106125907
0157414213110612119538
4114813621115129731050
1512824917511314100613

  S盒2

1518146113497213120510
3134715281412011069115
0147111041315812693215
1381013154211671205149

  S盒3

1009146315511312711428
1370934610285141211151
1364981530111212510147
1101306987415143115212

  S盒4

7131430691012851112415
13811561503472121101419
1069012117131513145284
3150610113894511127214

  S盒5

2124171011658315130149
1411212471315015133986
4211110137815912563014
1181271142136150910453

  S盒6

1211015926801334147511
1015427129561131401138
9141552812370410113116
4321295151011141760813

  S盒7

4112141508133129751061
1301174911014351221586
1411131237141015680592
6111381410795015142312

  S盒8

1328461511110931450127
1151381037412561101492
7114191214206101315358
2114741081315129035611

  例如,假设S盒8的输入为110011,第1位和第6位组合为11,对应于S盒8的第3行;第2位到第5位为1001,对应于S盒8的第9列。S盒8的第3行第9列的数字为12,因此用1100来代替110011。注意,S盒的行列计数都是从0开始。

  代替过程产生8个4位的分组,组合在一起形成32位数据。

       S盒代替时DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的,相比于其他步骤,提供了更好安全性。

P盒置换

  S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如下表:

167202129122817
11523265183110
282414322739
19133062211425

  表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块的第16位放到新数据的第1位,第7位放到第2位,……依此类推,第25位放到第32位。

  例如0x10A1 0001进行P盒置换后变为0x8000 0886。

  0x10A1 0001表现为表的形式(第一位位于左上角)原来为

00010000
10100001
00000000
00000001

  经P盒变换后为

10000000
00000000
00001000
10000110

  即1000 0000 0000 0000 0000 1000 1000 0110B,十六进制为0x8000 0886。

  最后,P盒置换的结果与最初的64位分组左半部分L0异或,然后左、右半部分交换,接着开始另一轮。

IP-1末置换

  末置换是初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。末置换规则如下表:

408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185826
33141949175725

  置换方法同上,此处省略。

  经过以上步骤,就可以得到密文了。

而3DES就是在

此图像的alt属性为空;文件名为image-3.png

这一层进型一个三次的DES加密,但是有所不同是分别一次DES加密一次DES解密,和再一次的DES加密(是为了对DES进行兼容而这样做的,这样的话如果使用同一DES密钥,一次加一次解密再一次加密就会生成之加密了一次DES的密文,这样直接使用DES的解密也可以直接解密,实现了兼容)

图解分组密码五大工作模式

在密码学中,分组密码操作模式是使用分组密码来提供诸如机密性或真实性的信息服务的算法。基于分组的对称密码算法比如DES/AES算法只是描述如何根据秘钥对一段固定长度(分组块)的数据进行加密,对于比较长的数据,分组密码工作模式描述了如何重复应用某种算法加密分组操作来安全地转换大于块的数据量。
简单的说就是,AES算法描述怎么加密一个数据块,分组密码工作模式模式了如果重复加密比较长的多个数据块。 常见的分组密码工作模式有ECB、CBC、CFB、OFB、CTR五种,下面通过流程图分别展示了5大模式的分组密码工作加解密的流程。(图片来源Wikipedia)

ECB
ECB(Electronic Codebook, 电子密码本)模式是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。
每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。
适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。

image
image

CBC
CBC(Cipher Block Chaining, 密码块链)模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。
这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。
CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与ECB一样消息块必须填充到块大小的整倍数。

image
image

CFB
CFB(Cipher Feedback, 密码反馈)模式和CBC模式比较相似,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。

image
image

OFB
OFB(Output Feedback, 输出反馈)模式将分组密码转换为同步流密码,也就是说可以根据明文长度先独立生成相应长度的流密码。通过流程图可以看出,OFB和CFB非常相似,CFB是前一个分组的密文加密后XOR当前分组明文,OFB是前一个分组与前一个明文块异或之前的流密码XOR当前分组明文。由于异或操作的对称性,OFB模式的解密和加密完全一样的流程。

image
image

CTR
CTR(Counter, 计数器)模式与OFB模式一样,计数器模式将分组密码转换为流密码。它通过加密“计数器”的连续值来产生下一个密钥流块,

image
image

————————————————
版权声明:本文为CSDN博主「Coder Liming」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shaosunrise/article/details/80035297