把凯撒密码和栅栏密码串起来用——先用凯撒把字母换掉,再用栅栏把顺序打乱——得到的密文比单用任何一个都难破解一点。这种「把多个密码操作组合起来」的思路叫乘积密码。它是密码学发展史上的一个关键概念,直接影响了现代分组密码的设计。
基本思路
乘积密码的核心观察是:替换和换位各有弱点,但弱点不同。
替换密码的问题是保留了字母频率,所以频率分析能破解它。换位密码的问题是字母集合不变,所以攻击者知道用到了哪些字母。
如果把两者组合,理论上能互补:替换打乱频率分布,换位进一步打乱顺序。攻击者要破解,需要同时解决「映射关系」和「排列方式」两个问题,难度叠加。
这就是乘积密码的基本动机。
组合的实际效果
不过需要明确:把两个古典密码简单叠加,提升的强度是有限的。
原因在于两者的密钥空间都很小。凯撒密码 25 种,栅栏密码约 10 到 60 种(取决于栏数范围),组合起来也只有几百到上千种可能。这个数量级仍然可以被穷举。
所以乘积密码的价值不在于「组合两个弱密码能得到一个强密码」——它做不到这一点。它的价值在于揭示了一个设计原则:通过组合不同的操作类型,可以构造出比单个操作更复杂、更难分析的结构。
从乘积密码到现代分组密码
这个原则在现代密码学里得到了充分发展。
以 AES 为例,它的每一轮包含四个操作:
SubBytes(字节替换):用一个固定的 S 盒把每个字节替换成另一个字节。这是替换操作。
ShiftRows(行移位):把状态矩阵的每一行循环移位。这是换位操作。
MixColumns(列混淆):把每一列做线性变换,让一列中任一字节的变化影响到整列。这也是扩散操作。
AddRoundKey(轮密钥加):把轮密钥异或进状态。这是引入密钥的操作。
这四个操作重复 10 到 14 轮。每一轮都同时包含替换和换位,而且通过多轮迭代让影响不断扩散。
关键的区别在于:AES 的替换和换位都不是简单的操作,而是经过精心设计的。S 盒的选择要满足抵抗差分分析和线性分析的条件;行移位和列混淆的组合要保证在少数几轮内实现完全扩散。这些设计经过了几十年的公开分析和检验。
雪崩效应
乘积密码思想的一个直接结果,是现代分组密码追求「雪崩效应」。
雪崩效应指的是:输入的一个比特发生变化,输出的约一半比特都会变化。这个性质让攻击者无法通过观察输出的局部变化来推断输入的局部信息。
雪崩效应正是靠「替换 + 换位 + 多轮迭代」实现的。替换负责引入非线性,换位负责把变化扩散到更大范围,多轮迭代让扩散逐步覆盖全部输出比特。
如果只用替换或者只用换位,都无法实现这个性质。单表替换下,改变一个明文字母只会改变一个密文字母;单次换位下,改变一个字符只影响它所在位置。只有组合起来并迭代多轮,才能让一个小改动引起全局变化。
一个理解上的要点
在评估一个自定义编码方案时,乘积密码的思路可以提供一个检查角度:这个方案是不是只用了单一类型的操作。
如果方案只做字符替换,那么频率分析适用;如果只做顺序打乱,那么字母集合不变;如果只是把几种简单操作叠起来,那么密钥空间可能仍然很小。
安全性来自「经过密码分析检验的构造」,而不是「操作种类的堆叠」。把十个弱操作串起来,得到的还是一个可以被分析的结构,只是分析过程更繁琐一些。这与「用经过验证的算法」是两条完全不同的路径。
检查清单
- 乘积密码是把多种密码操作组合使用的思路
- 组合的动机是替换与换位的弱点不同,可以互补
- 简单叠加两个古典密码提升的强度有限,因为密钥空间仍然很小
- 现代分组密码(如 AES)每轮都同时包含替换、换位、混淆与加轮密钥
- 多轮迭代实现雪崩效应:一个比特变化引起约一半输出比特变化
- 安全性来自经过公开分析检验的构造,不是操作种类的堆叠