古典密码学
置换密码
前置知识为置换群https://www.cnblogs.com/luminescence/p/18591274
有限集合\(S\)上的一一对应映射
\(p = \begin{pmatrix}1 & 2 & 3 & 4 & 5 & \\ 3 & 1 & 5 & 4 & 2 \end{pmatrix}\)
简写为 \(p = (31542)\)
逆置换 输出变输入,按列调整第一行为自然顺序
\(p^{-1} = (25143)\)
对置换密码的攻击:穷举法,寻找有意义的排列
代替密码
单表代替
凯撒密码
将字符移动固定值,使用模运算实现
def encryptmessage(message, shift = 3):
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{}|;:',.<>?/"
encrypted = ''
for char in message:
if char in charset:
idx = charset.index(char)
new_idx = (idx + shift) % len(charset)
encrypted += charset[new_idx]
else:
encrypted += char # 非字符集内的字符保持不变
return encrypted
def decryptmessage(encryptedmessage, shift = 3):
return encryptmessage(encryptedmessage, -shift)
仿射变换密码
\(X=Y=Z_q,k = \{(k_1,k_2)|k_1 \in Z_q,k_2 \in Z_q^*\},m\in X, k = (k_1,K_2)\in K\)
\(c = E_k(m) = (k_1 + k_2m)mod q\)
\(m = k_2^{-1}(c-k_1)modq\)
密钥量为\(q\varphi (q)\)
此处\(k_2\in Z_q^*\) 参考密码学数学基础中关于群环域的知识
特别的
\(k_2 = 0\)时称为加法密码,密钥量为\(q\)
\(k_1 = 0\)时称为乘法密码,密钥量为\(\varphi (q)\)
对单表代替密码的攻击
明密异同规律:英文字母的字母出现频率不同,而加密后不改变符号的频率特征
截获一定数量密文,统计各个字母出现频次
将出现频次高的密文字母,猜测为明文字母e,t,r等
根据字母组合、单词意义等信息进一步破解
字典密码
汉字进行加密
多表代替
多个明密文对照表

viginere密码
\(X^n = Y^n = Z^n, \quad m = (m_1, m_2, \ldots, m_n) \in X^n\)
\(K = \left\{ \langle k_{11}, k_{21} \rangle, \langle k_{12}, k_{22} \rangle, \cdots, \langle k_{1n}, k_{2n} \rangle \right\rangle \mid k_{ij} \in Z_q, k_{2i} \in Z_q^*, 1 \leq i \leq n \},\)
\(k = (\langle k_{11}, k_{21} \rangle, \langle k_{12}, k_{22} \rangle, \cdots, \langle k_{1n}, k_{2n} \rangle) \in K\)
\(c = E_k(m) = (k_{11} + k_{21}m_1, k_{12} + k_{22}m_2, \cdots, k_{1n} + k_{2n}m_n),\)
运算都是模 \(q\) 运算,密钥量 \(q^{n}\varphi(q)^n\)
对多表密码的破解
重合指数
\(I_c(x) = \frac{\sum_{i=0}^{25} \binom{f_i}{2}}{\binom{n}{2}} = \frac{\sum_{i=0}^{25} f_i(f_i - 1)}{n(n-1)} \approx \sum_{i=0}^{25} \left(\frac{f_i}{n}\right)^2\)
\(f_i\)为字母 \(i\) 在 \(x\)中出现的次数
有意义时:符合英文的字母出现频率
\(I_c(x) = 0.065\) 为单表代替
随机时:\(I_c(x) = 0.038\) 为多表代替
可以通过重合指数精确确定密钥长度
或者通过相同密文片段的距离最大公因子粗略确定密钥长度
从艺术到科学
1949年,香农发表文章'Communication Theory of Secrecy Systems'标志着密码学的正式诞生
One Time Pad
一次一密是理论上的无条件安全的加密
1)密钥与明文一样长
2)密钥必须是真随机的
3)密钥只能对一个密文进行加密
但只具有理论价值,因为在实际中:
(1)难以做到密钥与明文一样长
(3)真随机的密钥难以实现
(4)每次更换密钥,效率太低
加密算法的安全分为两种
理论安全:不泄漏任何信息,不依赖敌手的计算能力。
计算安全:计算上困难的,依赖于敌手的计算能力。
可通过以下手段达到计算安全性:
扩散(diffusion):明文与密文的关系尽量混乱;
混淆(confusion):密钥与密文之间的关系尽量混乱。
实际中:
置换(P盒)实现扩散;
代替(S盒)实现混淆。
二者乘积并多次迭代可达到足够的安全性
通过模仿一次一密,形成了序列密码(流密码)
通过扩散和混淆,形成了分组密码
进入现代密码学,加密不再局限于字母,而采用二进制串表示明密文,并采用计算机程序实现
密码学数学基础部分:
群环域:https://www.cnblogs.com/luminescence/category/2434978.html
初等数论:https://www.cnblogs.com/luminescence/category/2434979.html

浙公网安备 33010602011771号