加密模式全解析

jopen 10年前

两大类的加密:块加密和流加密,以及块加密的5种常见加密模式和2种衍生加密模式的简单介绍。

加密算法基本分为两类:块加密和流加密。

流加密

使用密钥产生出一个伪随机的位流(特点:周期极长,可以重现),这个伪随机的数据流和明文数据流进行XOR的结果作为密文数据流。

块加密

将数据分成同样大小的多个块,每次对一个块进行加密,因此有时需要补位等预处理。

块加密有5种加密模式:

1ECB(电子密码本模式)

将明文数据分成若干块,每块的大小跟加密密钥长度相同,然后每块都用相同的密钥进行加密。

加密模式全解析

2CBC(密码分组链接模式)

同样也要将将明文数据分成若干块,使用初始向量与明文块做XOR得到的结果块使用密钥进行加密,得到密文块。密文块又作为下一个明文块XOR的向量使用。

加密模式全解析

PCBC是一种改进模式,新的向量由密文块和明文块XOR产生。

加密模式全解析

3CFB(密码反馈模式)

在尺寸为一个块大小的寄存器里保存有初始向量,密钥加密寄存块之后取结果块的最左侧字节与明文第一个字节XOR,结果作为密文的第一个字节,随后寄存器原数据左移一字节,将该字节压入寄存器最右侧,进行下一字节的加密。

加密模式全解析

4OFB(输出反馈模式)

过程和CFB很类似,只是压入寄存器最右侧的字节是加密结果块的最左侧字节。

加密模式全解析

可以看到,明文和密文只在最后才采用了加密和解密,而寄存器的数据变化与明文和密文无关,这实质上是用块加密法来产生流加密的伪随机数据流的方法。

OFB的一个变体,是采用明文全为0的CBC算法来生成伪随机数据流:

加密模式全解析

5CTR(计算器模式)

这种模式也是用块加密来实现流加密的一种方法。最简单的情况,初始向量和一个递增的计数器拼为一个块,该块经加密作为伪随机数据流的一个块的数据,计数器有规律的改变其值并和初始向量拼接为下一个用于加密生成伪随机数据流的块。如下:

加密模式全解析