大家好,欢迎来到IT知识分享网。
数据加密标准概述
DES (Data Encryption Standard)是数据加密标准的简称,由IBM公司研制,1977年1月15日,正式发布,也是第一个被公布出来的加密标准算法
DES算法:
- 数据加密标准,美国1977发布,属于对合运算。
- 综合使用了置换( P )、代替(S)和代数(异或)等多种密码技术。
- 典型的Feistel结构,一共进行1 6轮迭代。
- 安全使用10-15年,用于非机密的敏感数据进行加密。
分组密码原理
扩散
就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中去,以便隐藏明文的统计特性。
混乱
是指密文和明文之间的统计特性关系尽可能地复杂化。
乘积密码
指依次使用两个或两个以上的基本密码,所得结果的密码强度将强于所有单个密码的强度
Feistel密码结构

DES分组密码原理及加密过程
- 生成6个48位的子密钥
- 对64位的明文进行初始化置换,打乱重排,分成左右两半
- 对Ri-1进行扩展置换E ,即E ( Ri-1 ),由32位扩展到48位
- 进行S合代换,即对Ki⊕E( Ri-1 )进行非线性变换,利用8个S合,产生32位的混淆数据。
- 进行置换P,即扩散
- 进行逆初始置换IP-¹
DES算法的数学表示形式


DES子秘钥的产生过程

1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
如上表:
- 分组密钥长度64位
- 去掉蓝色部分的8个奇偶校验位
- 有效密钥长度56位
PC-1(置换规则表1) |
|||||||
C0 |
57 |
49 |
41 |
33 |
25 |
17 |
9 |
1 |
58 |
50 |
42 |
34 |
26 |
18 |
|
10 |
2 |
59 |
51 |
43 |
35 |
27 |
|
19 |
11 |
3 |
60 |
52 |
44 |
36 |
|
D0 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |
62 |
54 |
46 |
38 |
30 |
22 |
|
14 |
6 |
61 |
53 |
45 |
37 |
29 |
|
21 |
13 |
5 |
28 |
20 |
12 |
4 |

子密钥产生流程:
置换选择PC1
1.分组密钥去掉8个奇偶校验位
2.打乱重排,形成2个各28位的C0和D0
假设 十六进制密钥 K = BBCDFF1
其二进制为
K = 0001 0011 0011 0100 0101 0111 0111 1001 1001 1011 1011 1100 1101 1111 1111 000 (每10一个颜色,方便快速定位)
经过PC-1置换为:
具体置换方式举例:C0表第一位57 代表取密钥K的第57位1放置这里,之后用相同的方法
C0 = 0 0010101 0
D0 =0 0001111
循环左移
循环位移表 |
|
迭代次数 |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 |
移位次数 |
01 01 02 02 02 02 02 02 01 02 02 02 02 02 02 01 |
C0 = 0 0010101 0
D0 =0 0001111
左移方式举例: C1 迭代次数位1,故移位次数位1,所以C1就是C0所有位数左移1位,第1位移动至最后一位。之后在上一轮的基础上循环左移
C1 = 0 0010101 0 1
D1 = 0001111 0
C2 =11000 0 0010101 0 11
D2=01010 0001111 01
C3=000 0 0010101 0 1111
D4=010 0001111 0101
。。。
Cn = xxxx
Dn = xxxx
对Cn、Dn进行置换选择2操作
置换规则表 PC-2 |
||||||||||||
Ci |
14 |
17 |
11 |
24 |
1 |
5 |
3 |
28 |
15 |
6 |
21 |
10 |
23 |
19 |
12 |
4 |
26 |
8 |
16 |
7 |
27 |
20 |
13 |
2 |
|
Di |
41 |
52 |
31 |
37 |
47 |
55 |
30 |
40 |
51 |
45 |
33 |
48 |
44 |
49 |
39 |
56 |
34 |
53 |
46 |
42 |
50 |
36 |
29 |
32 |

