古典密码学

古典密码学(Classical Cryptography)

1.古典密码学的特点:

密码算法的安全性基于算法的安全性

加密的算法包括:字母的代换顺序的替换

2.常用古典密码:

2.1凯撒密码 Caesar’s Cipher

英语的26个字母分别用 Z26 Z 26 的元素表示。假设密钥是k。

Enc:c=(m+k)mod26 E n c : c = ( m + k ) m o d 26

Dec:m=(ck)mod26 D e c : m = ( c − k ) m o d 26

穷举攻击破译

2.2单字母替换 Mono-alphabetic substitution

常用字母频率:

古典密码学_第1张图片

分析字母出现频率破译

2.3仿射密码 Affine Cipher

P=C=Z26 P = C = Z 26 且K ={ (a,b)Z26×Z26:gcd(a,26)=1 ( a , b ) ∈ Z 26 × Z 26 : g c d ( a , 26 ) = 1 }对任意的 K=(a,b),x,yZ26 K = ( a , b ) , x , y ∈ Z 26 ,定义加密变换为:

ek(x)=(ax+b)mod26 e k ( x ) = ( a x + b ) m o d 26

解密变换为:

dk(y)=a1(yb)mod26 d k ( y ) = a − 1 ( y − b ) m o d 26

其中 aa1mod26=1 a ∗ a − 1 m o d 26 = 1 ,1为该代数空间的幺元。

由于在0到15,与26互质的有1,3,5,7,9,11,15,17,19,21,23,25共12个数,所以a一共有12种情况,b有16种情况,所以密钥空间为:

12*26=312

先分析字母出现的频率,试探求解多组a和b,代入验证,得到有意义的语句说明a和b选择正确。

2.4维吉尼亚密码 Vigener

通过将明文轮流循环加密钥得到密文。

破解首先需要确定长度

Kasiski测试法 :搜索长度至少为3的相同密文段,密文段之间间隔的最大公因子很有可能就是密钥的长度。

将密钥的长度从1开始递增,每次对于密文进行分组,计算重合指数,如果接近0.065(0.05就差不多了)则说明这个数字就是密钥的长度。而如果是随机串,则重合指数接近0.038。

确定每一位密钥:

通过密钥将密文分成多组,使用拟重合指数测试法破解每一组对应的密钥。

对于子密文段各个字母的频率进行统计,结合字母频率分布统计表,利用公式计算出 M0 M 0 ,然后对子密文段移位25次,按照同样方法求值。

M0M26 M 0 — M 26 中最接近0.065的数字对应的字母,即为该组的密钥。

你可能感兴趣的:(CTF)