什么是列换位密码(Columnar Transposition Cipher)?
列换位密码(columnar transposition cipher)是一种经典加密方法,通过重新排列消息中字母的位置来加密,而不改变字母本身。与凯撒密码或维吉尼亚密码等替换密码不同,换位密码保留所有原始字母——只是打乱其顺序。
明文按行写入以关键字定义列的网格中,然后按关键字字母的字母顺序逐列读出,生成密文。这使频率分析完全失效,因为字母分布与原始明文完全相同。
列换位密码的工作原理
加密步骤详解
关键字: ZEBRAS 明文: WE ARE DISCOVERED FLEE AT ONCE
第一步——按关键字字母顺序为各列编号:
| Z | E | B | R | A | S |
|---|---|---|---|---|---|
| 6 | 3 | 2 | 4 | 1 | 5 |
排序:A(1)、B(2)、E(3)、R(4)、S(5)、Z(6)
第二步——将明文逐行写入网格:
| 6 | 3 | 2 | 4 | 1 | 5 |
|---|---|---|---|---|---|
| W | E | A | R | E | D |
| I | S | C | O | V | E |
| R | E | D | F | L | E |
| E | A | T | O | N | C |
| E | X | X | X | X | X |
最后一行用 X 填充以补满所有列。
第三步——按编号顺序读出各列(1、2、3、4、5、6):
- 第 1 列(A):E V L N X
- 第 2 列(B):A C D T X
- 第 3 列(E):E S E A X
- 第 4 列(R):R O F O X
- 第 5 列(S):D E E C X
- 第 6 列(Z):W I R E E
密文: EVLNX ACDTX ESEAX ROFOX DEECX WIREE
解密
解密时,接收方必须知道关键字。他们根据密文长度除以关键字长度计算行数,按关键字字母顺序填入各列,然后逐行读取网格以还原明文。
双重列换位密码
双重换位密码使用两个不同的关键字两次应用该密码。第一次加密的输出作为第二次的输入。这大幅提高了安全性,因为第一次的列结构被第二次完全打乱。
双重换位密码在第一次世界大战和第二次世界大战期间被军事力量广泛使用,原因如下:
- 仅需铅笔、纸张和一个记忆中的关键字
- 能抵抗简单的密码分析技术
- 两个短关键字提供了相当可观的安全性
安全性分析
| 方面 | 单次换位 | 双重换位 |
|---|---|---|
| 密钥空间 | n!(关键字长度的阶乘) | n1! x n2! |
| 频率分析 | 无效 | 无效 |
| 字谜攻击 | 脆弱 | 抵抗力强 |
| 已知明文攻击 | 脆弱 | 更具抵抗力 |
| 历史军事使用 | 有限 | 广泛(一战、二战) |
为何频率分析失效
换位密码保留了原始字母频率,因为没有替换任何字母。密文包含与明文完全相同的字母,只是顺序不同。攻击者无法从密文的字母分布中区分明文信息。
字谜攻击
对于单次换位,密码分析师可以猜测列数(从密文长度的因数推断),然后尝试重新排列各列,直到出现可读的双字母组合和三字母组合。这种方法对双重换位几乎无效。
列换位密码与其他密码的比较
| 特征 | 列换位密码 | 凯撒密码 | 维吉尼亚密码 | Playfair 密码 |
|---|---|---|---|---|
| 类型 | 换位 | 替换 | 多表替换 | 双字母组替换 |
| 改变字母? | 否 | 是 | 是 | 是 |
| 频率分析 | 无用 | 有效 | 部分有效 | 部分有效 |
| 密钥类型 | 关键字 | 移位数字 | 关键字 | 关键字 |
| 加密单元 | 完整消息 | 单个字母 | 单个字母 | 字母对 |
历史使用
列换位密码有着丰富的军事历史:
- 第一次世界大战:德国军队用于野战通信
- 第二次世界大战:双重换位变体被抵抗组织和情报机构使用
- ADFGVX 密码:德国军队将 Polybius 方阵 替换与列换位结合,创造出一战中最复杂的密码系统之一
- 英国特别行动处(SOE):英国特工使用以诗歌为关键字的双重换位密码进行秘密通信
常见问题
如何用手工方式进行列换位加密?
将关键字横写在网格顶部,按字母顺序对各列编号,逐行填入明文(如有需要则在最后一行填充),然后按编号顺序读出各列。以关键字 ZEBRAS 和消息"HELLO WORLD"为例:为各列编号 A=1、B=2、E=3、R=4、S=5、Z=6,填好网格后依次读取第 1 至第 6 列。
列换位应该选择什么关键字?
选择没有重复字母的关键字操作最简单。关键字越长,列数越多,安全性越高。历史用户通常选择易记的短语或代号。避免使用非常短的关键字(4 个字母以下),因为其安全性极低。对于双重换位,使用两个不同长度的不同关键字。
在不知道关键字的情况下能破解列换位密码吗?
单次列换位可以通过猜测列数(从密文长度的因数推断)然后进行字谜攻击——尝试不同的列排列直到出现可读文本。双重换位则难以破解得多。我们的解码工具包含自动暴力破解模式,可自动尝试常见关键字。
列换位密码与栅栏密码有什么区别?
两者都是换位密码,但文本排列方式不同。栅栏密码将文本以锯齿形写入固定行数,而列换位密码将文本写入网格后按关键字确定的顺序读取列。列换位密码的密钥空间更大,因其更高的安全性而在军事中更受青睐。
为何列换位密码在战时广受欢迎?
它只需铅笔和纸,关键字可以记忆(无需可被缴获的密码本),能抵抗频率分析,且双重换位变体在当时提供了强大的安全性。野战特工无需任何特殊设备即可加密和解密消息。
相关工具和资源
- 列换位密码解码器 — 解密消息并暴力破解未知关键字
- 列换位密码示例 — 加密和解密的逐步演示
- Polybius 方阵 — 常与列换位结合用于 ADFGVX 密码
- 维吉尼亚密码 — 用于对比的多表替换密码
- Playfair 密码 — 另一种基于网格加密的二战时期密码
- 凯撒密码 — 用于基础理解的最简单替换密码