流密码 (Stream Ciphers)

  • 原理:模仿 OTP,用 PRG 生成密钥流 (Keystream)。
  • 实例
    • LFSR (线性反馈移位寄存器):硬件效率高,但线性特性导致其本身不安全(Berlekamp-Massey 算法可还原)。通常组合使用(如 A5/1)。
    • RC4:软件效率高,但存在统计偏差(前几个字节偏差),已不再安全。
  • 关键忌讳绝对不能使用相同的 nonce/key 对不同的消息进行加密(会导致 Two-time pad 攻击)。

线性反馈移位寄存器 (LFSR)

  • 原理:利用线性递推关系生成伪随机序列。
  • 安全性单独使用是不安全的。因为其生成过程是线性的,已知 位输出即可通过 Berlekamp-Massey 算法还原初始状态。
  • 应用:通常作为构建块,通过非线性组合(如 GSM 中的 A5/1)来提升安全性。

分组密码 (Block Ciphers)

设计原则

  • 混淆 (Confusion):掩盖密钥与密文的关系(如 S-Box)。
  • 扩散 (Diffusion):明文的一位变动应影响密文的许多位(如 P-Box/MixColumns)。

两种核心结构

  1. Feistel 网络 (DES使用)
    • 将块分为左右两半
    • 迭代:
    • 优点:轮函数 不需要是可逆的,解密电路与加密电路几乎相同(仅密钥顺序相反)。
    • 不能并行计算,线性
  2. SP 网络 (AES使用)
    • 代换-置换网络 (Substitution-Permutation Network)
    • 每一轮包含 S-Box(代换)和 P-Box(置换/混合)。
    • 特点:S-Box 必须是可逆的(为了解密)。并行性通常优于 Feistel。

经典算法对比

  • DES:Feistel 结构,64位块,56位密钥,16轮。不安全(密钥太短,易受暴力破解)。
  • AES:SPN 结构,128位块,128/192/256位密钥。目前标准。