feat: v1.0.0 祀梦笔记:从 0 到 1 的数字化花园建设
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
---
|
||||
title: 置换密码 - 等待完善
|
||||
createTime: 2025/10/29 13:50:49
|
||||
permalink: /theory/cryptography/permutation-encryption/
|
||||
---
|
||||
|
||||
# 置换密码(Permutation / Transposition Ciphers)
|
||||
|
||||
置换密码的核心思想不是“把字母换成别的字母”(替换),而是**重新排列明文字符的位置**。也就是说:
|
||||
- 明文字母的集合不变,顺序发生了改变;
|
||||
- 由于字母频率不变,置换密码依然会暴露统计特征,但单词的结构与位置模式被打散。
|
||||
|
||||
与“替换密码”相比,置换密码更像是“洗牌”:把原本顺序排列的牌重新打乱。单独使用时并不安全,但与替换联合使用(乘积密码)能显著增强安全性。
|
||||
|
||||
```mermaid
|
||||
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,8):`H O L`
|
||||
- 轨2(索引 1,3,5,7,9):`E L W R D`
|
||||
- 轨3(索引 2,6):`L O`
|
||||
|
||||
密文为各轨串联:`HOL` + `ELWRD` + `LO` → `HOLELWRDLO`
|
||||
|
||||
**数学表示**:
|
||||
设明文 $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)
|
||||
|
||||
**工作原理**:
|
||||
选择一个关键词,将明文按列填入表格,再按关键词的字母排序对列进行重排,最终按列或按行读出密文。
|
||||
|
||||
```mermaid
|
||||
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](https://gitea.simengweb.com/si-meng-spec/cryptography-example-code)
|
||||
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: 替换密码
|
||||
createTime: 2025/10/27 10:47:42
|
||||
permalink: /theory/cryptography/substitution-ciphers/
|
||||
---
|
||||
|
||||
# 替换密码(Substitution Ciphers)
|
||||
|
||||
我们一起来系统梳理古典加密算法(Classical Ciphers)。这些算法虽然在现代已不再安全,但它们是密码学发展的基石,蕴含了替换、置换、密钥等核心思想,非常适合理解密码学的基本原理。
|
||||
|
||||
替换密码的核心思想是“一对一”或“多对一”的字符映射:把明文中的每一个字母(或符号)按照事先约定好的规则,替换成另一个字母(或符号)。
|
||||
|
||||
这种映射可以是固定不变的(如凯撒密码的“统一移位”),也可以是依赖密钥动态变化的(如维吉尼亚密码的“周期移位”)。
|
||||
|
||||
由于密文保留了原始字母的出现频率,只是“换了一张皮”,所以替换密码在本质上没有改变字母的统计特性,这也为频率分析攻击留下了突破口。
|
||||
|
||||
替换操作可以手工完成,也可以通过查表、转盘、甚至机械电路实现,是后续更复杂多表替换与乘积密码的雏形。
|
||||
|
||||
## 一、凯撒密码(Caesar Cipher)
|
||||
|
||||
**工作原理**:
|
||||
凯撒密码是一种循环移位密码,将字母表视为一个环形结构。加密时每个字母向后移动固定位置 $k$,解密时向前移动相同位置。
|
||||
|
||||
**数学表示**:
|
||||
设字母 A-Z 对应数字 0-25,则:
|
||||
|
||||
加密公式:
|
||||
$$E(x) = (x + k) \mod 26$$
|
||||
|
||||
解密公式:
|
||||
$$D(x) = (x - k) \mod 26$$
|
||||
|
||||
其中 $x$ 是明文字母编号,$k$ 是密钥(0 ≤ k ≤ 25)。
|
||||
|
||||
**特点**:
|
||||
- 实现简单,易于理解
|
||||
- 密钥空间仅 $26$ 种可能,安全性极低
|
||||
- 易受频率分析攻击
|
||||
- 主要具有教学价值
|
||||
|
||||
|
||||
## 二、单表替换密码(Simple Substitution Cipher)
|
||||
|
||||
**工作原理**:
|
||||
单表替换密码是凯撒密码的泛化形式,它使用一个随机的字母替换表,而不是固定的移位。每个明文字母都被唯一地映射到一个密文字母,形成一对一的替换关系。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[明文字母] --> B{替换表}
|
||||
B --> C[密文字母]
|
||||
```
|
||||
|
||||
**数学表示**:
|
||||
设字母表 $\Sigma = \{A,B,C,...,Z\}$,替换函数 $f: \Sigma \rightarrow \Sigma$ 是一个双射(一一对应),则:
|
||||
|
||||
加密公式:
|
||||
$$E(x) = f(x)$$
|
||||
|
||||
解密公式:
|
||||
$$D(y) = f^{-1}(y)$$
|
||||
|
||||
其中 $f^{-1}$ 是 $f$ 的逆函数。
|
||||
|
||||
**密钥空间**:
|
||||
单表替换密码的密钥空间是所有可能的字母排列,大小为:
|
||||
$$|K| = 26! \approx 4.03 \times 10^{26}$$
|
||||
|
||||
这个巨大的密钥空间使得暴力破解在计算上不可行。
|
||||
|
||||
**示例**:
|
||||
假设替换表为:
|
||||
```
|
||||
A→Q, B→W, C→E, D→R, E→T, F→Y, G→U, H→I, I→O, J→P,
|
||||
K→A, L→S, M→D, N→F, O→G, P→H, Q→J, R→K, S→L, T→Z,
|
||||
U→X, V→C, W→V, X→B, Y→N, Z→M
|
||||
```
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[明文: HELLO] --> B[替换加密]
|
||||
B --> C[密文: ITSSG]
|
||||
C --> D[逆替换解密]
|
||||
D --> E[明文: HELLO]
|
||||
```
|
||||
|
||||
**安全性分析**:
|
||||
虽然单表替换密码的密钥空间巨大,但它仍然易受**频率分析攻击**。因为:
|
||||
|
||||
1. **字母频率保留**:高频字母(如E、T、A)在密文中仍然是高频
|
||||
2. **单词模式保留**:常见单词模式(如"THE"、"ING")在密文中保持相同模式
|
||||
3. **双字母频率**:常见字母对(如"TH"、"ER")的频率特征仍然存在
|
||||
|
||||
**攻击方法**:
|
||||
- 单字母频率分析
|
||||
- 双字母频率分析
|
||||
- 单词长度和模式分析
|
||||
- 已知明文攻击
|
||||
|
||||
**特点**:
|
||||
- 密钥空间巨大($26!$),理论上难以暴力破解
|
||||
- 仍然易受统计攻击
|
||||
- 是密码学历史上重要的里程碑
|
||||
- 为现代密码学提供了重要启示
|
||||
|
||||
|
||||
|
||||
## 三、维吉尼亚密码(Vigenère Cipher)
|
||||
|
||||
**工作原理**:
|
||||
维吉尼亚密码是一种多表替换密码,它使用一个关键词来决定每次替换的凯撒密码移位量。关键词的每个字母对应一个移位量,明文的每个字母根据关键词的循环使用进行替换。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[明文] --> B{关键词循环扩展}
|
||||
B --> C[明文与关键词按位组合]
|
||||
C --> D{多表替换}
|
||||
D --> E[密文]
|
||||
```
|
||||
|
||||
**数学表示**:
|
||||
设字母 A-Z 对应数字 0-25。
|
||||
明文 $P = p_0 p_1 ... p_{n-1}$
|
||||
关键词 $K = k_0 k_1 ... k_{m-1}$ (长度为 $m$)
|
||||
|
||||
加密公式:
|
||||
$$E(p_i) = (p_i + k_{i \pmod m}) \mod 26$$
|
||||
|
||||
解密公式:
|
||||
$$D(c_i) = (c_i - k_{i \pmod m}) \mod 26$$
|
||||
|
||||
其中 $p_i$ 是明文第 $i$ 个字母的数字表示,$k_{i \pmod m}$ 是关键词循环后对应第 $i$ 个字母的数字表示,$c_i$ 是密文第 $i$ 个字母的数字表示。
|
||||
|
||||
**示例**:
|
||||
明文:`ATTACKATDAWN`
|
||||
关键词:`LEMON`
|
||||
|
||||
1. **关键词循环扩展**:
|
||||
将关键词 `LEMON` 循环扩展至与明文等长:`LEMONLEMONLE`
|
||||
|
||||
2. **明文与关键词按位组合(数字表示)**:
|
||||
将明文和扩展后的关键词转换为数字 (A=0, B=1, ..., Z=25)。
|
||||
明文数字: `0 19 19 0 2 10 0 19 3 0 22 13`
|
||||
关键词数字: `11 4 12 14 13 11 4 12 14 13 11 4`
|
||||
|
||||
3. **加密运算**:
|
||||
对每对明文数字 $p_i$ 和关键词数字 $k_{i \pmod m}$ 执行 $(p_i + k_{i \pmod m}) \mod 26$ 运算。
|
||||
例如:
|
||||
- 第一个字母:明文 A (0) + 关键词 L (11) = $(0 + 11) \mod 26 = 11 \rightarrow L$
|
||||
- 第二个字母:明文 T (19) + 关键词 E (4) = $(19 + 4) \mod 26 = 23 \rightarrow X$
|
||||
- 第三个字母:明文 T (19) + 关键词 M (12) = $(19 + 12) \mod 26 = 5 \rightarrow F$
|
||||
...
|
||||
最终密文:`LXFOPVEFRNHR`
|
||||
|
||||
|
||||
**安全性分析**:
|
||||
维吉尼亚密码比单表替换密码更安全,因为它引入了**多表替换**,使得密文的字母频率分布趋于平坦,从而抵抗了简单的频率分析攻击。
|
||||
|
||||
然而,它并非绝对安全,主要弱点在于**关键词的周期性**:
|
||||
1. **Kasiski 测试**:通过分析密文中重复出现的字母组,可以推断出关键词的长度。
|
||||
2. **频率分析(针对子密码)**:一旦关键词长度确定,密文可以被分成若干个凯撒密码,然后对每个子密码进行频率分析。
|
||||
|
||||
**特点**:
|
||||
- 多表替换,比单表替换密码更安全
|
||||
- 引入了关键词的概念,增强了密钥的复杂性
|
||||
- 易受Kasiski测试和频率分析的组合攻击
|
||||
- 在历史上曾被认为是“牢不可破的密码”
|
||||
|
||||
|
||||
## 附件:
|
||||
具体的使用样例代码请参考:[https://gitea.simengweb.com/si-meng-spec/cryptography-example-code](https://gitea.simengweb.com/si-meng-spec/cryptography-example-code)
|
||||
Reference in New Issue
Block a user