古典密码学
基本定义
一个密码系统是由如下五元组定义的
- P:有限的可能明文的集合。(明文空间)
- C:有限的可能密文的集合。(密文空间)
- K:密钥空间,是有限的可能密钥的集合。
- E:加密函数空间。
- D:解密函数空间。
剩余类
在密码学中,很多运算(如 Caesar 密码、Affine 密码)是在模 m 运算下进行的。
乘法可逆剩余类
要点:所有与m互素的数
移位密码
移位密码(也叫凯撒密码)是最简单的替换密码之一。它通过将字母在字母表中向后移动固定位置来加密。
例2.1 假设移位密码的密钥 K=11,明文为:
wewillmeetatmidnight.
解答
首先,我们按照指定的对应关系(a=0, b=1, ..., z=25)将明文转换为整数序列,得到以下结果:
| 22 | 4 | 22 | 8 | 11 | 11 | 12 | 4 | 4 | 19 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 19 | 12 | 8 | 3 | 13 | 8 | 6 | 7 | 19 |
接着,我们将每个数值加上 11,并将结果模 26 化简:
| 7 | 15 | 7 | 19 | 22 | 22 | 23 | 15 | 15 | 4 |
|---|---|---|---|---|---|---|---|---|---|
| 11 | 4 | 23 | 19 | 14 | 24 | 19 | 17 | 18 | 4 |
最后,将整数序列转换回字母,得到密文:
HPHTWWXPPELEXTOTYRSE
为了解密密文,我们首先将密文转换为整数序列,然后每个数减去 11(并模 26 处理),最后再将整数序列转换回字母。
替换密码
这种密码系统已使用了数百年。报纸上的“密文”谜题就是替换密码的例子。
例如,一个具体的密钥 π∈K(密钥空间):
| 明文 | a | b | c | d | e | f | g | h | i | j | k | l | m |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 密文 | X | N | Y | A | H | P | O | G | Z | Q | W | B | T |
| 明文 | n | o | p | q | r | s | t | u | v | w | x | y | z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 密文 | S | F | L | R | C | V | M | U | E | K | J | D | I |
加密示例:hello → GHBBF
解密示例:OFFA → good
这种密码的密钥总量是 26! 种可能,暴力搜索几乎不可行,但由于没有隐藏明文的统计特征(如字母频率),很容易被频率分析攻破。
欧拉函数
什么是“互素”,gcd(a,m)=1, 意思是:a 和 m 没有任何公共因子(除了1)。 比如:
- 3 和 10 → 互素 ✅
- 4 和 10 → 不互素(因为都有因子2)❌
欧拉函数表示,在 1 到 m 之间,有多少个数和 m 互素。 那最后的公式该怎样理解呢?举个栗子:
乘法逆元
乘法逆元可以理解为:一个数的“模意义下的倒数”。
举个栗子:
一个数在 mod 质数下都有逆元,所以模素数的世界非常“干净”。
这个概念是这些东西的基础,所以很重要:
- RSA 加密
- 椭圆曲线
- 模逆(算法题常考)
- 线性代数(有限域)
Z26中的逆元: