加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)

加密与解密的加密模式有很多种,在玩Cipher的时候,其中创建Cipher对象的时候需要指定加密模式,去学习了一下各种加密模式,在这里整理记录一下

在加密的类型中,一般分为 对称加密非对称加密散列算法。针对 对称加密,一般又有 **分组加密 **和 序列密码

  • 分组加密(或 块加密):以 为单位进行一次加密,将明文按一定的位长分组成块,明文块加密后得到密文组。解密雷同,密文组解密还原成明文组。常见的有 DES,AES,3DES等。
  • 序列加密(或 流加密):以 为单位进行一次加密,利用少量的密钥通过某种复杂的密码算法进行运算产生大量的伪随机位流,用于对明文位流的加密。

常见的分组加密的模式有以下几种:

  • ECB
  • CBC
  • PCBC
  • CFB, CFBx
  • OFB, OFBx
  • CTR

1 ECB(Electronic codebook,ECB)电子密码本模式

原理:最基本的工作模式,将待处理信息分组,每组分别进行加密或解密处理

加密解密图:

请添加图片描述

说明

  • 数据分组 + 各组加密/解密

优点:

  • 简单,易实现,可并行

缺点:

  • 分组进行加密,加密方式一致,那么可根据密文情况观察到明文情况,有被破解的风险,不安全

  • 加密消息块相互独立成为被攻击的弱点,不能提供严格的数据保密性,可以对明文进行主动攻击;

2、CBC(Cipher-block chaining,CBC)密码分组链接模式

原理:每个明文块先与其前一个密文块进行异或,然后再进行加密

加密解密图:

请添加图片描述

说明:

  • 可以看到,这种方法的每个密文块都依赖于它前面的明文块,使加密的各段数据之间有了联系,保证了每条消息的唯一性。第一个块中需要使用初始化向量IV
  • 加密的时候,第一块后的每一块 需要先与前一个密文异或再加密 Ci = Ek (P ⊕ Ci-1), C0 = IV.
  • 解密的时候,一个密文会影响到该明文与后一个明文,不会对其他明文产生影响 Pi = Dk (Ci) ⊕Ci-1, C0 = IV.

优点:

  • 无法直接从密文中看出明文信息块的规律,所以安全性比较好
  • 因密文块依赖于所有的信息块,加密时,若明文块有一个消息改变则影响所有密文块
  • 加密解密过程都需要 初始化向量(而且要相同)

缺点:

  • 因为具备依赖性,加密过程是串行的,无法被并行化,但是解密可以并行化,因为一个密文会影响到该明文与后一个明文,不会对其他明文产生影响

  • 消息必须是块大小的整数倍,不够需要填充

3、PCBC(Propagating cipher-block chaining,PCBC)填充密码块链接模式/明文密码块链接

原理:加解密时,每个明文块不但要与上一个密文异或,还要与上一个明文进行异或

加密解密图:

请添加图片描述

说明:

  • 可以看到,这种方法的每个密文块都依赖于它前面的明文块和密文块,使加密的各段数据之间有了联系,保证了每条消息的唯一性。第一个块中需要使用初始化向量IV
  • 加密的时候,第一块后的每一块都要和前一块的明文与密文先异或再加密 Ci = Ek (Pi ⊕ Ci-1 ⊕ Pi-1 ), C0 = IV.
  • 解密的时候,第一块后的每一块解密后再与前一块的明文与密文异或 Pi = Dk (Ci) ⊕ Ci-1 ⊕ Pi-1 , C0 = IV.

优点:

  • 无法直接从密文中看出明文信息块的规律,所以安全性比较好
  • 因密文块依赖于所有的信息块,加密时,若明文块有一个消息改变则影响所有密文块 ,密文块有一个改变也会改变所有明文块
  • 加密解密过程都需要 初始化向量(而且要相同)

缺点:

  • 因为具备依赖性,加密/解密过程是串行的,无法被并行化,速度会受到影响

  • 消息必须是块大小的整数倍,不够需要填充

4、CFB(Cipher feedback,CFB)密文反馈模式

原理前一个密文使用秘钥Key再加密后,与明文异或,得到密文。第一个密文需要初始向量IV加密得到。解密也同样使用加密器进行解密

加密解密图:

请添加图片描述

请添加图片描述

说明:

  • 第一个块中都需要使用初始化向量IV
  • 加密:通过密钥key加密后与明文进行异或得到密文,后面所有的加密都依赖前一个密文
  • 解密:通过密钥加密后,与密文进行异或得到明文,当前的密文会影响当前的明文与下一个明文,不会影响所有明文的生成

优点:

  • 隐藏了明文模式
  • 加密前后的数据位数是相同的,上面两种都需要是块的整数倍(可能会填充)
  • 可以及时加密传送小于分组的数据

缺点:

  • 与CBC类似,加密不利于并行计算,解密可以并行计算
  • 加密时一个明文单元损坏影响多个单元
  • 加密解密需要唯一的一个与块的大小相同的移位寄存器,并用初始化向量IV将寄存器初始化

5、OFB(Output feedback,OFB)输出反馈模式

原理: 首先用 块加密器 生成 密钥流(Keystream),然后再将密钥流与明文流异或得到密文流;解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文 (与CFB类似)

加密解密图:

请添加图片描述

请添加图片描述

说明:

  • 第一个块中都需要使用初始化向量IV
  • 加密:通过密钥key加密后与明文进行异或得到密文,后面所有的加密都依赖于前一个加密后的输出,CFB是依赖前一个密文
  • 解密:通过密钥加密后,与密文进行异或得到明文,当前的 加密后的输出 会影响当前的明文与下一个明文,不会影响所有明文的生成,CFB是 密文会影响,而不是加密后的输出

优点:

  • 隐藏了明文模式
  • 加密前后的数据位数是相同的,上面两种都需要是块的整数倍(可能会填充)
  • 可以及时加密传送小于分组的数据

缺点:

  • 与CBC类似,加密不利于并行计算,解密可以并行计算
  • 加密时一个明文单元损坏影响多个单元
  • 加密解密需要唯一的一个与块的大小相同的移位寄存器,并用初始化向量IV将寄存器初始化

6、CTR(Counter mode,CTR)计数器模式

原理: 与OFB相似,CTR将块密码变为流密码。它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数

加密解密图:

请添加图片描述

请添加图片描述

说明:

  • 加密:通过密钥key加密后与明文进行异或得到密文
  • 解密:通过密钥加密后,与密文进行异或得到明文

优点:

  • 允许并行计算、允许同时处理多块明文 / 密文
  • 可随机访问,算法和加密盒的输出不依靠明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,这将极大地提高吞吐量。
  • 与CFB一样,无需填充

其他:(不常用,了解即可)

  • CCM是Cipher Block Chaining Message Authentication Code (CBC-MAC)和Counter模式(CTR)的组合
  • GCM是Galois message authentication code mode, 伽罗瓦消息验证码 (GMAC)与Counter模式(CTR)的组合

参考博客:

https://blog.csdn.net/u013073067/article/details/87086562

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