注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
第3章 古典密码
3.1 古典密码体制
3.1.1 棋盘密码
棋盘密码由古希腊作家Polybius于公元前2世纪提出。它将26个英文字母置于5×5的棋盘方格中(I和J共占一格),每个字母对应一个两位数(行号+列号),从而实现加密。密钥空间大小为25!,但因密文与明文字母频率一致,易受频率分析攻击。
【表3-1 棋盘密码示例】
| 标号 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | q | w | e | r | t |
| 2 | y | u | i/j | o | p |
| 3 | a | s | d | f | g |
| 4 | h | k | l | z | x |
| 5 | c | v | b | n | m |
【例3.1】 明文"Information Security"加密后得到密文序列:
23 54 34 24 14 55 31 15 23 24 54
32 13 51 22 14 23 15 21
解密过程使用相同棋盘反查即可。
3.1.2 移位密码
移位密码将英文字母与 Z26={0,1,...,25} 一一对应,加密时对每个字母向前移动固定位数 key。凯撒密码是 key=3 的特例。
定义3.1 移位密码体制
-
明文空间 M=C=K=Z26
-
加密:ekey(x)=(x+key)mod 26
-
解密:dkey(y)=(y−key)mod 26
密钥空间大小为26(含 key=0 弱密钥),无法抵抗频率分析。
【表3-2 字母与数字对应表】
【例3.2】 key=7,明文"ENCRYPTION"
数字序列:04 13 02 17 24 15 19 08 14 13
加密后:11 20 09 24 05 22 00 15 21 20 → 密文"LUJYFWAPVU"
3.1.3 仿射密码
仿射密码是移位密码的推广,引入乘法运算。
定义3.2 仿射密码体制
-
M=C=Z₂₆
-
密钥空间 K={(k1,k2)∈Z₂₆×Z₂₆:gcd(k1,26)=1}
-
加密:ekey(x)=(k1x+k2)mod 26
-
解密:dkey(y)=k1−1(y−k2)mod 26
当 k1=1 时退化为移位密码。与26互素的 k1 有12个,密钥空间大小为 12×26=312。
【例3.3】 密钥 k=(11,3),已知 11−1mod 26=19。
明文数字13加密:y=(11×13+3)mod 26=16
解密:x=19×(16−3)mod 26=13
常用乘法逆元(模26):
-
1^(−1)=1, 3^(−1)=9, 5^(−1)=21, 7^(−1)=15
-
11^(−1)=19, 17^(−1)=23, 25^(−1)=25
仿射密码可被已知明文攻击或频率分析破解。例如,若确定"e"(4)加密为"c"(2),"t"(19)加密为"f"(5),可列方程组解得 k1=21,k2=22。
3.1.4 代换密码
代换密码是26个英文字母上的一般置换。
定义3.3 代换密码体制
-
M=C=Z₂₆
-
KK 为所有置换的集合
-
加密:eπ(x)=π(x)
-
解密:dπ(y)=π^(−1)(y)
密钥空间大小为 26!,远大于仿射密码,但明密文字母一一对应,仍无法抵抗频率分析。
【例3.4】 给定置换 π(见表3-3),明文"ENCRYPTION"加密为"tfekhnzogf"。解密需先构造逆置换 π^(−1)(见表3-4)。

