12 Jul 2019

分组加密的加密模式

分组加密的加密模式

  • ECB(电子密码本)

    电子密码本模式,需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密,密文按顺序连接

    7

    8

  • CBC(密码块链接)

    将数据按块大小分组

    第一组数据与向量I异或后的结果加密得到第一组密文C1

    第二组数据与C1异或后的结果加密得到第二组密文C2

    以此类推,最后将密文按顺序连接

    5

    6

    • 加密:

      $ C_1 = Enc(XOR(IV, P_1) $

      $C_i = Enc( XOR(C_{i-1}, P_i) $

    • 解密

      $P_1 = XOR(IV, Dec(C_1)) $

      $ P_i = XOR(C_{i-1}, Dec(C_i)) $

    • 特点

      • 当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文
      • 密文块要依赖以前的操作结果,所以,密文块不能进行重新排列
      • 可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击
      • 一个错误发生以后,当前和以后的密文都会被影响
  • PCBC(填充密码块链接)

    13

    14

    • 加密解密

      16

      15

  • CFB(密文反馈)

    12

    • 加密

      $S_0 = IV$

      $O_i = Enc(S_i)$

      $C_i = XOR( P_i, Lef(O_i))$

      $ S_i = A(S_{i-1}, C_i) $

    • 解密

      $S_0 = IV$

      $O_i = Enc(Key, S_i)$

      $P_i = XOR( C_i, Lef(O_i))$

      $ S_i = A(S_{i-1}, C_i)$

    $Lef(a)$表示取a最左x位

    $A(a,b)$表示x左移x位,空位用b填充

    • 特点
      • 加密算法和解密算法相同,不能适用于公钥算法
      • 使用相同的密钥和初始向量的时候,相同明文使用CFB模式加密输出相同的密文
      • 可以使用不同的初始化变量使相同的明文产生不同的密文,防止字典攻击
      • 加密强度依赖于密钥长度
      • 加密块长度过小时,会增加循环的数量,导致开销增加
      • 若密文的x位发生错误,则密码在移位寄存器恢复与加密时的状态相同之前,输出不正确的结果,而当寄存器状态恢复后,密码即可以重新同步,恢复正常输出
  • OFB(输出反馈)

    9

    10

    • 加密

      $O_0 = IV$

      $O_i = Enc(O_{i-1})$

      $C_i = XOR( P_i, O_i)$

    • 解密

      $O_0 = IV​$

      $O_i = Enc(O_{i-1})$

      $P_i = XOR( C_i, O_i)$

    • 特点

      • 因为密文没有参与链操作,所以使得OFB模式更容易受到攻击
      • 不会进行错误传播,某位密文发生错误,只会影响该位对应的明文,而不会影响别的位
      • 不是自同步的,如果加密和解密两个操作失去同步,那么系统需要重新初始化
      • 每次重新同步时,应使用不同的初始向量。可以避免产生相同的比特流,避免”已知明文”攻击
  • CTR(计数器模式)

    11

    12

  • 填充

    • ZeroPadding

      数据长度不对齐时使用0填充,否则不填充。

    • PKCS7Padding

      假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。

    • PKCS5Padding

      PKCS7Padding的子集,块大小固定为8字节。


Tags:
0 comments



本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议CC BY-NC-ND 4.0)进行许可。

This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).