块加密的工作模式

块加密

块加密,也成分组加密,是一类对称密钥加密算法。它将明文分成多个等长的块,使用确定的算法和对称密钥对每组数据块分别进行加密解密。

常见的块加密算法有:DES,3DES

块密码工作模式

块密码工作模式允许使用同一个分组密码密钥对多于一块的数据进行加密并保证密文的安全性。单次运行块密码算法只能加密长度等于密码分组长度的单块数据,如果需要加密的数据边长,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据还需要使用合适的填充方式将数据扩展到符合算法要求的长度。

一种工作模式描述了加密一个长明文的每一个数据块的过程,并常常使用一个被称为初始化向量的附加输入值对加密过程进行随机化提高安全性。

ECB 模式(Electronic Codebook) | 电子密码本模式

最简单的工作模式,加密前根据加密块大小将明文分成若干块,之后对每个明文块进行加密,拼接后输出密文。解密同理。

优点:可并行运算、速度快、易于标准化、明文传输错误不会扩大到影响整个数据区域。

缺点:

  1. 相同的明文生成相同的密文块;
  2. 通过删除、替换密文分组可以对明文进行操作;
  3. 不能抵御重放攻击;
  4. 不能很好的隐藏数据模式;

CBC 模式(Cipher-block Chaining) | 密码块链接

每个明文块先与前一个密文块进行异或运算再进行加密,第一块明文与初始向量 IV 进行异或运算。

优点:

  1. 明文的数据特征不会反应在密文中;
  2. 解密过程支持并行(因为解密时已经知道每一块密文块的内容);

缺点:

  1. 加密计算过程是串行的(因为后一次运算需要前一次运算的结果);
  2. 如果明文在传输过程中出错,错误会向后传递;

PCBC 模式(Propagating Cipher-block Chaining)| 填充密码块链接

PCBC 模式是一种可以使密文中微小更改在解密时导致明文大部分错误的模式,并且在加密是也具有同样的特征。

PCBC 主要用于 Kerberos v4 和 WASTE 中。

CFB 模式(Cipher Feedback) | 密文反馈

密文反馈模式是一种接近于流密码的工作模式,他不用 DES 加密明文,而是把 DES 作为一个随机数生成器,把初始向量 IV 作为种子。这样就可以从初始向量 IV 和指定 key 生成字节流,让后把明文与这个字节流进行异或。

CFB 模式每次加密明文的一个字节,因此 CFP 模式不需要对明文进行填充。

优点:

  1. 不需要填充;
  2. 解密过程支持并行运算;

缺点:

  1. 加密过程不支持并行运算;
  2. 明文中的错误会向后传递;
  3. 不能抵御重放攻击;

OFB 模式(Output Feedback) | 输出反馈

OFB 模式是先用块加密器生成密钥流,然后再将密钥流与明文流进行异或运算得到密文流;解密时先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。

可以利用输入为全 0 的 CBC 模式产生 OFB 模式的密钥流,这个过程可以利用快速 CBC 硬件实现来加速 OFB 模式的加密过程。

优点:

  1. 不需要填充;
  2. 可以提前准备加密或解密需要的密钥;
  3. 加密、解密使用相同结构;
  4. 对包含某些错误比特的密文进行解密时,只有明文中相应的比特会出错;

缺点:

  1. 不支持并行运算;
  2. 主动攻击密文的某一(些)比特时,明文中对应位置的比特也会发生变换;

CTR 模式(Counter Mode)

CTR 模式也被称为 ICM 模式(Integer Counter Mode,整数计数模式)或 SIC 模式(Segmented Integer Counter),与 OFB 相似,CTR 将块密码变为流密码。它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数,但使用一个普通的计数器是最简单和最常见的做法。

CTR 模式的特征类似于 OFB,但它允许在解密时进行随机存取。由于加密和解密过程均可以进行并行处理,CTR 适合运用于多处理器的硬件上。

优点:

  1. 不需要填充;
  2. 可以事先准备加密解密需要的密钥;
  3. 加密和解密结构相同;
  4. 支持并行计算;

缺点:

  1. 主动攻击反转密文分组中的某些比特时,解密出的明文中相同位置的数据也会被反转;

参考

  1. Pionee1eer:块加密的工作模式
  2. 张维鹏:对称加密算法之分组加密的六种工作模式…
  3. HappyDeveloper:对称加密算法的几种模式优缺点一览
  4. 维基百科:分组密码
  5. 维基百科:分组密码工作模式