分组密码--DES详解

博客 分享
0 242
优雅殿下
优雅殿下 2022-03-29 11:57:18
悬赏:0 积分 收藏

分组密码--DES详解

对称密码体制

对称密码体制:一种加密系统。其加密密钥和解密密钥是相同的,或者能够从其中之一推知另一个。对称密码体制根据对明文加密方式不同分为分组密码和流密码。

分组密码

分组密码按照一定长度(如64bit、128bit)对名文分组,然后以组为单位进行加、解密。

分组密码系统:对不同的组采用同样的密钥k来进行性加密、解密。
明文组:image

密文:image

image

分组密码设计就是找到一种算法,能在密钥的控制下,从一个足够大、足够好的置换子集中简单、迅速的选出一个置换、对当前输入的明文数字组进行加密变换。
算法要求:

  • 分组长度足够大,使得不同明文分组的个数2^n足够大,以防止明文被穷举法攻击。
  • 密钥空间应足够发,尽可能消除弱密钥,从而使所有密钥同等概率,以防穷举密钥攻击,同时密钥不能太长,以利于密钥管理。
  • 由密钥确定的算法要足够复杂,充分实现明文与密钥的扩散和混淆,没有简单的关系可循,要能抵抗各种已知的攻击,差分攻击、线性攻击等。
  • 要尽量使用适合编程的子块和简单的运算
  • 加密解密应具有像是性。

分组密码的一般结构

Feistel结构

image

  • 明文P为64b的数据被平分为32b的L0和R0,如果明文数据不足64b就用一种特殊的方法填充到64b。
  • +表示异或
  • K表示种子密钥64位,ki表示子密钥,是48b的密钥。那这里就会有疑问了,密钥是48b的数据,每次加密的明文是32b的数据,怎么如何进行加密呢,这里就是F的作用了,
  • F是轮函数,在轮函数里面会对数据进行处理,首先会对明文进行E拓展置换,然后明文就变换为48b的数据,让后与ki进行异或,在进行S盒替换目的是在压缩为32b数据,和P盒替换四个过程。
  • 结果:Li=R(i-1) ; Ri=L(i-1)异或F(Ri-1,ki)
SP结构

image

F轮函数内容

F轮函数包括(E扩展置换-数据扩展为48b、数据与密钥异或、S盒压缩处理-数据变为32b、P盒置换)

E拓展置换

  • E拓展置换简单来说就是把分组后的32b的数据拓展为48位数据,为了盒子密钥进行异或。我们假设32b的数据就是如下图排列,那么黄色标注的数据就是添加的数据,也就是把原本8行4列的数据拓展为8行6列数据,当然数据在内存里肯定不是矩阵的存在,我们这样是便于理解。

  • 那么我们先看它的拓展结果在进行解释。

3212345
456789
8910111213
121314151617
161718192021
202122232425
242526272829
28293031321
  • 拓展原理
    • 第一步:就是把32b的数据,变为8组4b的数据。
    • 第二步:然后再每组后面添加下一组的第一个数据.
    • 第三步:再每组数据前面添加上一组数据的最后一个数据。
    • 第四步:第一组和第八组分别没有前一组和后一组,那他们两组就是首尾相连。就是32位数据组成一个循环的圈,那每一组都会有前驱和后继了。

image

S盒压缩处理

经过拓展的48位明文和密钥进行异或运算后,再使用8个S盒压缩处理得到32位数据。

  • 将48位数据分为8块,每6位压缩为4位数据。
  • 每一组数据取头尾两个数组成一个二位二进制数作为列,中间4位数对应行,找相应s和该位置数据就是转换后的数据,如六位011001取第一位和第六位是01那就是第一行,中间四位是1100那就是第十二列,假设为第一组的数据那就去找S1盒的1行12列对应数据是9,那转换后的数据就是1001
  • 注意点:行和列对应的范围是0-3和0-15.
  • s盒对应表很容易在网上寻找,这里我也复制下来了。

image

  • S1盒
