《图解密码技术》笔记3:对称密码(共享密钥密码)

时间: 2023-12-21 admin IT培训

《图解密码技术》笔记3:对称密码(共享密钥密码)

《图解密码技术》笔记3:对称密码(共享密钥密码)

目录

3.1 炒鸡蛋与对称密码

3.2 本章学习主要内容

3.3 从文字密码到比特序列密码

3.3.1 编码

3.3.2 XOR(异或)

3.4 一次性密码本–绝对不会被破译的密码

3.4.4 一次性密码本是无法破译的

3.4.5 一次性密码本为什么没有被使用

3.5 DES(Data Encryption Standard)

3.5.1 什么是DES        

3.5.2 加密和解密

3.5.3 DES的结构(Feistel 网络)

3.6 三重DES(3DES)

3.6.1 什么是三重DES

3.6.2 三重DES的加密

3.6.3 三重DES的解密

3.6.4 三重DES的现状

3.7 AES的选定过程

3.7.1 什么是AES

3.8 Rijndael算法

3.8.1 什么是Rijndael

3.8.2 Rijndael的加密和解密

3.8.3 Rijndael的破译

3.8.4 应该使用哪种对称密码


3.1 炒鸡蛋与对称密码

        无重要内容。

3.2 本章学习主要内容

  1. 比特序列运算与XOR运算(异或)
  2. 一次性密码本
  3.  对称密码算法:DES、3DES、AES以及其他一些密码算法
  4. 众多对称密码算法中,到底应该使用哪一种

3.3 从文字密码到比特序列密码

3.3.1 编码

        计算机的操作对象是由0和1排列而成的比特序列。将现实世界中的东西映射为比特序列的操作称为编码。如下图:

3.3.2 XOR(异或)

        异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

  • 将明文A用密钥B进行加密,得到(A⊕B)。 
  • 将密文(A⊕B)用密钥B进行解密,得到明文A。

        只要选择一个合适的B,仅仅使用XOR可以实现一个高强度的密码。

        能够产生不可预测的比特序列,对于密码技术的贡献是巨大的。这种不可预测的比特序列称为随机数

3.4 一次性密码本–绝对不会被破译的密码

        原理:将明文与一串随机的比特序列进行XOR运算。明文与密钥长度一样。

3.4.4 一次性密码本是无法破译的

        一次性密码本无法破译的根源在于,无法确认破译后的字符串是否是正确的明文

        假设对 username 这个字符串进行XOR加密,那么在破译时,需要尝试所有的密钥,那么
破译时,既会出现 username 这个正确的字符串,也会出现比如 aaaaaaaa,bbbbbbbb 这样的规则字符串,也会出现 password 这样有意义的英文单词,也就是说破译后会出现明文中所有可能的字符组合,从中无法判断哪个才是正确的。

3.4.5 一次性密码本为什么没有被使用

  1. 密钥的配送:密钥的长度和密文是相等的。矛盾点 — 如果能够有一种方法将密钥安全地发送出去,那么岂不是也可以用同样的方法来安全地发送明文了吗?
  2. 密钥的保存:矛盾点通上面的一样,“保护明文” 和 “保护和明文一样长的密钥”一样矛盾,问题没有得到实质性的解决。
  3. 密钥的重用:绝对不能重用过去使用过的随机比特序列。
  4. 密钥的同步:密钥和明文长度一样。如果明文很长,密钥也会很长。会引发密钥同步的问题。
  5. 密钥的生成:需要生成大量的随机数,必须是真正的随机数,只有那些机密性重过一切的场合才会使用。

        综上所述,一次性密码本是一种几乎没有适用性的密码。但是,一次性密码本的思路却孕育出了流密码。 

        关于流密码,将在第4章详细探讨。传送门——>

        关于伪随机数生成器,将在第12章详细探讨。传送门——>

3.5 DES(Data Encryption Standard)

3.5.1 什么是DES        

        现在 DES 的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在不应该使用DES了。

3.5.2 加密和解密

        DES是一种将 “64比特的明文” 加密成 “64比特密文” 的对称密码算法。DES的密钥长度是64比特,其中每隔7比特会设置一个用于错误检查的比特,因此实际上密码长度是56比特

        DES以64比特的明文为一个单位进行加密,这个64比特的单位称为分组,以分组为单位进行处理的密码算法称为 分组密码。DES就是分组密码的一种。

        DES每次只能加密64比特的数据,如果要加密的明文较长,就需要对DES加密进行迭代,迭代的具体方式称为 模式。 将在第4章详细探讨。