置换方式,按PC-2表进行将C1 第11位0放置在子密钥K1 的第1位,D1放在C24后,直至最后得出子密钥K1
C1 =11100 00110 01100 10101 01011 111 D1 =10 10101 01100 11001 11100 01111 0 |
K1= 000110 001011 000111 000001 |
C2 =11000 01100 11001 01010 10111 111 D2 =01010 10110 01100 11110 00111 101 |
K2= 011110 011010 011001
|
C3 =00001 10011 00101 01010 11111 111 D4 =01010 11001 10011 11000 11110 101 |
K3= 010101 011111 001010 010000 011001 |
DES加密过程
对64位的明文进行初始化置换IP
初始化置换IP |
|||||||
58 |
50 |
42 |
34 |
26 |
18 |
10 |
2 |
60 |
52 |
44 |
36 |
28 |
20 |
12 |
4 |
62 |
54 |
46 |
38 |
30 |
22 |
14 |
6 |
64 |
56 |
48 |
40 |
32 |
24 |
16 |
8 |
57 |
49 |
41 |
33 |
25 |
17 |
9 |
1 |
59 |
51 |
43 |
35 |
27 |
19 |
11 |
3 |
61 |
53 |
45 |
37 |
29 |
21 |
13 |
5 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |

假设:十六进制明文M=0ABCDEF
则可以用二进制表示为:
M:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
置换方式
- 明文M分组长度为64,从第1位到第64位,按照IP表格的顺序进行置换,如,M的第58位,置换到第1位; M的第50位置换到第2位,依次类推,完成64位的置换
M置换后IP值:
IP=1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010
把IP分成左右各32位的L0和R0
L0 = 1100 1100 0000 0000 1100 1100 1111 1111
R0 =1111 0000 1010 1010 1111 0000 1010 1010
DES加密函数f
加密函数 f(Ri-1,Ki)是DES中的核心算法
该函数包含
- 选择运算E
- 异或运算: 0⊕0=0,0⊕1=1 1⊕0=1,1⊕1=0 口诀1:相同取0,相异取1
- 代替函数组S(S盒变换)
- 置换运算P

第一步:对Ri-1进行扩展E操作,由32位扩展到48位
选择运算E(扩展置换E) |
|||||
扩展位 |
固定位 |
扩展位 |
|||
32 |
1 |
2 |
3 |
4 |
5 |
4 |
5 |
6 |
7 |
8 |
9 |
8 |
9 |
10 |
11 |
12 |
13 |
12 |
13 |
14 |
15 |
16 |
17 |
16 |
17 |
18 |
19 |
20 |
21 |
20 |
21 |
22 |
23 |
24 |
25 |
24 |
25 |
26 |
27 |
28 |
29 |
28 |
29 |
30 |
31 |
32 |
1 |

R0 =1111 0000 1010 1010 1111 0000 1010 1010
R0进过E运算得出
E(R0) =011110 010101 010101 011110 010101 010101
第二步:对E(R0)和K1进行异或运算
E(R0) =011110 010101 010101 011110 010101 010101
K1= 000110 001011 000111 000001
E(R0)⊕ K1 =011000 010001 011110 010100
第三步:对E(R0)⊕ K1进行S盒变换
- S盒变换是一种压缩替换,通过S盒将48为输入变为32位输出,共有8S盒,并行作用
- S盒是DES唯一的非线性变换,是DES安全的关键
- 每个S盒有6个输入, 4个输出,是一种非线性的压缩变换。

设输入为b1 b2 b3 b4 b5 b6 ,则以b1 b6组成的二进制为行号,以b2 b3 b4 b5组成的二进制为列号,行列相交点的数(二进制)为输出

S1盒
E(R0)⊕ K1 =011000 010001 011110 010100
S1盒的输入是011000,00是行,1100是列
S1盒的输出:即行为0,列为12的交叉处的值为5,二进制为0101
其他S2-S8也同样上述方法进行S盒变换
第四步: 对8个S盒的值进行置换运算P操作
- 置换运算P是f函数的最后一个操作
- 把数据打乱重排
置换运算P |
|||||||
16 |
7 |
20 |
21 |
29 |
12 |
28 |
17 |
1 |
15 |
23 |
26 |
5 |
18 |
31 |
10 |
2 |
8 |
24 |
14 |
32 |
27 |
3 |
9 |
19 |
13 |
30 |
6 |
22 |
11 |
4 |
25 |

