对称密码模式

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

  1. 计算机的操作对象并不是文字,而是由 o 和丨排列而成的比特序列。
  2. 将现实世界中的东西映射为比特序列的操作称为编码( encoding )。

XOR

由于 X0R 和加法运算很相似,因此一般用 + 和O组合而成的符号®来表示 X0R。
对称密码模式_第1张图片
举例: 一枚棋子,翻转两遍,还是那枚棋子

  1. 由于两个相同的数进行 XOR 运算的结果一定为 0 , 因此如果将 A ㊉B的结果再与B进行XOR运算,则结果会变回 A。

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

  3. 对于密码技术来说,“是否可以预测” 是非常重要的一点。能够产生不可预测的比特序列,对于密码技术的贡献是巨大的。这种不可预测的比特序列就称为随机数。

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

只要通过暴力破解法对密钥空间进行遍历,无论什么密文总有一天也都能够被破解。然而,一次性密码本( one-time pad )却是一个例外。即便用暴力破解法遍历整个密
钥空间,一次性密码本也绝对无法被破译。

一次性密码本的加密

一次性密码本是一种非常简单的密码,它的原理是 “将明文与一串随机的比特序列进行
X0R 运算”。如果将硬币的正面设为 0, 反面设为 1,则通过不断掷硬币就能够产生这样一串随机的比特序列。

  1. 随机生成一个和明文长度相同的bit串,再与明文异或运算
    在这里插入图片描述

—次性密码本的解密

解密就是加密的反向运算。也就是说,用密文和密钥进行 XOR 运算,就可以得到明文。
在这里插入图片描述

—次性密码本是无法破译的

  1. 这里说的无法破译,并不是指在现实的时间内难以破译,而是指即便拥有一种运算能力无穷大的计算机,可以在一瞬间遍历任意大小的密钥空间,也依然无法破译。
  2. 由于明文中所有可能的排列组合都会出现,因此我们无法判断其中哪一个才是正确的明文( 也就是用哪个密钥才能够正确解密 )。
  3. 一 次 性 密 码 本 是 无 条 件 安 全的( unconditionally secure ), 在理论上是无法破译的( theoretically unbreakable )

为什么没有被使用

  1. 密钥的配送:破译需要的密钥也需要一并发送出去,既然能安全的发送密钥,还对信息加密什么?
  2. 密钥的保存:密钥必须安全的保存,既然能安全的保存密码,还不能安全的保存信息?
  3. 密钥的同步:比特位不允许错位

DES

  1. DES ( Data Encryption Standard )是 1977 年美国联邦信息处理标准( FIPS ) 中所采用的一种对称密码。
  2. 由于 DES 的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在不应该再使用 DES 了。

加密和解密

  1. DES 是一种将 64 比特的明文加密成 64 比特的密文的对称密码算法,它的密钥长度是 56 比特。尽管从规格上来说,DES 的密钥长度是 64 比特,但由于每隔 7 比特会设置一个用于错误检查的比特,因此实质上其密钥长度是 56 比特。
  2. DES 是以 64 比特的明文( 比特序列 )为一个单位来进行加密的,这个 64 比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码( block cipher ),DES 就是分组密码的一种。
  3. DES 每次只能加密 64 比特的数据,如果要加密的明文比较长,就需要对 DES 加密进行迭代( 反复 ),而迭代的具体方式就称为模式( mode )。

DES 的结构

对称密码模式_第2张图片
(1 ) 将输入的数据等分为左右两部分。
(2) 将输人的右侧直接发送到输出的右侧。
(3) 将输入的右侧发送到轮函数。
(4) 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。
(5) 将上一步得到的比特序列与左侧数据进行 XOR 运算,并将结果作为加密后的左侧。

  1. 但是,这样一来 “右侧” 根本就没有被加密,因此我们需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调。

  2. Feistel 网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了,而 Feistel 网络本身的结构,在加密和解密时都是完全相同的

性质

  1. Feistel 网络的轮数可以任意增加。
  2. 加密时无论使用任何函数作为轮函数都可以正确解密。
  3. 加密和解密可以用完全相同的结构来实现

3DES

三重 DES( triple-DES )是为了增加 DES 的强度,将 DES 重复 3 次所得到的一种密码算法,也称为 TDEA ( Triple Date Encryption Algorithm ),通常缩写为 3DES。

对称密码模式_第3张图片

  1. 明文经过三次 DES 处理才能变成最后的密文,由于 DES 密钥的长度实质上是 56 比特,因
    此三重 DES 的密钥长度就是 56 x 3=168 比特。
  2. 加密—解密—加密:目的是为了让三重 DES 能够兼容普通的 DES,当三重 DES 中所有的密钥都相同时,三重 DES 也就等同于普通的 DES 了。
  3. 尽管三重 DES 目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

AES

  1. AES ( Advanced Encryption Standard )是取代其前任标准( DES )而成为新标准的一种对称密码算法。
  2. Rijndael 是由比利时密码学家 Joan Daemen 和 Vincent Rijmen设计的分组密码算法,于2000 年被选为新一代的标准密码算法—AES
  3. 在 AES 的规格中,分组长度固定为 128 比特,密钥长度只有 128、 192 和 256比特三种。

