Skip to content
Notes
GitHub

第 3 章 分组密码体制

3.1. 概述

将明文消息编码表示后的数字序列 x0,x1,,xi,x_0,x_1,\cdots,x_i,\cdots 划分成长为 n\displaystyle{ n } 的组 x=(x0,,xn1)\mathbf{x}=(x_0, \cdots, x_{n-1}),各组分别在密钥 k=(k0,,kt1)\mathbf{k}=(k_0, \cdots, k_{t-1}) 控制下变换成等长的输出数字序列 y=(y0,,ym)\mathbf{y}=(y_0, \cdots, y_m),加密函数 E:Vn×KVmE: V_n \times K \to V_m。这种密码实质上是字长为 n\displaystyle{ n } 的数字序列的代换密码。

  • 通常 m=n\displaystyle{ m = n }
  • m>n\displaystyle{ m > n } 有数据扩展
  • m<n\displaystyle{ m < n } 有数据压缩

设计的算法需满足下面要求

  1. 分组长度 n\displaystyle{ n } 要足够大,使分组代换字母表中的元素个数 2n\displaystyle{ 2 ^{ n } } 足够大,防止明文穷举攻击
  2. 密钥量要足够大,尽可能消除弱密钥并使所有密钥同等的好,防止密钥穷举攻击奏效
  3. 由密钥确定置换的算法要足够复杂,充分实现明文和密钥的扩散和混淆
  4. 加密和解密运算简单,易于软件和硬件高速实现
  5. 数据扩展尽量小
  6. 差错传播尽可能小

3.1.1. 代换

如果明文和密文的分组长都为 n\displaystyle{ n } 比特,则明文的每一个分组都有 2n\displaystyle{ 2 ^{ n } } 个可能的取值。为使加密运算可逆(解密可行),明文的每一个分组都应产生唯一的一个密文分组,这样的变换是可逆的,称明文分组到密文分组的可逆变换为代换。不同可逆变换的个数有 2n!\displaystyle{ {2 ^{ n } !} }

如果分组长度太小,如 n=4\displaystyle{ n = 4 },系统则等价于古典的代换密码,容易被攻破。如果分组长度 n\displaystyle{ n } 足够大,而且从明文到密文可有任意可逆的代换,那么明文的统计特性将被隐藏而使以上的攻击不能奏效。

3.1.2. 扩散与混淆

Shannon 提出的设计密码系统的两个基本方法,目的是抗击敌手对密码系统的统计分析,例如消息中不同字母出现的频率,或可能出现的特定单词或短语。

将明文的统计特性散布到密文中,实现方式是使得密文中每一位由明文中多位产生。例如对英文消息 M=m1m2m3M=m_1m_2m_3\cdots 的加密

yn=chr(i=1kord(mn+i)(mod26))y_n=\text{chr}\left(\sum_{i=1}^k \text{ord}(m_{n+i}) \pmod{26} \right)

密文字母 yn\displaystyle{ y _{ n } } 由明文中 k\displaystyle{ k } 个连续字母相加而得。

分组密码在将明文分组依靠密钥变换到密文分组时,扩散的目的是使明文和密文之间的统计关系变得尽可能复杂,以使敌手无法获得密钥。混淆是使密文和密钥之间的统计关系变得尽可能复杂,以使敌手无法获得密钥。

3.4. 分组密码的运行模式

模式描述用途
电码本(ECB)每个明文组独立地以同一密钥加密传送短数据
密码分组链接(CBC)加密算法的输入是当前明文组与前一密文组的异或传输数据分组;认证
密码反馈(CFB)每次只处理输入的 j\displaystyle{ j } 比特,将上次的密文用作加密算法的输入以产生伪随机输出,该输出再与当前明文异或以产生当前密文传送数据流;认证
输出反馈(OFB)与CFB类似,不同之处是本次加密算法的输入为前一次加密算法的输出有扰信道上传送数据

3.4.1. 电码本模式

最简单,一次对一个 64 比特长的明文分组加密,每次加密密钥都相同。当密文取定时,对明文的每一个分组,都有唯一的密文与之对应。

3.4.2. 密码分组链接模式

可以让重复的明文分组产生不同的密文分组。一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文之间的固定关系。

在产生第一个密文分组时,需要有一个初始向量 IV 与第一个明文分组异或。解密时,IV 和解密算法对第一个密文分组的输出进行异或以恢复第一个明文分组。IV 对于收发双方都应是已知的,IV 应像密钥一样被保护。

public/cypto/crypto03kloun.svg

3.4.3. 密码反馈模式

DES 是分组长为 64 比特的分组密码,但利用密码反馈模式或 OFB 模式可将 DES 转换为流密码。流密码不需对消息进行填充,而且运行是实时的。因此如果传送字母流,可使用流密码对每个字母直接加密并传送。

流密码的密文和明文一样长。如果需要发送每个字符长为 8 比特,就应当使用 8 比特密钥来加密每个字符。

public/cypto/crypto03cfghfg.svg

3.4.4. 输出反馈模式

OFB 结构类似于 CFB ,不同之处为:

  • OFB 模式是将加密算法的输出反馈到移位寄存器
  • CFB 模式是将密文单元反馈到移位寄存器

OFB 优点是传输过程中的比特错误不会被传播,C1\displaystyle{ C _{ 1 } } 出错只会导致 P1\displaystyle{ P _{ 1 } } 受影响,其他不会受影响。CFB 中 C1\displaystyle{ C _{ 1 } } 作为移位寄存器的输入,它的结果将影响到后续的结果。

public/cypto/crypto03fdbsdg.svg