CSDN博客

img yako

信息安全--八:数据加密标准(DES)

发表于2004/10/23 13:22:00  4937人阅读

分类: Research

 

4.  数据加密标准(DES

                    Data  Encryption  Standard

4.1        分组密码概述

 

一、分组密码体制的设计有下面的技术要求:

(1)分组长度m要足够大,以防止明文穷举的攻击。

(2)密钥量应足够大,以防止密钥穷举的攻击。

(3)密码的法足够复杂,使破译者除了采用穷举法攻击以外,找不到其它简洁的数字破译算法。

.密文块的长度与明文块长度间关系。

 

 

        4.2  数据加密标准(DES

 


一、DES加密算法简介

 

二、DES加密算法的粗框

以每一个明文块的加密过程为例给出DES加密的过程,简单的用一句话可概述这个加密过程:64bit的明文块在56bit的密钥控制下变换为64bit的密文块,其加密过程包括16次选代(即16圈)每次选代都由替代和移位的复合而形成的。

 

    粗框说明

     i圈:

     输入:Li-1                Ri-1

     输出:Li=Ri-1         Ri=gkiRi-1))Å Li-1

                                   或令Pi-1= gkiRi-1))

                                   Ri=P i-1 Å Li-1

     Ri= gki  ( Li-1)Å Li-1

 

 

 

 

 

 

 

 

 

 

 

逆初始置换(IP

密文块y= y1y2…y64

L16

R16

K(16)

L16=l116),l3216

R16=r116),r3216

g

R15=r115),r3215

 

L15=l115),l3215

R2=r12),r322

L2=l12),l322

 

 g

R1=r11),r321

L1=l11),l321

g

K(1)

 初始置换IP                   

明文块 X=x1 x2。。。。。。。。x 64

简单移位变换

L0=l10),l320

R0=r10),r320

K(2)

文本框: ……文本框: …… 


      

                                                      

 

           

 

 

 

 

 

 

 

 

 

 


                                              

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


三、DES加密算法的详细说明

1、内部密钥的派生

    对于每一个明文信息,其加密过程要给定一个56位的密钥K来确定明—密文块的对应关系,16个内部密钥K1),K2),K16)如何由给定的密钥K(外部密钥)产生,其过程如下:

外部密钥K=K1 K2…K64

   置换选择1

     PC-1

  C0

  D0

循环左移h1)位

循环左移h1)位

C1

D1

循环左移h2)位

循环左移h2)位

置换选择2

PC----2

K(1)

  C2

  D2

PC-----2

K(2)

  C15

  D15

置换选择2

PC----2

K(15)

循环左移h16)位

循环左移h16)位

  C16

  D16

置换选择2

PC----2

K(16)

内部密钥产生过程

文本框: ….文本框: …       

                     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


    

            

        1   对应不同i的左循环移位位数

选代次数i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

左移位数hi

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1

置换选择1

(1)     PC-1的作用是将外部密钥剩下的56位分成两个部分,称为左半部分C0和右半部分D0,各具28位。具体分割算法如下:

    左半部分

   C0 = K57  K49   K41   K33   K25  K17   K9    K1

       K58  K50  K42   K34   K26    K18   K10   K2

            K59   K51  K43  K35   K27    K19   K11   K3

            K60   K52  K44   K36

        右半部分

     D0 = K63  K55   K47  K39  K31  K23   K15    K7

       K62  K54    K46  K38  K30    K22   K14   K6

            K61   K53   K45  K37   K29    K21   K13   K5

            K28   K20   K12  K4

 

   分划的规则是什么呢?也就是说K中哪些位属于C0,哪些位属于D0。如何确定呢?有什么规律呢?

   我们用下面的方法来描述它的分划原则:

   将外部密钥K= K1 K2…K64的各位排成88列的矩阵。

                          

 


       K1   K2   K3    K4   K5    K6    K7    K8

       K9   K10  K11   K12  K13  K14  K15    K16

       K17  K18   K19  K20  K21  K22  K23    K24

       K25  K25   K27  K28  K29  K30   K31   K32

       K33  K34   K35  K36  K37  K38   K39    K40

       K41  K42   K43  K44  K45  K46    K47   K48

       K49  K50   K51  K52  K53  K54   K55    K56

       K57  K58   K59  K60  K61  K62   K63    K64

 