Rijndael 的加密和解密

  1. 和 DES —样,Rijndael 算法也是由多个轮构成的,其中每一轮分为 SubBytes、ShiftRows、MixColumns 和 AddRoundKey 共 4 个步骤。
  2. Rijndael没有使用Feistel 网络,而是使用了 SPN 结构。
  3. Rijndael 的输入分组为 128 比特,也就是 16 字节。
    1. SubBytes:将每一个字节替换为另一个字节
      对称密码模式_第4张图片
    1. ShiftRows:将以 4 字节为单位的行(n>w )按照一定的规则向左平移,且每一行平移的字节数是不同的。
      对称密码模式_第5张图片
    1. MixColumns:是对一个 4 字节的值进行比特运算,将其变为另外一个 4 字节值。
      对称密码模式_第6张图片
    1. AddRoundKey:将 MixColumns 的输出与轮密钥进行 XOR
      对称密码模式_第7张图片

分组密码的模式———分组密码是如何迭代的

DES 和 AES 都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的 “模式”。

分组密码与流密码

  1. 密码算法可以分为分组密码和流密码两种。
  2. 分组密码( block cipher )是每次只能处理特定长度的一块数据的一类密码算法,这里的
    "—块” 就称为分组( block )。此外,一个分组的比特数就称为分组长度( block length) ,AES 的分组长度为 128 比特,因此 AES —次可加密 128 比特的明文,并生成 128 比特的
    密文。
  3. 流密码( stream cipher )是对数据流进行连续处理的一类密码算法。流密码中一般以 1 比特、
    8 比特或 32 比特等为单位进行加密和解密。
  4. 千万不能使用 ECB模式。

模式

主要的模式有下面五类:

• ECB 模式:Electronic CodeBookmode ( 电子密码本模式 )
• CBC 模式:Cipher Block Chaining mode ( 密码分组链接模式 )
• CFB 模式:Cipher FeedBack mode ( 密文反馈模式 )
• OFB 模式:Output FeedBack mode ( 输出反馈模式 )
• CTR 模式:CounTeR mode ( 计数器模式 )

明文分组与密文分组

  1. 明文分组:即分组后的明文。明文分组的长度与分组密码算法的分
    组长度是相等的。
  2. 密文分组:是指使用分组密码算法将明文分组加密之后所生成的密文。
    对称密码模式_第8张图片

ECB模式

ECB 模式的全称是 Electronic CodeBook 模式。在 ECB 模式中,将明文分组加密之后的结果将直接成为密文分组
对称密码模式_第9张图片
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充( padding )。

总结:

  1. ECB 模式是所有模式中最简单的一种。
  2. 明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组,只要观察一下密文,就可以知道明文中存在怎样的重复组合。
  3. ECB 模式的一大弱点,就是可以在不破译密文的情况下操纵明文,即只要将密文分组元素顺序改变就可以造成破坏

CBC模式

  1. CBC 模式是将前一个密文分组与当前明文分组的内容混合起来进行加密的,这样就可以避免 ECB 模式的弱点。
  2. CBC 模式的全称是 Cipher Block Chaining 模式( 密文分组链接模式 ),之所以叫这个名字,
    是因为密文分组是像链条一样相互连接在一起的。
    对称密码模式_第10张图片
    ECB 模式只进行了加密,而 CBC 模式则在加密之前进行了一次 XOR。

初始化向量

当加密第一个明文分组时,由于不存在 “前一个密文分组”,因此需要事先准备一个长度为—个分组的比特序列来代替 “前一个密文分组”,这个比特序列称为初始化向量( InitializationVector ), 通常缩写为 IV。一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

CBC 模式的特点

  1. 明文分组在加密之前一定会与 “前一个密文分组” 进行 XOR 运算,因此即便明文分组 1 和2 的值是相等的,密文分组 1 和 2 的值也不一定是相等的。这样一来,ECB 模式的缺陷在 CBC模式中就不存在了。
  2. 有一个分组损坏了(例如由于硬盘故障导致密文分组的值发生了改变等),解密时最多只会有 2 个分组受到数据损坏的影响
    对称密码模式_第11张图片

CBC 模式的应用实例

确保互联网安全的通信协议之一 SS1/TLS, 就是使用CBC 模式来确保通信的机密性的,如使用CBC 模式三重 DES 的 3DES_EDE_CBC 以及 CBC 模式 256 比特 AES 的 AES_256_CBC 等。

CFB 模式

  1. CFB 模式的全称是 Cipher FeedBack 模式( 密文反馈模式 )

  2. 在 CFB 模式中,前一个密文分组会被送回到密码算法的输人端。所谓反馈,这里指的就是返回输入端的意思。
    对称密码模式_第12张图片

  3. 在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量( IV )来代替,这一点和 CBC 模式是相同的

OFB 模式

  1. OFB 模式的全称是 OutputFeedback 模式( 输出反馈模式 )。在 OFB 模式中,密码算法的输出会反馈到密码算法的输入中
    对称密码模式_第13张图片
    对称密码模式_第14张图片

CTR 模式

CTR 模式的全称是 CcmnTeR 模式( 计数器模式 )。CTR 模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码
对称密码模式_第15张图片

应该使用哪种模式

对称密码模式_第16张图片

你可能感兴趣的:(密码学,人工智能)