Back to notebook

密码学基础:安全模型、同余算术、古典密码与序列密码

This post is not yet available in English. Showing the original version.
Table of Contents
Table of Contents

本篇为密码学课程的基础理论篇,系统梳理密码学形式化安全模型、整数同余代数体系、古典密码及其统计分析破解方法,以及序列密码(流密码)与线性反馈移位寄存器(LFSR)的内部机理与周期性质。


一、密码学安全模型与攻击者能力边界

一个形式化的对称密码体制由五元组 (M,C,K,E,D)(\mathcal{M}, \mathcal{C}, \mathcal{K}, \mathcal{E}, \mathcal{D}) 构成:

对于任意明文 x∈Mx \in \mathcal{M} 与密钥 k∈Kk \in \mathcal{K},必须满足正确性条件(Correctness):

Dk(Ek(x))=x.D_k(E_k(x)) = x.

正确性是密码体制可用的最低先决条件,但正确性并不等价于安全性。系统的安全性依赖于攻击者在特定能力边界下无法推断出关于明文或密钥的非平凡信息。

1.1 柯克霍夫原则(Kerckhoffs's Principle)

现代密码学的立论基石是柯克霍夫原则:

密码体制的安全性必须完全建立在密钥的机密性之上,而不能依赖于加密算法本身的保密性。

即使攻击者完全获知了加密算法的全部数学细节、硬件实现电路与软件源代码,只要密钥未泄露,系统依然必须保持安全。企图通过“隐藏算法机制”来实现安全的做法(Security through Obscurity)在现代密码工程中被严格摒弃。

1.2 经典的四大密码分析攻击模型

评估一个密码算法的安全性时,必须严格界定攻击者(Cryptanalyst)所拥有的权限与资源:

flowchart TD
    COA["唯密文攻击 (COA)<br>能力: 仅能拦截截获部分密文 c"] --> KPA["已知明文攻击 (KPA)<br>能力: 拥有若干对应的 (m_i, c_i) 明密文对"]
    KPA --> CPA["选择明文攻击 (CPA)<br>能力: 可自由选择明文 m,获得加密生成的密文 c"]
    CPA --> CCA["选择密文攻击 (CCA)<br>能力: 可自由提交伪造密文 c,获得解密结果 m (除目标密文外)"]
  1. 唯密文攻击(Ciphertext-Only Attack, COA):
    • 攻击者仅能截获或窃听一段或多段密文 yy。攻击者通常利用明文语言的统计冗余度(如字母频数分布、重复词汇结构)进行分析。
  2. 已知明文攻击(Known-Plaintext Attack, KPA):
    • 攻击者掌握了一定数量由同一密钥生成的明文及其对应的密文对 (xi,yi)(x_i, y_i)(例如已知文件头部的固定格式或协议握手标记)。目标是反解出全局密钥 kk 或后续未见密文。
  3. 选择明文攻击(Chosen-Plaintext Attack, CPA):
    • 攻击者可以临时访问加密设备(Encryption Oracle),能够任意构造特定的明文序列并获得对应的密文(例如构造全零明文或单比特差异明文),借此隔离算法内部的未知变量。
  4. 选择密文攻击(Chosen-Ciphertext Attack, CCA):
    • 攻击者可以临时访问解密设备(Decryption Oracle),能够构造特定的密文并获得解密响应(或解密失败的差错反馈,如 Padding Oracle),目标是推断出未知目标密文对应的明文。

二、同余算术与剩余类代数基础

离散模代数是现代密码学算法的算术基石。

2.1 同余关系与基本性质

设 a,b,n∈Za, b, n \in \mathbb{Z} 且 n>0n > 0。若 nn 整除差值 a−ba - b(即 n∣(a−b)n \mid (a - b)),则称 aa 与 bb 模 nn 同余,记作:

a≡b(modn).a \equiv b \pmod n.

同余关系是整数集上的等价关系,它将整数集划分为 nn 个互不相交的等价类(剩余类)。模运算对加法与乘法具有严格的代数相容性:

手算技巧:在计算大数的加减乘运算时,可随时在中间步骤对操作数进行模约简,以严格控制数值规模。例如模 13 下:15≡2≡−11(mod13)15 \equiv 2 \equiv -11 \pmod{13},29≡3(mod13)29 \equiv 3 \pmod{13},因此 15⋅29≡2⋅3=6(mod13)15 \cdot 29 \equiv 2 \cdot 3 = 6 \pmod{13}。

2.2 模运算中的“除法”与乘法逆元

在普通实数代数中,“除以 aa”等价于乘以倒数 1/a1/a。但在整数模代数体系 Zn={0,1,…,n−1}\mathbb{Z}_n = \{0, 1, \ldots, n-1\} 中,不存在分数的概念。

乘法逆元定义:对于整数 aa,若存在整数 xx 使得:

a⋅x≡1(modn),a \cdot x \equiv 1 \pmod n,

则称 xx 为 aa 模 nn 的乘法逆元(Multiplicative Inverse),记作 a−1(modn)a^{-1} \pmod n。

[!IMPORTANT]
乘法逆元存在的充要条件:
元素 aa 模 nn 存在乘法逆元的充分必要条件是 aa 与模数 nn 互素,即:
gcd⁡(a,n)=1.\gcd(a, n) = 1.

代数证明:
根据裴蜀定理(Bézout's Identity),存在整数 s,ts, t 使得 sa+tn=gcd⁡(a,n)sa + tn = \gcd(a, n)。

为什么同余式不能任意两端消去公因数:
在 Z26\mathbb{Z}_{26} 中,2⋅1≡2⋅14(mod26)2 \cdot 1 \equiv 2 \cdot 14 \pmod{26}(因 28≡2(mod26)28 \equiv 2 \pmod{26}),但两端消去 2 得到 1≡14(mod26)1 \equiv 14 \pmod{26} 是完全错误的。因为 gcd⁡(2,26)=2≠1\gcd(2, 26) = 2 \ne 1,数字 2 在模 26 下不存在乘法逆元,消去律失效。


三、古典密码与密码分析思想

3.1 移位密码(Caesar 密码)

将英文字母表 A—Z 依序编码为整数 0,1,…,250, 1, \ldots, 25。密钥 k∈{0,1,…,25}k \in \{0, 1, \dots, 25\}:

移位密码的密钥空间极小(∣K∣=26|\mathcal{K}| = 26)。在唯密文攻击下,攻击者只需尝试全部 25 个非平凡密钥,即可在数秒内通过肉眼识别出可读英语语义,实现彻底穷举爆破。

3.2 单表代换密码与字母频率分析

单表代换密码允许将字母表进行任意双射排列置换。其密钥空间高达:
∣K∣=26!≈4.03×1026≈288.|\mathcal{K}| = 26! \approx 4.03 \times 10^{26} \approx 2^{88}.
该密钥空间已完全足以抵御暴力穷举攻击。

破解核心原理(保留了统计频数特征):
单表代换是确定性的单字母映射,它完全保留了自然语言中字母的统计出现概率与多字母关联结构。

分析流程:

  1. 统计密文中各字符出现频次,筛选出最高频候选字母;
  2. 假定最高频字符对应明文 E 或 T,列出候选映射;
  3. 结合单字母词(a, I)与三字母高频词(the)推导相邻字符;
  4. 逐步代入全文,通过上下文的拼写与语义自洽性验证并修正替换表。

3.3 仿射密码(Affine Cipher)

仿射密码将单表代换推广为一次线性同余变换:

y=(a⋅x+b) mod 26.y = (a \cdot x + b) \bmod 26.

四、序列密码(流密码)与一次一密(OTP)

序列密码将明文按比特流或字符流逐位处理,通过伪随机数发生器(PRNG)生成密钥流序列 s0,s1,s2,…s_0, s_1, s_2, \ldots:

加解密算法完全对称,其正确性由异或运算的自反性保证:(xi⊕si)⊕si=xi⊕0=xi(x_i \oplus s_i) \oplus s_i = x_i \oplus 0 = x_i。

4.1 一次一密(One-Time Pad, OTP)与完美保密性

香农(Claude Shannon)在信息论中从数学上严格证明了:一次一密体制具有完美保密性(Perfect Secrecy / 信息论安全)。即对于任意密文 yy,其后验概率与先验概率完全相等:

P(X=x∣Y=y)=P(X=x).P(X = x \mid Y = y) = P(X = x).

完美保密性的四大苛刻先决条件:

  1. 密钥流必须由真正的物理随机源生成(真正的均匀独立分布);
  2. 密钥长度必须不小于明文长度;
  3. 每个密钥流片段绝不重复使用(用后即毁);
  4. 密钥必须安全分发并在通信双方之间绝对保密。

为什么暴力穷举对 OTP 彻底无效:
对于长度为 ℓ\ell 的任意密文 yy,在均匀分布的密钥空间内,存在且仅存在唯一的密钥 k=x⊕yk = x \oplus y 将其映射到任意长度为 ℓ\ell 的有意义明文 xx。若攻击者穷举所有可能的 2ℓ2^\ell 个密钥,将解出全字典中所有语法通顺的合法文本(例如“今晚进攻”、“今晚撤退”、“明日休息”)。所有候选明文在数学后验概率上完全均等,攻击者在信息论上无法获取任何有助于辨识真实意图的信息。

4.2 密钥流复用漏洞(Key Reuse Attack)

在流密码体系中,密钥流的重复使用将导致灾难性的安全崩溃。
设两个不同的明文流 X1X_1 与 X2X_2 使用了相同的密钥流 SS 进行加密:

C1=X1⊕S,C2=X2⊕S.C_1 = X_1 \oplus S,\qquad C_2 = X_2 \oplus S.

攻击者将截获的两段密文进行按位异或:

C1⊕C2=(X1⊕S)⊕(X2⊕S)=X1⊕X2.C_1 \oplus C_2 = (X_1 \oplus S) \oplus (X_2 \oplus S) = X_1 \oplus X_2.

五、线性反馈移位寄存器(LFSR)原理与周期分析

为了在硬件中以极低的门电路开销生成长周期的伪随机序列,工程上广泛采用线性反馈移位寄存器(LFSR, Linear Feedback Shift Register)。

5.1 硬件结构与状态递推

一个级数为 mm 的二进制 LFSR 由 mm 个触发器单元 (si+m−1,…,si+1,si)(s_{i+m-1}, \ldots, s_{i+1}, s_i) 与若个异或门构成:

si+m=∑j=0m−1cjsi+j(mod2)=cm−1si+m−1⊕⋯⊕c1si+1⊕c0si.s_{i+m} = \sum_{j=0}^{m-1} c_j s_{i+j} \pmod 2 = c_{m-1}s_{i+m-1} \oplus \cdots \oplus c_1 s_{i+1} \oplus c_0 s_i.

对应的特征反馈多项式定义为:
P(x)=xm+cm−1xm−1+⋯+c1x+c0.P(x) = x^m + c_{m-1}x^{m-1} + \dots + c_1 x + c_0.

5.2 状态转移实例(3 位 LFSR)

设 3 级 LFSR 的反馈多项式为 P(x)=x3+x2+1P(x) = x^3 + x^2 + 1,对应递推关系式为 si+3=si+2⊕sis_{i+3} = s_{i+2} \oplus s_i(抽头为 c2=1,c1=0,c0=1c_2 = 1, c_1 = 0, c_0 = 1)。
设初始非零状态为 (s2,s1,s0)=(1,0,0)(s_2, s_1, s_0) = (1, 0, 0):

时钟拍号 ii当前寄存器状态 (si+2,si+1,si)(s_{i+2}, s_{i+1}, s_i)输出比特 sis_i新反馈位 si+3=si+2⊕sis_{i+3} = s_{i+2} \oplus s_i
01 0 001⊕0=11 \oplus 0 = 1
11 1 001⊕0=11 \oplus 0 = 1
21 1 111⊕1=01 \oplus 1 = 0
30 1 110⊕1=10 \oplus 1 = 1
41 0 111⊕1=01 \oplus 1 = 0
50 1 000⊕0=00 \oplus 0 = 0
60 0 110⊕1=10 \oplus 1 = 1
71 0 0(状态复原,周期循环开始)—

输出的周期密钥流为 0011101,其周期恰好为 23−1=72^3 - 1 = 7。

5.3 周期定理与本原多项式(Primitive Polynomial)

mm 级 LFSR 的状态总数为 2m2^m。由于递推是线性的,全零状态 (0,0,…,0)(0,0,\dots,0) 的反馈位恒为 0,只能在自身形成自环。因此非零状态所能达到的理论极大周期为 2m−12^m - 1(达到该最大周期的输出序列称为 m 序列)。

反馈多项式的代数性质对应的状态转移环结构
本原多项式(Primitive)所有 2m−12^m - 1 个非零状态连成单个遍历全空间的最大长度单一环
不可约但非本原多项式非零状态空间分裂为若干个周期相等且均严格小于 2m−12^m - 1 的独立子环
可约多项式(Reducible)非零状态空间分裂为多个不同周期的子环,周期强烈依赖初始初值选取

代数辨析:在二元有限域 GF(2)\mathrm{GF}(2) 上,多项式不可约仅意味着其不能分解为低次多项式的乘积;而本原多项式进一步要求其根是域乘法群的本原元。本原多项式必然是不可约多项式,但不可约多项式不一定是本原多项式。

5.4 为什么 LFSR 不能单独用作强安全密码体制?

尽管采用本原多项式的 LFSR 能够生成统计伪随机性质良好、周期极长的比特流,但单 LFSR 在现代密码学中绝不可直接作为安全的流密码。

弱点根源:线性代数可解性。
由于状态转移完全由模 2 线性方程描述,攻击者在已知明文攻击下,只需截获连续的 2m2m 个密钥流比特,即可构建 mm 个线性方程,利用高斯消元法或 Berlekamp-Massey 算法,在 O(m2)O(m^2) 的多项式时间内完全反解出寄存器的级数 mm、全部反馈系数 cic_i 以及当前寄存器状态,从而精确预测未来的全部密钥序列。

工程对策:实用的流密码(如 A5/1、Trivium、Grain)必须在多个不同级数的 LFSR 之间引入非线性组合生成器(Nonlinear Combining Function)或非线性钟控跳步机制,以彻底破坏线性代数可解性。



0 / 2000
Loading comments...