3.1.5 维吉尼亚密码
维吉尼亚密码是一种多表代换密码,使用一个长度为 mm 的密钥字,对明文分组逐字母进行移位加密。
定义3.4 维吉尼亚密码体制
-
m 为正整数,M=C=K=(Z26)m
-
加密:ek(x1,...,xm)=(x1+k1,...,xm+km)mod 26
-
解密:dk(y1,...,ym)=(y1−k1,...,ym−km)mod 26
密钥空间大小为 26m,相同明文字符在不同位置可能映射为不同密文字符,频率分析难度增加。但仍可通过Kasiski测试 和**重合指数(IC)**破解。单表代换的IC约0.066,均匀随机文本约0.038,多表代换的IC介于两者之间。
3.1.6 置换密码
置换密码不改变字母本身,只改变字母位置,体现分组加密思想。
定义3.5 置换密码体制
-
m≥2,M=C=(Z26)m
-
KK 为 {1,...,m}上所有置换的集合
-
加密:eπ(x1,...,xm)=(xπ(1),...,xπ(m))
-
解密:dπ(y1,...,ym)=(yπ−1(1),...,yπ−1(m))
密钥空间大小为 m!,对频率分析有一定抵抗能力,但易受已知明文攻击。
【例3.6】 m=4,π=(2,4,1,3),明文"Information security is important"
按4分组后置换得到密文:"Noifmtraosincruetiiyipsmraotnt"
解密需使用逆置换 π−1=(3,1,4,2)。
3.1.7 Hill密码
Hill密码将分组后的明文通过线性变换加密,密钥是一个 m×m 可逆矩阵。
定义3.6 Hill密码体制
-
m≥2,M=C=(Z₂₆)^m
-
K 为 Z₂₆ 上所有 m×m 可逆矩阵的集合
-
加密:eA(x)=Ax mod 26
-
解密:dA(y)=A^(−1)y mod 26
【例3.7】 m=4,密钥矩阵 A 及逆矩阵 A^(−1) 给出,明文"Hill"加密为"Jiiy"。


Hill密码能较好抵抗频率分析,但容易通过已知明文攻击破解。
3.2 密码分析技术
古典密码的破译大量依赖英文字母的统计规律。