3.5.3 DES的结构(Feistel 网络)

 加密过程:

        在 Feistel 网络中,加密的各个步骤称为 轮(round),整个加密的过程就是进行若干次轮的循环。DES是一种16轮循环的 Feistel 网络。

        下图中就是 Feistel 网络中加密的一轮:

         子密钥指的是本轮加密使用的密钥,在 Feistel 网络中,每一轮都需要使用一个不同的子密钥。

一轮的具体步骤如下:

  1. 将输入的数据等分为左右两部分
  2. 将输入的右侧直接发送到输出的右侧
  3. 将输入的右侧发送到轮函数
  4. 轮函数根据右侧数据和子密钥计算出一串看上去是随机的比特序列
  5. 将步骤4中得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧

        从这个过程中可以发现,一轮后右侧的数据没有加密,因此在每轮之间需要将左侧和右侧的数据对调。

如下展示了一个三层的 Feistel 网络加密过程:

 解密过程:
        我们尝试将一轮加密的输出结果用相同的子密钥重新运行一次,无论轮函数具体是什么,都能够将密文还原为明文。

 有多轮的情况也一样,解密时只要按照相反的顺序来使用子密钥就可以了。

Feistel 网络的特点,总结来说:

  • 轮数可以任意增加
  • 加密时无论使用任何函数作为轮函数都可以正确解密
  • 加密和解密可以用完全相同的结构来实现

在AES候选的5个算法中,有3个算法(MAR6,RC6,Twofish)都是使用了 Feistel 网络。

3.6 三重DES(3DES)

3.6.1 什么是三重DES

        三重DES是为了增加DES强度,将DES重复三次得到的一种密码算法。缩写为 3SED。

3.6.2 三重DES的加密


        明文经过三重DES处理才能变成最后的密文,DES密钥的长度实际上是56比特,因此三重DES的密钥长度就是56X3 = 168比特。 加密 -> 解密 -> 加密

         三重DES的过程为什么是:加密 -> 解密 -> 加密?这是为了兼容普通的DES加密,如果三重的3个密钥都相同,三重DES也就等同于普通DES了。

3.6.3 三重DES的解密

        解密过程与加密正好相反。

3.6.4 三重DES的现状

        目前还被银行等机构使用,但是由于其处理熟读不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

3.7 AES的选定过程

3.7.1 什么是AES

        AES:是取代其前任标准(DES)而成为新标准的一种对称加密算法。

        全世界提供了多个对称密码算法作为AES的候选,最终从这些候选中选出了一种名为 Rijndael 的对称加密算法。

3.8 Rijndael算法

3.8.1 什么是Rijndael

        Rijndael 也是分组密码算法。2000年选为标准密码算法——AES。 AES分组长度固定为128比特,密钥长度只有128、192、256这三种。

3.8.2 Rijndael的加密和解密

        Rijndael 算法也是多轮的,每一轮中分为4个步骤(SubBytes、ShiftRows、MixColumns、AddRoundKey),Rijndael使用了SPN结构。

加密过程,每一轮中的步骤大致如下:

 解密过程:


        其中的 InvMixColumns, InvShiftRows, InvSubBytes 分别为 MixColumns, ShiftRows,SubBytes 的反向运算。

        更为详细的Rijndael算法介绍,请移步 ——> AES(Rijndael算法)详解

                                                        传送门2——>Rijndael密码算法

3.8.3 Rijndael的破译

        目前:到现在还没出现针对Rijndael的有效攻击。

        对Rijndael来说,每一步都是用数学公式来表达的,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那就意味Rijndael能够通过数学方法进行破译,而这也就为新的攻击方式的产生提供了可能。

        不过这还是一种假设。

3.8.4 应该使用哪种对称密码

  1. DES、3DES已经不安全了,不会再应用到任何新的用途。
  2. 现在大家应该使用AES(Rijndael),因为它快速、安全,并且能够在各种平台上工作。

      AES最终候选算法应该可以作为AES的备份。和Rijndael一样,这些密码算法也都经过了严格的测试,且没发现任何的弱点。