Files
SiMengWebSite_Notes/docs/notes/theory/cryptography/classical-encryption/permutation-encryption.md
祀梦 8c7e8ea6e3 docs(cryptography): 添加置换密码文档并更新导航配置
添加关于古典加密算法中置换密码的详细文档,包括栅栏密码和列移位置换的工作原理、数学表示及安全性分析。同时更新笔记导航配置以包含新文档链接。

新增信创竞赛环境搭建指南文档,包含系统配置要求和详细操作步骤。
2025-10-29 22:12:12 +08:00

4.1 KiB
Raw Blame History

title, createTime, permalink
title createTime permalink
置换密码 - 等待完善 2025/10/29 13:50:49 /theory/cryptography/permutation-encryption/

置换密码Permutation / Transposition Ciphers

置换密码的核心思想不是“把字母换成别的字母”(替换),而是重新排列明文字符的位置。也就是说:

  • 明文字母的集合不变,顺序发生了改变;
  • 由于字母频率不变,置换密码依然会暴露统计特征,但单词的结构与位置模式被打散。

与“替换密码”相比,置换密码更像是“洗牌”:把原本顺序排列的牌重新打乱。单独使用时并不安全,但与替换联合使用(乘积密码)能显著增强安全性。

flowchart LR
  P[明文] --> A{根据密钥生成位置}
  A --> B[重新排列字符]
  B --> C[密文]

一、栅栏密码Rail Fence Cipher

工作原理 将明文按“Z字形”写入若干行称为“栅栏/轨道”),再按行依次读出即得到密文。轨道数即为密钥。

示意(以 3 轨为例):

轨1: 0       4       8      ...
轨2: 1    3  5    7  9      ...
轨3:   2       6              ...

示例 明文:HELLOWORLD 轨道数:3

  • 轨1索引 0,4,8H O L
  • 轨2索引 1,3,5,7,9E L W R D
  • 轨3索引 2,6L O

密文为各轨串联:HOL + ELWRD + LOHOLELWRDLO

数学表示 设明文 $P = p_0 p_1 \dots p_{n-1}$,根据密钥生成一个位置序列 $s_0, s_1, \dots, s_{n-1}$(即置换次序),则:


C_j = p_{s_j}, \quad j = 0,1,\dots,n-1

解密使用逆序列 $t = s^{-1}$


p_i = C_{t_i}, \quad i = 0,1,\dots,n-1

特点

  • 实现简单,直观“打乱顺序”
  • 频率不变,难以抵抗纯统计分析;但位置模式被破坏,较难直接猜词
  • 作为教学与与替换密码的组合(乘积密码)更有价值

二、列移位置换Columnar Transposition

工作原理 选择一个关键词,将明文按列填入表格,再按关键词的字母排序对列进行重排,最终按列或按行读出密文。

flowchart LR
  A[明文填入表格] --> B{按关键词排序列}
  B --> C[重排读取]
  C --> D[密文]

简例(概念演示) 明文:ATTACKATDAWN 关键词:ZEBRA(按字母表排序为 A B E R Z

  1. 将明文逐行填入 5 列表格;
  2. 按关键词排序A→B→E→R→Z重排列
  3. 按重排后的列依次读出密文。

(实际实现时需要处理明文长度不足一整行的填充策略,如使用 X 或留空。)

数学表示(一般置换模型) 关键词决定一个列置换 $\pi$,其作用是重新排列列索引。若把明文按列读取为序列 $P$,加密可抽象为:


C = \operatorname{Permute}_{\pi}(P), \quad P = \operatorname{Permute}_{\pi^{-1}}(C)

特点

  • 比栅栏更灵活,关键词让置换更“难猜”
  • 仍保留频率分布,易受已知明文/选择明文的结构分析攻击
  • 常与替换结合形成更强的乘积密码(如 ADFGX/ADFGVX 密码)

三、联合与加固:置换 × 替换

将“替换”与“置换”组合(先替换后置换,或多轮交替)能显著增强安全性:

  • 替换打乱统计特征(字母频率分布变平)
  • 置换打乱位置结构(模式与相邻关系被破坏)

这种思路在现代密码设计中仍然常见(“混淆与扩散”理念),尽管算法形式已经大为不同。

四、安全性与弱点(直观理解)

  • 单独的置换密码不改变字母频率,抵抗统计攻击能力有限
  • 容易受到已知明文/选择明文攻击(通过结构猜测置换)
  • 多轮、复杂置换能提高攻击成本,但不建议单独用于实际安全场景

五、小练习(可选)

试着把你自己的名字用 3 轨栅栏加密;然后写出解密过程(先确定轨道索引,再按逆序重建原文)。

附件:

具体的使用样例代码请参考:https://gitea.simengweb.com/si-meng-spec/cryptography-example-code