密码学笔记3——DES密码

2020-08-30  本文已影响0人  自学java的菜鸟小赵

1.了解Feistel网络结构

一次加密

image.png
首先密钥和其他数据进行替换和换位生成密钥流,然后与明文进行异或运算生成密文

多次加密

image.png

首先密钥和数据data0进行替换和换位生成密钥流,然后与明文进行异或运算生成密文1,然后再将密钥和数据data1进行换位和替换生成密钥流与密文1进行异或运算得到密文2...,多次运算之后得到最终密文,这里我们可以把密钥的替换和移位加异或运算看成一个函数F,在函数F中进行这些运算

这里会发现一些问题,这些data0,data1,data2...是怎么生成的,我们可以将上述结构再进行改变

image.png
将密文的输出作为F函数的输入数据进行运算得到最终的密文。

结构再进行变换

image.png
从这个结构中我们可以看到,每一步运算左右数据都进行交换,后面会解释Ln和Rn分别代表的什么,但是要值得注意,最后一步加密过程中,没有进行交换,这是为了保证加密运算和解密运算整个运算过程是相等的,即我们将密文c作为输入可以得到明文m。

2.DES结构

DES基本结构属于Feistel结构

大致加密过程

image.png
1.64位密钥经子密钥产生算法生成16个子密钥:k1-k16
2.64位明文经过初始置换IP,将数据打乱并重新进行编排,分成左右两个部分,左边为L0,右边为R0
3.进行加密运算

Li=R(i-1)
Ri=L(i-1)异或f(Ri-1,ki)

4.经过16次的运算最终生成的L16和R16合并再进行逆初始置换,将数据重新进行并排,得到64位密文。

3.子密钥的产生

64位密钥经过置换选择1——>循环左移——>置换选择2的变换,最后生成48位的子密钥

image.png

观察每一个步骤

1.置换选择1(64位——>56位)

实在不想画图了

image.png
这个初始矩阵是固定的,举一个简单的例子说明生成过程

K = 133457799BBCDFF1
我们可以得到它的二进制形式(1为0001,3为0011.依次类推,并且将每八位写成一组。这样每组的最后一位都没有被用上。)
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
然后我们按照上面矩阵的数字对这个二进制数据进行重新排列
K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
然后,将这个秘钥拆分为左右两部分,C0 和 D0,每半边都有28位。
比如,对于新秘钥,我们得到:
C0 = 1111000 0110011 0010101 0101111
D0 = 0101010 1011001 1001111 0001111

2.循环移位

image.png
这个移位表也是固定的,举一个简单例子

C0 = 1111000011001100101010101111进行左移一位
C1 = 1110000110011001010101011111

3.置换选择2(56位——>48位)

image.png
这个矩阵也是固定的

具体的实现过程

现在我们知道了每一个密钥是如何产生的,我们就可以去研究DES算法的整体运算过程

1.初始置换IP

image.png
将明文中的数据进行矩阵排列

2.函数F的具体实现过程

我们观察公式Ri=L(i-1)异或f(Ri-1,ki),Ri-1是32位,而ki是48位,最终生成要是一个32位的数据,我们要知道里面的具体实现过程

image.png
我们可以观察到,Ri-1的数据首先经过扩展置换E由32位的数据变成48位然后再与Ki进行异或运算,最终生成的48位数据再经过S盒输出32位的数据,再经过置换P输出32bit的数据。

扩展置换E的实现

image.png
最左边的一列都是第二列的数据往前减一位,而最后一列的数据是前一列的数据加一位。

S盒

image.png

例子

假如我们输入到S盒的一个数据为111010,我们把第一位和最后一位当作行号,则10=2,把中间的4位当成列号,则1101=13,即
S1(111010)=10,10的二进制是1010,所以当前S1的输出是1010


image.png

定义这8个函数S1,…,S8的表格如下所示:

                                  S1
 
     14  4  13  1   2 15  11  8   3 10   6 12   5  9   0  7
      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
                                  S2
 
     15  1   8 14   6 11   3  4   9  7   2 13  12  0   5 10
      3 13   4  7  15  2   8 14  12  0   1 10   6  9  11  5
      0 14   7 11  10  4  13  1   5  8  12  6   9  3   2 15
     13  8  10  1   3 15   4  2  11  6   7 12   0  5  14  9
                                  S3
 
     10  0   9 14   6  3  15  5   1 13  12  7  11  4   2  8
     13  7   0  9   3  4   6 10   2  8   5 14  12 11  15  1
     13  6   4  9   8 15   3  0  11  1   2 12   5 10  14  7
      1 10  13  0   6  9   8  7   4 15  14  3  11  5   2 12
                                  S4
 
      7 13  14  3   0  6   9 10   1  2   8  5  11 12   4 15
     13  8  11  5   6 15   0  3   4  7   2 12   1 10  14  9
     10  6   9  0  12 11   7 13  15  1   3 14   5  2   8  4
      3 15   0  6  10  1  13  8   9  4   5 11  12  7   2 14
                                  S5
 
      2 12   4  1   7 10  11  6   8  5   3 15  13  0  14  9
     14 11   2 12   4  7  13  1   5  0  15 10   3  9   8  6
      4  2   1 11  10 13   7  8  15  9  12  5   6  3   0 14
     11  8  12  7   1 14   2 13   6 15   0  9  10  4   5  3
                                 S6
 
     12  1  10 15   9  2   6  8   0 13   3  4  14  7   5 11
     10 15   4  2   7 12   9  5   6  1  13 14   0 11   3  8
      9 14  15  5   2  8  12  3   7  0   4 10   1 13  11  6
      4  3   2 12   9  5  15 10  11 14   1  7   6  0   8 13
                                 S7
 
      4 11   2 14  15  0   8 13   3 12   9  7   5 10   6  1
     13  0  11  7   4  9   1 10  14  3   5 12   2 15   8  6
      1  4  11 13  12  3   7 14  10 15   6  8   0  5   9  2
      6 11  13  8   1  4  10  7   9  5   0 15  14  2   3 12
                                 S8
 
     13  2   8  4   6 15  11  1  10  9   3 14   5  0  12  7
      1 15  13  8  10  3   7  4  12  5   6 11   0 14   9  2
      7 11   4  1   9 12  14  2   0  6  10 13  15  3   5  8
      2  1  14  7   4 10   8 13  15 12   9  0   3  5   6 11

置换选择P

最终将32位的数据经过P盒,数据进行重排输出32位数据,至此F函数的实现过程讲述完毕

image.png
总结:上面的所有矩阵都是固定的,文章中的图片来自与视频地址:https://www.bilibili.com/video/BV1Kt411h7nP,des算法真的特别重要对后面理解AES算法和SMS4算法,真的不好理解,所有笔记都是自己看视频和看其他文章理解的,太不容易了,如果觉得有帮助帮忙点一个赞,源码网上到处都是,不过首先先要把原理理解对吧。下一篇文章介绍AES算法,如果此文章有不足或者哪里不够清楚希望有大佬可以指明出来。
上一篇下一篇

猜你喜欢

热点阅读