Skip to content

分组密码

设计原理

分组密码的设计原则:

  • 安全性原则
    • 现代密码学的设计原理:
      • 混乱原则:使加密和密钥的关系尽可能复杂和相关
      • 扩散原则:把单个明文位或密钥位的影响尽可能扩大到更多的密文中
  • 实现原则

现代分组密码算法大多采用迭代密码的方式,乘积密码的思想,轮流使用代换 S 盒和置换 P 盒技术,可以看作伪随机置换:

  • S 盒:提供混乱效果
    • 规模越大,混乱效果越好,实现效率越低
  • P 盒:进行扩散
    • 提供雪崩效应,进一步提高混乱效果

评价密码体制的安全性:

  • 计算安全性
  • 可证明安全性
  • 无条件安全

\(S_1\)\(S_2\) 是两个密码体制,明密文空间相同,设 \(S_1=(P, P, K_1, E_1, D_1), S_2=(P, P, K_2, E_2, D_2)\),则他们的乘积密码体制 \(S_1\times S_2\coloneq(P, P, K_1\times K_2, E, D)\)

  • \(e_{(k_1, k_2)}(x) = e_{k_2}(e_{k_1}(x))\)
  • \(d_{(k_1, k_2)}(x) = d_{k_1}(d_{k_2}(x))\)

幂等密码体制:\(S^2=S\)

  • 古典密码中的移位、代换、乘法、仿射、置换、维吉尼亚、希尔密码都是幂等的

SPN 网络和 Feistel 结构

SPN 网络

AES 算法是 SPN 网络的典型代表。

SPN 网络的一轮代换如图:

image.png

SPN 网络的解密处理:

image.png

特点:

  • 易于软件、硬件实现,高效快速,易于扩展和强化
  • 可以通过增大 S 盒的规模来提高安全性,但是会给存储带来困难
  • 可以增加轮数来提高混乱程度
  • 可以同时使用多个 S 盒和 P 盒进一步提高复杂性
  • 加解密结构相似,扩散快,轮函数的过程可逆

Feistel 结构

DES、SM4 算法使用的是 Feistel 结构。

image.png

特点:

  • 加密、解密过程相同,只是子密钥逆序使用
  • 非线形变换 \(f\) 不需要单射
  • 扩散较慢

DES 算法

DES算法原理及实现

DES 算法的安全性有何不足:

  • 密钥长度不足
  • 存在弱密钥、半弱密钥(密钥有互补性)

由于 DES 是非幂等的密码体制,因此可以通过自身的乘积来提高安全性,但是实现效率低。

AES 算法

从零实现 AES 加密算法

AES 每次的操作对象是一个 128bit 的明文块,将其表示为一个 \(4\times 4\) 的网格,单个格子的大小为 1 byte.

字节代换 SubBytes

即将这个 \(4\times 4\) 的网格中每个格子按照它的值映射成 \(16\times 16\) 大小的 S 盒的元素。

假设当前格子的值为 \((AE)_{\text{16}}\) ,那么它会变成 S_box[(A)_16][(E)_16] 中的元素。

列混合 MixColumns

使用 \(\operatorname{GF}(2)[x]/(x^8 + x^4 + x^3 + x + 1)\) 来构造 \(\operatorname{GF}(2^8)\) ,下面用到的运算都在 \(\operatorname{GF}(2^8)\) 上进行。

列混合就是对前面提到的网格的每一列看成一个 \(4\times 1\) 的矩阵,左乘上一个 \(4\times 4\) 的矩阵,然后再将这列替换为得到的新矩阵,它们的 entry 大小都是 1 byte,使用 16 进制下的值进行运算。

每个 entry 看作 \(\operatorname{GF}(2^8)\) 下的一个多项式,有如下运算规则:

  • 加法:即按位异或
  • 乘法:即对应的多项式相乘,然后对 \(x^8 + x^4 + x^3 + x + 1\) 取模

AES 算法能抵御所有已公开的密码分析手段。

工作模式

分组密码工作模式

工作模式安全性依赖于算法本身的安全性。

电子密码本模式 ECB

  • 特点:
    • 将消息分为等长的分组,对每一个分组分别用同一密钥加密
    • 分组之间无任何联系
  • 优点
    • 简单
    • 利于并行计算
    • 不会传递误差
  • 缺点
    • 不能隐藏明文的模式,即对相同的明文分组加密会得到相同的密文分组
    • 可能对明文进行主动攻击
  • 适用场景:
    • 传输短消息,如加密口令

密文分组链接模式 CBC

  • 特点:
    • 将消息分为等长的分组,对每一个分组先与前一个分组(或初始向量)异或再加密
    • 分组之间相互影响
  • 优点:
    • 安全性好于 ECB
    • 隐藏了明文模式
  • 缺点:
    • 误差传递
    • 不利于并行计算
    • 需要初始向量
  • 适用场景:
    • 信息认证,如消息认证码(MAC)

密文反馈模式 CFB

  • 优点:
    • 分组密码转化为流模式,可以及时加密传输小于分组的数据
    • 隐藏了明文模式
  • 缺点:
    • 误差传递
    • 不利于并行计算
    • 需要初始向量

输出反馈模式 OFB

与 CFB 不同,OFB 是将上一分组得到的密钥输出进行反馈,作为下一分组密钥算法的输入。

  • 优点:
    • 可离线工作
    • 隐藏明文模式
    • 不存在误差传递,一个密文单元损坏只影响对应单元
  • 缺点:
    • 不利于并行计算
    • 需要初始向量
    • 密钥序列最终会重复

计数器模式 CTR

  • 优点:
    • 加密解密结构相同,实现简单
    • 可以以任意顺序加密
    • 可以并行计算
    • 可证明安全
    • 不存在误差传递
  • 缺点:
    • 密钥只能使用一次,除非能维持很长的计算器

短块处理

填充 Padding

  • ANSIX923
    • 最后一个字节填充填充的字节序列长度,其余填 0
    • 假定块长度为 8,数据长度为 9
      • 数据: FF FF FF FF FF FF FF FF FF
      • 填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
  • ISO10126
    • 最后一个字节填充填充的字节序列长度,其余填随机数据
    • 假定块长度为 8,数据长度为 9
      • 数据: FF FF FF FF FF FF FF FF FF
      • 填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
  • PKCS7
    • 每个字节填充填充的字节序列长度
    • 假定块长度为 8,数据长度为 9
      • 数据: FF FF FF FF FF FF FF FF FF
      • 填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
  • PKCS5
    • 与 PKCS7 相同,但是指定块的大小为 8 bytes
  • 自主指定
    • None, Zeros

密文挪用 CTS

避免填充造成数据长度的扩充。

  • ECB:
    • image.png
  • CBC:
    • 最后两组密文顺序调换
      image.png
    • 不用密文挪用
      image.png

Comments