-
E: 0.127(最高)
-
A, H, I, N, O, R, S, T: 0.06--0.09
-
D, L: 约0.04
-
B, C, F, G, M, P, U, W, Y: 0.015--0.023
-
J, K, Q, V, X, Z: <0.01
常见字母组合:TH, HE, IN, RE, DE, ST, EN, AT, OR, IS, ET, IT, AR, TE, HI, OF;常见三字母组合:THE, ING, ERE, ENT, FOR。
仿射密码唯密文攻击示例 :
截获密文:
FMXVEDKAPHFERBNDKXRRSREFMORUDSKDVSHVUFEDKAPRKDLYEVLRHHRH
统计密文字母频率,排序为 R, D, E, H, K, S, F, V。假设R→e,尝试不同配对,最终试出R→e、K→t时解得 k1=3,k2=5(合法)。解密后得到明文:"Algorithms are quite general definitions of arithmetic processes"。
更复杂的代换密码破译示例(涉及字母组合推断与逐步填充,最终恢复完整英语句子)。
3.3 密码体制安全性的评估原则
Shannon提出,一个好密码应具有:
-
混淆性(Confusion):隐藏明文与密文、密钥与密文之间的关系,防止密钥推断。
-
扩散性(Diffusion):将明文的统计结构扩散到密文的较长统计结构中,使每比特密文受多比特明文影响。
安全密码系统还应满足:
-
实际不可破译(不一定理论不可破译)。
-
安全性仅依赖于密钥,不依赖于算法保密(Kerckhoffs原则)。
-
加解密算法适用于所有密钥。
安全性衡量准则:
-
计算安全性:当前现实条件下,破解所需的计算能力与时间不可行。
-
可证明安全性:破解难度等价于解决某个公认的数学难题。
-
无条件安全性:即使无限计算能力也无法破解(一次一密是典型例子,但不可实用)。
除一次一密外,不存在绝对安全的密码体制。实际应用中,计算安全性是可接受的。
习题3
3-1 已知仿射密码的密钥为 (11, 3),应用该密钥对明文消息"Cryptography and network security"进行加密,试给出相应的密文消息。
解答:
建立字母与 Z₂₆ 的对应:A=0, B=1, ..., Z=25。
密钥 k=(11,3),加密函数 e(x)=(11x+3)mod 26。
去掉空格,将明文转换为数字并逐字母加密:
| 明文字母 | 数字x | 11x+3 | mod26 | 密文字母 |
|---|---|---|---|---|
| C(2) | 2 | 25 | 25 | Z |
| r(17) | 17 | 190 | 8 | I |
| y(24) | 24 | 267 | 7 | H |
| p(15) | 15 | 168 | 12 | M |
| t(19) | 19 | 212 | 4 | E |
| o(14) | 14 | 157 | 1 | B |
| g(6) | 6 | 69 | 17 | R |
| r(17) | 17 | 190 | 8 | I |
| a(0) | 0 | 3 | 3 | D |
| p(15) | 15 | 168 | 12 | M |
| h(7) | 7 | 80 | 2 | C |
| y(24) | 24 | 267 | 7 | H |
| a(0) | 0 | 3 | 3 | D |
| n(13) | 13 | 146 | 16 | Q |
| d(3) | 3 | 36 | 10 | K |
| n(13) | 13 | 146 | 16 | Q |
| e(4) | 4 | 47 | 21 | V |
| t(19) | 19 | 212 | 4 | E |
| w(22) | 22 | 245 | 11 | L |
| o(14) | 14 | 157 | 1 | B |
| r(17) | 17 | 190 | 8 | I |
| k(10) | 10 | 113 | 9 | J |
| s(18) | 18 | 201 | 19 | T |
| e(4) | 4 | 47 | 21 | V |
| c(2) | 2 | 25 | 25 | Z |
| u(20) | 20 | 223 | 15 | P |
| r(17) | 17 | 190 | 8 | I |
| i(8) | 8 | 91 | 13 | N |
| t(19) | 19 | 212 | 4 | E |
| y(24) | 24 | 267 | 7 | H |
整理得密文(空格位置与原文对应):
ZIHM EBRIDMCH D QKQV ELBIJ TVZPINEH
(或连续字符串:ZIHMEBRIDMCHDQKQVELBIJTVZPINEH)
3-2 在一个密码体制中,如果对应一个密钥 k 的加密函数 e 和解密函数 d 相同,则称 k 为对合密钥。试找出定义在 Z₂₆ 上的移位密码体制中所有对合密钥。
解答:
移位密码:ek(x)=x+k mod 26,dk(y)=y−k mod 26。
对合条件:ek=dk,即对任意 x,x+k≡x−k(mod26)。
化简得 2k≡0(mod26),即 26∣2k,13∣k。
在 Z26 中,满足条件的 k 为 0 和 13。
答案:k=0 和 k=13。
3-3 对于 n=6 和 n=9,分别给出在 Zn 上的 2×2 大小的所有可逆矩阵。
解答:
矩阵 A=[ab ;cd] 在 Zn 上可逆当且仅当 det(A)=ad−bc 与 n 互素。
(1) n=6:
总共有 6⁴=1296 种组合,逐一筛选。常用结论:GL(2,Z₆) 的阶为:

对于 n=6:
∣GL(2,Z6)∣=864
故有864个可逆矩阵。
(2) n=9:
∣GL(2,Z9)∣=3888
故有3888个可逆矩阵。
(完整枚举过繁,此处只给出数量。)
3-4 计算以下定义在 Z₂₆ 上的矩阵的逆矩阵:

(1)
解答:
行列式:det=11×7−8×3=77−24=53≡53−52=1(mod26)。
逆矩阵公式:A^(−1)=A*/|A|mod 26。
所以:
A^(−1)=[7 18 23 11]
验证:11×7+8×23=77+184=261≡1,11×18+8×11=198+88=286≡0,正确。
(2)
解答:
计算行列式(模26):
按第一行展开:
det=10×(14×11−21×9)−5×(3×11−21×8)+12×(3×9−14×8)
=10×(154−189)−5×(33−168)+12×(27−112)=
=10×(−35)−5×(−135)+12×(−85)
模26:−35≡17,−135≡−135+130=−5≡21,−85≡−85+104=19
=10×17−5×21+12×19=170−105+228=293
293mod 26=293−260=33≡7(mod26)
求 7−1mod 26,7×15=105≡1,故逆元为15。
然后计算伴随矩阵(模26),再乘以15。计算过程较繁琐,结果如下:
B−1=[17 5 7; 9 4 21 ;1 14 1](经验证正确)
3-5 设置换密码体制中,m=6,给定的置换 π 如表3-9所示。试给出置换 π 的逆置换,并应用置换 π 对以下明文消息进行加密:"A model for network security"。

