分组密码设计原则
分组密码是一种使用对称密钥以确定性方式工作的加密算法。明文被分成多个大小相等的分组。如果明文长度不允许进行大小相等的分组划分,则对明文进行填充。这种类型的加密方法可以加密 128 位的分组,密钥可以是 128、192 或 256 位。在分组密码中,明文长度等于密文长度。
这种类型的加密过程一次处理一个分组,对于 n 位的输入产生 n 位的输出。但是,如果存在两个相同的分组,该过程将为它们生成两个不同的密文。它是一个具有公钥和私钥的可逆函数,这使得它的计算简单,并且是一个确定性过程。
操作模式
分组密码有 5 种操作模式,以便可以改进算法并实现更广泛的应用。这些模式如下:
**电子密码本模式 (ECB)** - 在这种类型的操作中,明文被分成多个 64 位的块。每个块都使用相同的密钥进行单独加密。加密后,密文块被发送到接收方,接收方进行解密过程以解码明文。这些块使用相同的密钥进行单独解密。在加密过程中,由于使用了相同的密钥,因此对于单个字符总是产生相同的结果。也就是说,如果存在两个相同的分组,该过程不会为它们生成两个不同的密文。因此,ECB 适用于具有较少或没有重复字符的小明文。
**密码分组链接模式 (CBC)** - 为了克服 ECB 中重复文本的问题,开发了 CBC,它每次都会为相同的分组生成新的密文。为此,这里使用了链接方法。在对一个分组进行加密时,除了密钥之外,还将前一个分组的加密结果馈送到当前加密中。因此,当前加密框不仅取决于当前明文,还取决于前一个分组的结果。对于第一个分组操作,没有前一个分组的结果需要添加,因此会生成一个称为初始化向量的随机文本块,并将其作为输入提供给第一个分组加密。
**密码反馈模式 (CFB)** - 在没有数据块的加密情况下,即明文由字符或位组成,则应用密码反馈模式。在这种类型的加密中,一个位的加密结果被馈送到下一个位的加密,因此存在错误传播的可能性,因为来自该位的错误再次传递到下一位。
**输出反馈模式 (OFB)** - 这种类型的加密也涉及位和字符,但与 CFB 不同的是,它不一次考虑每个位,而是每次加密步骤都考虑一个位块。此外,这里消除了比特率传播,因为前一个块的结果不会添加到下一个块中,而是使用反馈机制。
**计数器模式 (CTR)** - 它的工作方式类似于 OFB,但是这里去除了使用来自先前块的反馈,而是将一个称为计数器的数字序列添加到每个加密步骤中。每一步之后,计数器都会增加 1,这样就不会将相同的计数器馈送到所有块中,并且不会为相同的分组创建相同的密文。
设计原则
在分组密码中,需要管理几个方面来定义算法的复杂性级别。这些因素如下:
**加密轮数** - 明文将经历的加密轮数解释了解码难度,从而建立了安全性。例如,DES 分组密码机制经过 16 轮,而 AES 经过 10 轮。因此,相比之下,DES 比 AES 更安全。但是,轮数的过度增加也会影响算法的速度,因此在确定轮数时必须在速度和安全性之间取得完美的平衡。
**函数设计** - 在 Feistal 分组密码的设计中,轮函数的构造极大地影响了算法的复杂性。设计的函数应该是非线性的,以增强函数的强度。它还应该以一种方式创建,即没有任何其他函数可以替代它并产生相同的输出。随着复杂性的增加,安全级别也会提高,为此还集成了雪崩效应,使得输入块的最小变化会导致密文的明显变化。
**密钥调度算法** - 该算法定义了每一轮密钥的生成。例如,在 DES 中,原始长度为 56 位的密钥被分成两个 28 位的半部分。
结论
因此,分组密码的工作速度比其他加密方法快,因为它一次处理一个数据块,而且由于块大小相同,因此时间或强度不会因每个块而异。借助上面解释的设计原则,可以根据项目的需要更改安全性级别和复杂性。