(2)        C0 D0生成后,生成K1)按如下步骤进行

a  C0 D0各循环左移h1=1位,分别得到C1D1

(b)        通过置换选择2PC-2),将56位的向量(C1D1)变成48位的密钥

       向量 K1)。

       置换选择2PC-2

       假设C=c1c2¼c28             D=d29d30¼d56

              14   17   11   24   1    5

3    28   15   6    21   10

23   19   12   4    26   8

16   7    27   20   13   2

41   52  31   37   47   55

30   40   51   45   33   48

44   49   39   56   34   53

46   42   50   36   29   32

 

K1= C14  C17 C11  C24  C1  C5  C3  C28  C15  C6  C21  C10

              C23  C19 C12  C4  C26  C8  C16  C7  C27  C20  C13  C2

              d41   d52   d31  d37  d47  d55  d30  d40  d51  d45  d33  d48

              d44   d49   d39  d56  d34  d53  d46  d42  d50  d36  d29  d32

(3)        Ci-1 D i-1生成后,生成Ki)的步骤与(2)相同

a   Ci-1 D i-1各循环左移hi)位,分别得到Ci  D i

左移位数hi)随着i的不同,而有所差异(见表1

(b)           通过置换选择256位的向量(Ci  D i)变换成48位的密钥向量Ki

       Ki=K1iK2i…K24iK25i…K48i)。

       DES进入加密算法之前,首先必须将内部密钥K1),…K16)派生

       出来。

2、  初始置换IP

     初始置换的作用是将64位的明文块 X 分成两部分,左半部分L0

  和右半部分R0),每一部分均匀为32位。具体分法是:

   L0=X58  X50  X42  X34  X26  X18  X10  X2

                  X60  X52  X44  X36  X28  X20  X12  X4

                  X62  X54  X46  X38  X30  X22  X14  X6

                  X64  X56  X48  X40  X32  X24  X16  X8

   R0= X57  X49  X41  X33  X25  X17  X9  X1

           X59  X51  X43  X35  X27  X19  X11  X3

                   X61  X53  X45  X37  X29  X21  X13  X5

                   X63  X55  X47  X39  X31  X23  X15  X7

    分割的规则是什么呢?亦即如何确定L0)和R0)各是由些什么位组成,按什么样的次序组成呢?下面介绍生成L0)和R0)的方法。

将明文块X=X1X2…X64排成88列的矩阵(如下)

                                                    R(0)

                               

       X1    X2    X3    X4    X5    X6    X7    X8    

       X9    X10   X11   X12   X13  X14   X15   X16   

       X17   X18   X19   X20   X21  X22   X23   X24  

       X25   X25   X27   X28   X29  X30   X31   X32  

       X33   X34   X35   X36   X37  X38   X39   X40   

       X41   X42   X43   X44   X45  X46   X47   X48   

       X49   X50   X51   X52   X53  X54   X55   X56     

       X57   X58   X59   X60   X61  X62   X63   X64    

                                  

L(0)

 


3、  逆初始置换(IP-1

    两个32bit的予输出数据块R16),L16)要经过逆初始置换,才能产生出真正的64bit的密文块y=y1 y1…y64

假设R16),L16=r116r216…r3216),l116 l216…l3216

简记作  R16=r1  r2  r3  r4  r5  r6  r7  r8

                            r9  r10  r11  r12  r13  r14  r15  r16

                            r17  r18  r19  r20  r21  r22  r23  r24

                            r25  r26  r27  r28  r29   r30  r30  r32

     

       L16= l1  l2  l3  l4  l5  l6  l7  l8

                           l 9 l10  l11  l12  l13  l14  l15  l16

                           l17  l18  l19  l20  l21  l22  l23  l24

                           l25  l26  l27  l28  l29  l30  l31  l32

 

 

                l8  r8  l16  r16  l24  r24  l32  r32

                            l7  r7  l15  r15  l23  r223  l31  r31

                l6  r6  l14  r14  l22  r22  l30  r30

                l5  r5  l13  r13  l21  r21  l29  r29

                l4  r4  l12  r12  l20  r20  l28  r28

                l3  r3  l11  r11  l19  r19  l27  r27

                l2  r2  l10  r10  l18  r18  l26  r26

                l1  r1  l9  r9  l17  r17  l25  r25

 

初始置换与逆初始置换的比较:

初始置换:

明文块X= X1X2…X64        L0R0

(1)X按行的自然递增次序逐位填入8*8矩阵的各行中。

(2)在矩阵中按照从上至下的方式依次取出2468列中的元素构成左半部L0)的32bit

(3)在矩阵中按照从下至上的方式依次取出1357列中的元素构成右半部R0)的32bit

逆初始置换:

R16),L16=密文块y=y 1y 2… y64

2)将左半部R16)的32bit按照(2)中取出的方式逐位还原填入矩阵的2468列中;

(4)将右半部L16)的32bit按照(3)中取出的方式逐位还原填入矩阵的1357列中。

(5)8*8矩阵中的元素按照行的自然递增顺序逐位取出。

四、            加密函数g的详细说明    (这是DES的核心部分)

Ri-1


      

1、

E扩展  ERi-1))

A=ERi-1 Ki

S1

S8

       B

  PB

Ri=Li-1+PB


E扩展

Ri-1)是32位,E扩展将它扩展为48位的ERi-1)),其扩展算法如下:

Ri-1=r1r2r3 r31r32

将其分成8组,每4位一组(每一组扩展成6位)。

r1  r2  r3  r4         r5  r6  r7  r8             r9  r10  r11  r12            r13  r14  r15  r16

 

 

r32 r1  r2  r3  r4  r5     r4  r5  r6  r7  r8   r9   r8  r9  r10  r11  r12  r13    r12  r13  r14  r15  r16  r17

r16  r17  r18  r19  r20  r21   r20   r21  r22  r23  r24 r25    r24  r25  r26  r27  r28 r29   r28  r29   r30  r30  r32  r1

 

 

ERi-1))= r32  r1  r2  r3  r4  r5  r6  r7  r8  r9

                           r8  r9  r10  r11  r12  r13  r14  r15  r16  r17

                           r16  r17  r18  r19  r20  r21  r22  r23  r24  r25

                           r24   r25  r26  r27  r28  r29   r30  r30  r32  r1

 

2、替代运算(S盒)

 

 

 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

S1

1

2

3

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

 

3、P置换(移位变换)

B= b1b2 b32

PB= b16   b7  b20  b21  b29  b12  b28  b17

           b1   b15  b23  b26  b5  b18  b31  b10

           b2   b8  b24  b14  b32  b27  b3  b9

           b19  b13  b30  b6  b22  b11  b4  b25

 

DES解脱密算

一、DES脱密算法

(1)一个64bit的数据块分成两个32位的数据块

(2)逆初始置换:是将两个32位的数据合并成一个64位的数据块合并的方法是(例如XL XR)逆初始置换是初始置换的逆变换。

 X

 

 

初始置换

 

        XL                                XR

 

初始置换

                                                                                           

                  X

因为初始置换将明文块X=X1 X2 … X64  分成了L0),R0),所以必可将L0),R0)合并成X=X1 X2 … X64

 

(3)每一圈输出与输入的关系

每一圈中输出对输入的一个函数依赖关系。

 

   Li=Ri-11                i=1216

   Ri=Li-1 gKiRi-1))2

2、进行第一圈脱密时,R16C   (由脱密过程的推图的第一圈)

 

R16=L(15)  gK16L15))=L(15)  gK16(L(16))

由异或运算的性质(若A  B=CB C=A   A C=B­可得

DES脱密算法

密文块y=y1y2 … y64

 


初始置换

 

 


 

R16

L16

g            

 

 

 

 

 

 


                                                                                                                     k16

 


                                                           

L15

R15

g

 

 

 

 


                                                                                                       k15

 


g

L1

R1

R14

 

L14

                                                     

 

 

 

 

 

 

 


                                                                                                            k1

                                                          

 

 


                                                                                                                

 

 

 

 

 

R0

L0

R0

L0

 

逆初始置换

明文块X=X1X2 … Xn

 

 

阅读全文
0 0

相关文章推荐

img
取 消
img