美文网首页
密码学笔记3——DES密码

密码学笔记3——DES密码

作者: 自学java的菜鸟小赵 | 来源:发表于2020-08-30 19:47 被阅读0次

    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算法,如果此文章有不足或者哪里不够清楚希望有大佬可以指明出来。

    相关文章

      网友评论

          本文标题:密码学笔记3——DES密码

          本文链接:https://www.haomeiwen.com/subject/rxresktx.html