流密码 (Stream Ciphers)
- 原理:模仿 OTP,用 PRG 生成密钥流 (Keystream)。ci=mi⊕G(k)i。
- 实例:
- LFSR (线性反馈移位寄存器):硬件效率高,但线性特性导致其本身不安全(Berlekamp-Massey 算法可还原)。通常组合使用(如 A5/1)。
- RC4:软件效率高,但存在统计偏差(前几个字节偏差),已不再安全。
- 关键忌讳:绝对不能使用相同的 nonce/key 对不同的消息进行加密(会导致 Two-time pad 攻击)。
线性反馈移位寄存器 (LFSR)
- 原理:利用线性递推关系生成伪随机序列。si+n=cn−1si+n−1⊕⋯⊕c0si。
- 安全性:单独使用是不安全的。因为其生成过程是线性的,已知 2n 位输出即可通过 Berlekamp-Massey 算法还原初始状态。
- 应用:通常作为构建块,通过非线性组合(如 GSM 中的 A5/1)来提升安全性。
分组密码 (Block Ciphers)
设计原则
- 混淆 (Confusion):掩盖密钥与密文的关系(如 S-Box)。
- 扩散 (Diffusion):明文的一位变动应影响密文的许多位(如 P-Box/MixColumns)。
两种核心结构
- Feistel 网络 (DES使用)
- 将块分为左右两半 Li−1,Ri−1。
- 迭代:Li=Ri−1,Ri=Li−1⊕f(Ri−1,ki)。
- 优点:轮函数 f 不需要是可逆的,解密电路与加密电路几乎相同(仅密钥顺序相反)。
- 不能并行计算,线性
- SP 网络 (AES使用)
- 代换-置换网络 (Substitution-Permutation Network)。
- 每一轮包含 S-Box(代换)和 P-Box(置换/混合)。
- 特点:S-Box 必须是可逆的(为了解密)。并行性通常优于 Feistel。
经典算法对比
- DES:Feistel 结构,64位块,56位密钥,16轮。不安全(密钥太短,易受暴力破解)。
- AES:SPN 结构,128位块,128/192/256位密钥。目前标准。