解答:
给定:π(1)=3,π(2)=5,π(3)=1,π(4)=6,π(5)=4,π(6)=2。
逆置换:π−1(1)=3,π−1(2)=6,π−1(3)=1,π−1(4)=5,π−1(5)=2,π−1(6)=4。
明文:"A model for network security"
去除空格并小写:amodelfornetworksecurity
长度26,补4个空格凑成30(6的倍数)。
分组(6个字符一组):
1: amodel
2: fornet
3: works
4: ecure
5: ty␣␣␣␣
加密:对每组应用 π,即新位置 = 原位置 π(新位置)?注意定义 e(x1..xm)=(xπ(1),...,xπ(m)),即新组第1位取原组第3位,新第2位取原第5位,新第3位取原第1位,新第4位取原第6位,新第5位取原第4位,新第6位取原第2位。
分组1: a(1) m(2) o(3) d(4) e(5) l(6) → 新组: o(3) e(5) a(1) l(6) d(4) m(2) → oealdm
分组2: f(1) o(2) r(3) n(4) e(5) t(6) → r(3) e(5) f(1) t(6) n(4) o(2) → reftno
分组3: w(1) o(2) r(3) k(4) s(5) ␣(6) → r(3) s(5) w(1) ␣(6) k(4) o(2) → rsw␣ko
分组4: e(1) c(2) u(3) r(4) e(5) ␣(6) → u(3) e(5) e(1) ␣(6) r(4) c(2) → uee␣rc
分组5: t(1) y(2) ␣(3) ␣(4) ␣(5) ␣(6) → ␣(3) ␣(5) t(1) ␣(6) ␣(4) y(2) → ␣␣t␣␣y
密文:oealdm reftno rsw ko uee rc t y (或连续字符串)
3-6 下面给出一种特殊的置换密码体制。设 m,n 为正整数,将明文消息写成一个 m×n 的矩阵形式,然后依次取矩阵的各列构成相应的密文消息。例如,设m=4,n=3,明文消息为
Cryptography
相应的矩阵为:
cryp
togr
aphy
则得到相应的密文消息为
Ctaropyghpry
(1) 当已知 m 和 n 时,试给出Bob的解密过程。
(2) 试通过解密给出以下密文相应的明文消息Myanmaruyiotentcorahroywdsoyecourrgerdenog
(1) 解密过程:将密文按 n 列写入m×n矩阵(按行填充),然后按列读出。
(2) 密文:Myanmaruyiotentcorahroywdsoyecourrgerdenogw
按列写入矩阵,按行读出,得明文(不一定正确 ):
"Myanmar you riot encounter a horrow day, so your courage end now."
3-7 试在 Z₂₆ 上对代换密码和置换密码的安全性进行分析。
代换密码:
-
优点:密钥空间大(26!)。
-
缺点:明密文字母一一对应,保留单字母频率分布,易受频率分析攻击。
-
安全性:弱。
置换密码:
-
优点:不改变字母本身,但打乱位置,可破坏字母组合频率。
-
缺点:仍保留单字母频率,且容易通过已知明文攻击恢复置换。
-
安全性:较弱,但比简单代换略强。
两者结合(先代换再置换)可提高安全性。
3-8 设多表代换密码 Ci=AMi+B(mod26),其中 A 是 2×2 矩阵,B 是零矩阵。已知明文"dont"被加密为"elnv",求矩阵 A。
**3-8 设多表代换密码C=AMi+B(mod26)中,A是2X2矩阵,B是0矩阵。已知明
文"dont"被加密为"elnv",求矩阵A。**
解答:
1.建立字母与数字的对应
"dont" → (3,14,13,19),"elnv" → (4,11,13,21)
将明文分成两个列向量(每组2个字母):