0123456789101112131415
01441312151183106125907
10157414213110612119538
24114813621115129731050
31512824917511314100613
  • S2盒
0123456789101112131415
01518146113497213120510
13134715281412011069115
20147111041315812693215
31381013154211671205149
  • S3盒
0123456789101112131415
01009146315511312711428
11370934610285141211151
21364981530111212510147
31101306987415143115212
  • S4盒
0123456789101112131415
07131430691012851112415
11381156150347212110149
21069012117131513145284
33150610113894511127214
  • S5盒
0123456789101112131415
02124171011685315130149
11411212471315015103986
24211110137815912563014
31181271142136150910453
  • S6盒
0123456789101112131415
01211015926801334147511
11015427129561131401138
29141552812370410113116
34321295151011141760813
  • S7盒
0123456789101112131415
04112141508133129751061
11301174911014351221586
21411131237141015680592
36111381410795015142312
  • S8盒
0123456789101112131415
01328461511110931450127
11151381037412561101492
27114191214206101315358
32114741081315129035611

P盒转换

P盒转换和初始转换相似,原理是一样的,这里先不说转换过程,等到下面初始置换的时候再说,现在这里保存P盒置换表
image

DES

DES是分组长度为64b的分组密码算法。密钥长度也是64b,其中每8b有一个奇偶校验位,所以有效长度为56b。采用Feistel结构。

DES算法框图

image
初始置换IP和初始逆置换IP:将明文数据用初始置换IP置换,得到一个乱序的64b明文分组,然后分组,经过16轮完全类似的迭代运算后,将所得的左右数据合并,最后使用初始逆置换IO置换,产生密文数据组。

初始置换

我们拿到的64为数据首先要进行初始置换,那么我们拿到的应该是一组有含义的数据我们假设是64个0、1二进制流,那么初始置换就是这些数据根据下表从新排列一边,这一步是很简单的,如我们对应下表,应该把源数据的第58个数据提到第一个位置,把第50个数据提到第二的数据,就是根据下表进行对应位置的转换。

初始置换IP

585042342618102
605244362820124
625446383022146
645648403224168
57494133251791
595143352719113
615345372921135
635547393123157

16轮迭代加密

上面基本已经讲了,在这里就说一下这个子密钥的生成。
image

子密钥的生成

密钥为64位的密钥,出去8位校验位,剩余的56位参与运算。
首先我们要用一个PC-1表把密钥的8位校验位去除,并且重新排序,这个和明文的初始置换是差不多的。
PC-1表

5749413325179
1585042342618
1025951433527
1911360524436
63554739312315
7625446383022
1466153453729
211352820124

然后我们把着56位的密钥,分为28位的两组数据,染后根据移位次数表分别左移,如我们要求第一次的子密钥,就把这两组28位密钥分别左移1位然后根据PC-2置换就是第一次的子密钥了,求第二次的子密钥就是在第一次的两组上在分别左移2位,在用PC-2置换回来,就是k2了。不知道有有没有写明白。
image

第i次迭代12345678
循环左移次数11222222
第i次迭代910111213141516
循环左移次数12222221

PC-2表

1417112415
3281562110
2319124268
1672720132
415231374755
304051453348
444939563453
464250362932

IP-1置换

把得到的R16和L16组合数据根据逆置换表置换就完成了。

逆置换IP-1

408481656246432
397471555236331
386461454226230
375451353216129
364441252206028
353431151195927
342421050185826
33141949175725

总结

我们得到64b的明文(不足64b的补足),我们首先使用IP置换处理一下明文,然后把他们分为两组32b的数据,然后两组数据进入16次迭代运算,16次迭代中每次有一组数据和一组子密钥(48b)进行异或运算,首先要把数据进行E扩展变为48b数据,然后进行异或,在经过S盒压缩处理,最后经过P置换,这就完成了F轮函数的过程,最后和另一组数据进行异或,完成一轮迭代,最后进行IP-1置换,完成加密,得到密文。

posted @ 2022-03-29 10:40 hjk-airl 阅读(14) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员