换位密码为什么不如替换密码

工具相关 ·

古典密码大致分成两类:替换密码改变字符的取值,换位密码改变字符的顺序。两者都属于「看起来看不懂」的加密,但它们的强度不一样——换位密码更弱,而且弱点更明显。理解这个差异,能帮你看清「打乱顺序」这个操作的保护能力到底有多大。

两类密码的基本区别

替换密码:把每个字母换成另一个字母。凯撒密码、单表替换密码、维吉尼亚密码都属于这一类。密文里的字母和明文里的字母不是同一个,但数量分布可能相似。

换位密码:保持字母本身不变,只改变它们的排列顺序。栅栏密码、列换位密码属于这一类。密文用的还是那些字母,只是位置变了。

换位密码的致命弱点

换位密码最大的问题在于:它完全不改变字母的统计特征。

原文里有 12 个 E,密文里也有 12 个 E;原文里有 3 个 Z,密文里也有 3 个 Z。频率分布一模一样,只是位置不同。

这意味着两件事。

第一,频率分析依然有效。攻击者统计密文的字母频率,得到的分布与自然语言一致。虽然不能直接读出内容(因为顺序被打乱了),但频率信息本身已经泄露了「这段文本用的是哪种语言」「大概是什么类型的内容」。

第二,可以通过排列尝试还原。因为字母集合已知,攻击者需要猜的只是「怎么排列」。如果文本较短,可能的排列方式有限,可以枚举。

与替换密码的对比

替换密码至少改变了字母的取值,所以频率分析需要「映射」这一步——先统计密文频率,再推测映射关系,然后迭代修正。这个过程需要一定的技巧和耐心。

换位密码连这一步都省了。攻击者看到频率分布直接就知道原文用的字母,只需要解决排列问题。而排列问题的解法也更多——比如利用常见的双字母组合(th、he、in)来定位相邻关系,逐步拼出完整的排列。

所以从攻击成本看,换位密码的门槛低于替换密码。

一个具体的例子

假设原文是 ATTACK AT DAWN,去掉空格是 ATTACKATDAWN。

用凯撒密码位移 3 加密,得到 DWWDFNDWGDZQ。字母全部变了,频率分布也随之改变。

用栅栏密码加密,得到的还是由 A、T、C、K、D、W、N 这些字母组成的串,只是顺序不同。

攻击者拿到第二类密文时,一眼就能看出「原文里出现了 3 个 A、3 个 T」这样的信息。而拿到第一类密文时,他需要先建立映射关系。

两者都不可靠

需要强调的是,这个比较只是相对的——两类古典密码都不安全。

替换密码的密钥空间对凯撒密码只有 25 种,对单表替换也只有 26 的阶乘(虽然看起来大,但频率分析能在多项式时间内破解)。换位密码的密钥空间同样很小,栏数、列数、排列方式的可选范围都不大。

现代密码学的做法是把两者结合,并且用数学上可分析的构造来保证安全边界。单独的替换或单独的换位,都不足以抵抗有动机的攻击者。

换位思路在现代的应用

虽然换位密码本身不安全,但「换位」这个操作在现代密码里有它的位置。

扩散。现代分组密码的轮函数里包含「行移位」「列混淆」这类操作,作用是把输入比特的影响扩散到输出的更多位置上。这让明文的一个小改动会引起密文的大范围变化。

置换表。DES 等算法里使用固定的置换表来重排比特位置。这些表是算法规范的一部分,不构成密钥。

这些应用与古典换位密码的区别在于:它们不是单独使用的加密手段,而是整个密码系统中的一个组成部分,与其他操作(替换、异或、加轮密钥)配合工作。单独拿出「换位」这一步,同样不能提供任何安全性。

检查清单

  • 替换密码改变字符取值,换位密码只改变字符顺序
  • 换位密码不改变字母频率,频率分析依然有效
  • 因为字母集合已知,攻击者只需解决排列问题,门槛低于替换密码
  • 两类古典密码都不安全,密钥空间都很小
  • 现代密码把换位作为轮函数的一部分,配合替换与异或等操作
  • 单独的换位操作不提供安全性,只是整体设计中的一个组件
阅读 20