分组密码——DES加密算法

分组密码概述

      分组密码是对称密码的一种,是最常用的加密手段,也是密码学极其重要的应用。所谓对称密码,即是加密和解密使用同一密钥或加密和解密的密钥之间存在简单的、容易计算的互推关系。
      分组密码的工作方式是,首先将明文分成长度固定的组,如64比特或128比特为一组,并对不足64比特或128比特的尾组用适当的方式进行填充,将其扩充为一个整组后进行加密。然后用同一密钥和算法对每一组分别加密,输出固定长度的密文。

      分组密码的安全性要求在不知道密钥k的情况下,即使能得到全部密文,并且知道加密函数的全部计算细节,也无法得到相应的明文。例如,对于64比特分组,对之进行穷举的数据量为2的64次方,这是一个2-位的十进制数,即使用每秒运算万亿次以上的巨型计算机进行攻击,平均穷举时间也需要数年。当然这仅是理论数据,在攻击密码时还有其他约束条件,如文字、数据、规律等信息,所以实际需要的攻击时间要短得多。

 

 

DES简介

    DES是Data Encryption Standard的缩写,是美国国家标准局于1977年公布的由IBM公司研制的加密算法。DES加密算法广泛应用于电子商务领域,如POS,ATM,磁卡及智能卡等应用。

 

DES加密算法

    DES算法中数据以64比特分组进行加密,密钥长度也为64比特,其中有效密钥长度为56位。它的加密算法与解密算法相同,只是解密子密钥与加密子密钥的使用顺序刚好相反。

 

    DES加密过程分为两部分:子密钥的产生 对明文的加密

子密钥的产生

    DES的密钥长度为64位,而实际有效密钥为56比特。对于输入的56比特密钥,每7位扩充1位奇偶校验位,使得8位构成的字节中1的个数为奇数,从而得到64位密钥

    DES加密和解密过程都会用到16个48比特的子密钥,子密钥的生成步骤如下:

 

    第一步,输入64位密钥 K=(x1x2x3……x64),将密钥K按PC-1表置换,得到56位二进制:(x57x49……x4),然后将这56位从中间分成2分,得到两个28位二进制:C0=(x57x49……x36),D0=(x63,x55……x4)。

 

PC-1表



(第二步到第三步是一次循环,输入Ci-1和Di-1,得到ki,输入从C0、D0开始。共16轮。以下以第一轮为例) 

第二步,将C0和D0分别左循环移位<<(移位的位数查LS表),得到C1和D1

LS表





第三部,将C1,D1连接得到56位二进制C1D1=b1b2……b56,将C1D1按照PC-2表进行置换得到第1个48位子密钥k1=b14b17……b32

PC-2表



第四步,将第三部得到的Ci和Di做为入参,循环执行第二第三步16轮,得到16个子密钥k1~k16。 

 

 

对明文的加密

将明文数据以64位分组,每次对64比特进行加密。具体加密步骤如下:

 

第一步,对64比特数据按下表进行初始置换;



(第三步到第六步为一个循环,输入Ri-1、Li-1,输出Ri、Li。共执行16轮,每轮对应一个子密钥。以下以第一轮为例)第二步,将置换后的64比特从中间分成2个32位,得到L0和R0,分别是L0=D58D50...D8;R0=D57D49...D7

第三步,将R0按照下表进行扩展E变换,从32位扩展到48位得到E1=x32x1x2…x32x1

扩展E变换表



第五步,S盒。第四步,将扩展得到的E1和第一个子密钥k1进行模加(异或运算)。

设第四步模加结果为M1=m1m2m3…m48。将48比特分为8组6比特分组,每一组分别代入相应的S盒,得到4比特的结果值。S盒的计算是这样的:如果用m1m2m3m4m5m6表示第一组输入,S盒表中的行索引是m1m6组成的二进制数,列索引是m2m3m4m5组成的二进制,结果是该格的值。

将8组4进制的结果值连接起来,得到32比特。

 

S盒(8组)

S1:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7

1

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

2

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

3

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

S2:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10

1

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

2

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15

3

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9

S3:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8

1

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

2

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7

3

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12

S4:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15

1

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

2

10

6

9

0

12

11

7

13

15

1

3

14

5

2

8

4

3

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14

S5:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9

1

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

2

4

2

1

11

10

13

7

8

15

9

12

5

6

3

0

14

3

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3

S6:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11

1

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

2

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6

3

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13

S7:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1

1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

2

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2

3

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12

S8:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7

1

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8

3

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11

 

 

第五步,P盒置换。将S盒的32比特结果代入P盒置换表。

第六步,将P盒结果与L0模加,作为R1。将R0作为L1

第七步,将L1、R1作为入参,代入第三步,循环16轮,得到L16和R16

第八步,将R16L16组成的64比特代入IP逆置换表,置换后就是64比特的密文了。



以上8步,将64比特明文转换为64比特密文。最后将各组64比特密文连接起来得到最终密文。 

 

 

 

DES解密算法

DES的解密过程和加密过程完全类似,只是将16轮的子密钥序列k1,k2…k16顺序反过来。即第一轮用k16,最后一轮用k1

 

三重DES的变形

DES的密钥长度为64比特,但实际上只有56比特可用,普遍认为这样的密钥长度太短。

1999年,美国电子边境基金会EFF只用22小时15分钟就破译了DES。随着计算能力增强,必须相应增加算法的密钥长度。

为了继续使用DES,可以采用DES的变形:三重DES。

三重DES中,使用两个64位密钥:K1、K2,使有效密钥长度增加到112位,大大增强了安全性。


设P为明文,C为密文,k1k2分别为密钥,E为加密过程,D为解密过程,

  • 3DES加密过程为:C=Ek1(Dk2(Ek1(P)))
  • 3DES解密过程为:P=Dk1(EK2(Dk1(C)))

加密时先对明文用K1加密,结果用K2解密,再对解密结果用K1加密。

解密过程相反。

如果令K1=K2,则可以前向兼容1重DES。

你可能感兴趣的:(分组密码——DES加密算法)