经过前面的S盒代换,得到32位的数值:
S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
= 0101 1100 1000 0010 1011 0101 1001 0111
则P ( S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) )
= 0010 0011 0100 1010 1010 1001 1011 1011
产生DES的下一个L和R

R1=L0⊕f(R0,K1)
=1100 1100 0000 0000 1100 1100 1111 1111
⊕0010 0011 0100 1010 1010 1001 1011 1011
= 1110 1111 0100 1010 0110 0101 0100 0100
同时:
L1=R0,重复迭代执行16次轮函数f ,
得到L16与R16
L16= 0100 0011 0100 0010 0011 0010 0011 0100
R16= 0000 1010 0100 1100 1101 1001 1001 0101
L16R16
= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100
*最后一步直接拼接起来没有轮函数
DES加密的最后一步
对R16L16进行逆初始置换IP-¹

R16L16
= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100
则
C= IP-¹( R16L16 )
= 00010011 0 00001111 00001010 00000101
十六进制的密文C = 85EF0AB405
关于IP与IP-¹

第20位的值经过IP置换 到了置换后 第14位
原来第14位的值 在IP-¹置换后到了第20位
案例分析
如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下:
IP: 2631 4857
请给出其逆初始置换表。
假设原文为: abcd efgh
经IP后M,变为: bfca dheg
逆初始置换与初始置换是互逆,即把M1重新变为M
IP逆初始置换表:4135 7286
P1—> |
||
P-¹—> |
DES解密过程
- DES的运算是对合运算,解密和加密算法相同
- 不同点就是子密钥使用的顺序不同。
- 第一次解密迭代使用自密钥K16 ,第二次解密迭代使用子密钥K15, .. ,第1 6次解密使用子密钥K1

DES安全性
- 如果DES密钥太短经不起穷尽攻击
- DES存在弱密钥和半弱密钥
- 初始密钥被分成两部分,每部分都单独做移位。如果每一部分的每一位都是0或都是1,则每一圈的子密钥都相同。这样的密钥被称为弱密钥。
- DES存在4个弱密钥
- Ek°Ek=1
- 弱密钥特性:明文加密两次能得到明文 加密和解密的结果是一致的
4个弱密钥
00101
FEFEFEFEFEFEFEFE
E0E0E0E0F1F1F1F1
1F1F1F1F0E0E0E0E
如果不考虑校验位的密钥,下面几个也是属于弱密钥的:
0000000000000000
FFFFFFFFFFFFFFFF
E1E1E1E1F0F0F0F0
1E1E1E1E0F0F0F0F
如果使用弱密钥,PC1 计算的结果会导致轮密钥全部为 0,全部为 1 或全部 01 交替。
因为所有的轮密钥都是一样的,并且 DES 是 Feistel 网络的结构,这就导致加密函数是自反相 (self-inverting) 的,结果就是加密一次看起来没什么问题,但是如果再加密一次就得到了明文。
半弱密钥
有些成对的密钥会将明文加密成相同的密文,即一对密钥中的一-个能用来解密由另一个密钥
加密的消息,这种密钥称作半弱密钥。
半弱密钥: E1=E2,至少有12个半弱密钥
6 个常见的部分弱密钥对
- 011F 011F 010E 010E and 1F01 1F01 0E01 0E01
- 01E0 01E0 01F1 01F1 and E001 E001 F101 F101
- 01FE 01FE 01FE 01FE and FE01 FE01 FE01 FE01
- 1FE0 1FE0 0EF1 0EF1 and E01F E01F F10E F10E
- 1FFE 1FFE 0EFE 0EFE and FE1F FE1F FE0E FE0E
- E0FE E0FE F1FE F1FE and FEE0 FEE0 FEF1 FEF1
学习参考资料:信息安全工程师教程(第二版)
建群网培信息安全工程师系列视频教程
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/169709.html