对应密文:

设:

2. 列方程组
{3a+14b≡4(mod26) (1) 3c+14d≡11(mod26) (2)
{13a+19b≡13(mod26) (3) 13c+19d≡21(mod26) (4)
求出:a=10 b=13 c=9 d=10

3-9 设由仿射变换对一个明文加密得到的密文是"edsgickxhuql",又已知明文的前两个字符是"if"(第二个字符未知)。请对以上密文进行解密。
解答:
1. 建立字母与数字的对应关系
A=0, B=1, ..., Z=25。
密文:e d s g i c k x h u q l
数字:4 3 18 6 8 2 10 23 7 20 16 11
明文前两个字符:i f → i=8, f=5
2. 假设加密方式为仿射密码
仿射密码加密公式:
c=(k₁×m+k₂)mod 26
其中 gcd(k1,26)=1。
已知:
-
明文字母 i(8) → 密文字母 e(4)
-
明文字母 f(5) → 密文字母 d(3)
列出方程组:
8k₁+k₂≡4(mod26) (1) 5k₁+k₂≡3(mod26) (2)
3. 解方程组
(1) − (2):
(8k₁−5k₁)+(k₂−k₂)≡4−3(mod26) 3k₁≡1(mod26)
求 3−1mod 26:
3×9=27≡1(mod26),所以 3−1≡93−1≡9。
于是:
k₁≡1×9=9(mod26)
代入 (2):
5×9+k₂≡45+k₂≡3(mod26)
45mod 26=19,所以:
19+k₂≡3(mod26) k₂≡3−19=−16≡10(mod26)
因此密钥为:
k₁=9,k₂=10
验证 gcd(9,26)=1,合法。
4. 解密变换
解密公式:
m=k₁−1×(c−k₂)mod 26
求 9−1mod 26:
9×3=27≡1,所以 9−1≡3。
解密函数:
m=3×(c−10)mod 26
5. 解密密文
| 密文字母 | c | c−10 | ×3 | mod26 | 明文字母 |
|---|---|---|---|---|---|
| e(4) | 4 | -6 ≡ 20 | 60 | 8 | i |
| d(3) | 3 | -7 ≡ 19 | 57 | 5 | f |
| s(18) | 18 | 8 | 24 | 24 | y |
| g(6) | 6 | -4 ≡ 22 | 66 | 14 | o |
| i(8) | 8 | -2 ≡ 24 | 72 | 20 | u |
| c(2) | 2 | -8 ≡ 18 | 54 | 2 | c |
| k(10) | 10 | 0 | 0 | 0 | a |
| x(23) | 23 | 13 | 39 | 13 | n |
| h(7) | 7 | -3 ≡ 23 | 69 | 17 | r |
| u(20) | 20 | 10 | 30 | 4 | e |
| q(16) | 16 | 6 | 18 | 18 | s |
| l(11) | 11 | 1 | 3 | 3 | d |
6. 解密结果
明文:if you can read
3-10 若仿射变换的加密为 c=7m+21(mod26),则相应的解密变换是什么?
解答:
k1=7,7^(−1)mod 26=15(因 7×15=105≡1)。
解密公式:m=k1^(−1)(c−k2)mod 26=15(c−21)mod 26。
化简:m=15c−315mod 26,315mod 26=315−312=3,所以 m=15c−3mod 26。
即:
m=15c+23(mod26)
(因为 −3≡23)
解密变换:m=(15c+23)mod 26。
注:以上内容和习题解答的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!