AES

高级加密标准(AES, Advanced Encryption Standard),用于替代原有的 DES,其目前被广为使用,是目前对称密钥加密中最流行的算法之一。

AES 使用代换-置换网络(SPN, Substitution-Permutation Network)加密方式,相较于 DES 采用的 Feistel 架构,AES 在软件和硬件上都能快速地加解密,实现更容易且消耗的资源更少。

AES 的区块长度固定为 128 Bit,密钥长度则可以是128、192或者256 Bit。

流加密

在密码学中,流加密(Stream cipher),又称为串流加密、资料流加密,是一种对称加密算法。加密和解密双方使用相同伪随机加密数据流作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。通常是一个位(bit)并用异或损我加密。

块加密(分组加密)

在密码学中,分组加密(Block cipher),又称分块加密,是一种对称密钥算法。它将明文分成多个行长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。

块密码的工作模式

块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性。块密码自身只能加密长度等于密码长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据也需要使用合适的填充方式将数据扩展到符合密码块大小的长度。一种工作模式描述了加密每一数据块的过程,并常常使用基于一个通常称为初始化向量(IV)的附加输入值以进行随机化,以保证其安全。

初始化向量(IV, Initialization Vector):

是许多工作模式中用于随机化加密的一块数据,因此可以由相同的明文,相同的密钥产生不同的密文,而无需重新产生密钥。

初始向量的值主要来源于随机计算、设定一个固定的值或者双方约定生成机制。 在大多数情况下,不应当在使用同一密钥的情况下两次使用同一个 IV。对于 CBC 和 CFB,重用 IV 会导致泄露明文首个块的某些信息,亦包括两个不同消息中相同的前缀。对于 OFB 和 CTR 而言,重用 IV 会导致完全失去安全性。另外,在 CBC 模式中,IV 在加密时必须是无法预测的。

填充

块密码只能对确定长度的数据块进行处理,而消息的长度通常是可变的。因此部分模式(即 CBC 和 ECB)需要最后一块在加密前进行填充。

CFB、OFB 和 CTR 模式不需要对长度不为密码块大小整数倍的消息进行特别的处理。因为这些模式是通过对块密码的输出与平文进行异或工作的。最后一个平文块与密钥流块的前几个字节异或后,产生了与该平方块大小相同的密文块。流密码的这个特性使得它们可以应用在需要密文和平文数据长度严格相等的场合,也可以应用在以流形式传输数据而不便于进行填充的场合。

电子密码本(ECB)

最简单的加密模式即为电子密码本(ECB,Electronic codebook)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。

ECB 的缺点在于同样的平文块会被加密成相同的密文块,因此不能很好的隐藏数据模式。在某些场合,这种方法不能提供严格的数据保密性,因此不推荐用于密码协议中。

优点:

  • 简单
  • 有利于平行计算
  • 误差不会被传递

缺点:

  • 不能隐藏明文的模式
  • 可能对明文进行主动攻击

密码块链接(CBC)

1976年,IBM 发明了密码分组链接(CBC, Cipher-block chaining)模式。在 CBC 模式中,每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。

CBC 是最为常用的工作模式,它的主要缺点在于加密过程中是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。

在加密时,平文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个平文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的平文块完全改变和下一个平文块中对应位发生改变,不会影响到其它平文的内容。

优点:

  • 不易主动攻击
  • 安全性好于 ECB
  • 适合传输长度长的报文

缺点:

  • 不利于并行计算
  • 误差传递
  • 需要初始化向量

填充密码块链接(PCBC)

填充密码块链接(PCBC, Propagating cipher-block chaining)或称为平文密码块链接(Plaintext cipher-block chaining),是一种可以使密文中的微小更改在解密时导致平文大部分错误的模式,并在加密的时候也具有同样的特性。

密文反馈(CFB)

密文反馈(CFB, Cipher feedback)模式类似于 CBC,可以将块密码变为自同步的流密码;CFB 的解密过程几乎就是颠倒的 CBC 的加密过程。

优点:

  • 隐藏了明文模式
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点:

  • 不利于并行计算
  • 误差传递
  • 唯一的 IV

输出反馈(OFB)

输出反馈(OFB, Output feedback)模式可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与平文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使平文中同样位置的位也产生翻转。

每个使用 OFB 的输出块与其前面所有的输出块相关,因此不能并行化处理。然而,由于平文和密文只在最终的异或过程中使用,因此可以事先对 IV 进行加密,最后并行的将平文或密文进行并行的异或处理。

优点:

  • 隐藏了明文模式
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点:

  • 不利于并行计算
  • 对明文的主动攻击是可能的
  • 误差传递

计数器模式(CTR)

计数器(CTR, Counter mode)模式也被称为整数计数模式(IMC, Integer Counter Mode)模式和 SIC (SIC, Segmented Integer Counter) 模式。

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

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

特点:

  • 硬件效率:允许同时处理多块明文或者密文
  • 软件效率:允许并行计算
  • 预处理
  • 随机访问:第 i 块密文的解密不依赖于第 i-1 块密文,提供很高的随机访问能力
  • 安全性
  • 简单性
  • 无填充
  • 错误不传播
  • 不能进行完整性校验

参考文献: