计算机系统应用教程网站

网站首页 > 技术文章 正文

软考-信息安全工程师学习笔记07——密码学(分组密码 DES)

btikc 2025-01-20 11:06:31 技术文章 120 ℃ 0 评论

数据加密标准概述

DES (Data Encryption Standard)是数据加密标准的简称,由IBM公司研制,1977年1月15日,正式发布,也是第一个被公布出来的加密标准算法

DES算法:

  • 数据加密标准,美国1977发布,属于对合运算。
  • 综合使用了置换( P )、代替(S)和代数(异或)等多种密码技术。
  • 典型的Feistel结构,一共进行1 6轮迭代。
  • 安全使用10-15年,用于非机密的敏感数据进行加密。



分组密码原理

扩散

就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中去,以便隐藏明文的统计特性。

混乱

是指密文和明文之间的统计特性关系尽可能地复杂化

乘积密码

指依次使用两个或两个以上的基本密码,所得结果的密码强度将强于所有单个密码的强度


Feistel密码结构




DES分组密码原理及加密过程

  1. 生成6个48位的子密钥
  2. 对64位的明文进行初始化置换,打乱重排,分成左右两半
  3. 对Ri-1进行扩展置换E ,即E ( Ri-1 ),由32位扩展到48位
  4. 进行S合代换,即对Ki⊕E( Ri-1 )进行非线性变换,利用8个S合,产生32位的混淆数据。
  5. 进行置换P,即扩散
  6. 进行逆初始置换IP-1

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位的C0D0


假设 十六进制密钥 K = 133457799BBCDFF1

其二进制为

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 =1111000 0110011 0010101 0101111

D0 =0101010 1011001 1001111 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 =1111000 0110011 0010101 0101111

D0 =0101010 1011001 1001111 0001111

左移方式举例: C1 迭代次数位1,故移位次数位1,所以C1就是C0所有位数左移1位,第1位移动至最后一位。之后在上一轮的基础上循环左移

C1 =111000 0110011 0010101 0101111 1

D1 =101010 1011001 1001111 0001111 0

C2 =11000 0110011 0010101 0101111 11

D2=01010 1011001 1001111 0001111 01

C3=000 0110011 0010101 0101111 1111

D4=010 1011001 1001111 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 110000 001011 101111

111111 000111 000001 110010

C2 =11000 01100 11001 01010 10111 111

D2 =01010 10110 01100 11110 00111 101

K2= 011110 011010 111011 011001

110110 111100 100111 100101

C3 =00001 10011 00101 01010 11111 111

D4 =01010 11001 10011 11000 11110 101

K3= 010101 011111 110010 001010

010000 101100 111110 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=0123456789ABCDEF

则可以用二进制表示为:

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位的L0R0

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 100001 010101 010101 011110 100001 010101 010101

第二步:对E(R0和K1进行异或运算

E(R0) =011110 100001 010101 010101 011110 100001 010101 010101

K1= 000110 110000 001011 101111111111 000111 000001 110010

E(R0⊕ K1 =011000 010001 011110 111010 100001 100110 010100 100111

第三步:对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组成的二进制为列号,行列相交点的数(二进制)为输出


E(R0⊕ K1 =011000 010001 011110 111010 100001 100110 010100 100111

S1盒的输入01100000是行,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=L0f(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-1


R16L16

= 0000 1010 0100 1100 1101 1001 1001 0101 0100 0011 0100 0010 0011 0010 0011 0100

C= IP-1( R16L16 )

= 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101

十六进制的密文C = 85E813540F0AB405


关于IP与IP-1


第20位的值经过IP置换 到了置换后 第14位

原来第14位的值 在IP-1置换后到了第20位


案例分析

如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下:

IP: 2631 4857

请给出其逆初始置换表。

假设原文为: abcd efgh

经IP后M,变为: bfca dheg

逆初始置换与初始置换是互逆,即把M1重新变为M

IP逆初始置换表:4135 7286

12345678

P1--->

26314857


12345678

P-1--->

41357286



DES解密过程

  • DES的运算是对合运算,解密和加密算法相同
  • 不同点就是子密钥使用的顺序不同。
  • 第一次解密迭代使用自密钥K16 ,第二次解密迭代使用子密钥K15, .. ,第1 6次解密使用子密钥K1



DES安全性

  1. 如果DES密钥太短经不起穷尽攻击
  2. DES存在弱密钥和半弱密钥
  • 初始密钥被分成两部分,每部分都单独做移位。如果每一部分的每一位都是0或都是1,则每一圈的子密钥都相同。这样的密钥被称为弱密钥
  • DES存在4个弱密钥
  • Ek°Ek=1
  • 弱密钥特性:明文加密两次能得到明文 加密和解密的结果是一致的

4个弱密钥

0101010101010101

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

学习参考资料:信息安全工程师教程(第二版)

建群网培信息安全工程师系列视频教程

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表