密码学笔记(《密码学原理与实践》)

密码学笔记(《密码学原理与实践》)

第一章 古典密码学

1.1 几个简单的密码体制

注:小写代表明文,大写代表密文

分组密码: 单表代换密码:移位密码,代换密码,仿射密码

​ 多表代换密码:维吉尼亚密码,希尔密码

​ 非代换密码:置换密码

流密码:同步流密码,异步流密码

1.1.1 移位密码

密码体制:令 P = C = K = Z 26 P=C=K=Z_{26} P=C=K=Z26 e K ( x ) = ( x + K ) m o d 26 d K ( y ) = ( x − K ) m o d 26 e_{K}(x)=(x+K)mod 26 \quad d_K(y)=(x-K)mod 26 eK(x)=(x+K)mod26dK(y)=(xK)mod26 并且当K=3时叫凯撒密码。密钥空间为26

1.1.2 代换密码

密码体制:令 P = C = Z 26 P=C=Z_{26} P=C=Z26 对任意的置换 π ∈ K \pi \in K πK,有 e π ( x ) = π ( x ) d π ( y ) = π − 1 ( y ) e_{\pi}(x)=\pi(x) \quad d_{\pi}(y)=\pi^{-1}(y) eπ(x)=π(x)dπ(y)=π1(y)。密钥空间为 26 ! 26! 26!

1.1.3 仿射密码

加密函数形式: e ( x ) = ( a x + b ) m o d 26 e(x)=(ax+b)mod 26 e(x)=(ax+b)mod26,要求仿射函数必须是单射,也就是同余方程 a x ≡ y ( m o d 26 ) ax\equiv y(mod 26) axy(mod26)有唯一解。

上述同余方程有唯一解 ⇔ g c d ( a , 26 ) = 1 \Leftrightarrow gcd(a,26)=1 gcd(a,26)=1 ,证明略。

此时a的取值为0~25之间与26互素的数,共12个,b的取值为0~25。这时密钥空间为312。

将m推进到一般值,(记 ϕ ( m ) \phi(m) ϕ(m) Z m Z_{m} Zm中与m互素的个数),此时密钥空间大小为 m ∗ ϕ ( m ) m*\phi(m) mϕ(m),由数论可知 ϕ ( m ) \phi(m) ϕ(m)的计算公式如下:

对 ∀ m , 一 定 存 在 m = ∏ i = 1 n p i e i , 则 ϕ ( m ) = ∏ i = 1 n ( p i e i − p i e i − 1 ) 对\forall m,一定存在m=\prod_{i=1}^{n}{p_i^{e_i}} , 则\phi(m)=\prod_{i=1}^n({p_i^{e_i}-p_i^{e_i-1}}) mm=i=1npiei,ϕ(m)=i=1n(pieipiei1)

下面讨论解密函数。

易知当且仅当 g c d ( a , m ) = 1 gcd(a,m)=1 gcd(a,m)=1,a在 Z m Z_m Zm上存在唯一的乘法逆。记 a a a的乘法逆为 a − 1 a^{-1} a1

则有 d ( y ) = a − 1 ( y − b ) m o d 26 d(y)=a^{-1}(y-b)mod 26 d(y)=a1(yb)mod26

综上,仿射密码体制: 令 P = C = Z 26 , 且 K = { ( a , b ) ∈ Z 26 × Z 26 ; g c d ( a , 26 ) = 1 } e K ( x ) = ( a x + b ) m o d 26 ; d K ( y ) = a − 1 ( y − b ) m o d 26 令P=C=Z_{26},且K=\{(a,b)\in Z_{26}\times Z_{26};gcd(a,26)=1\}\\e_{K}(x)=(ax+b)mod 26; \quad d_{K}(y)=a^{-1}(y-b)mod 26 P=C=Z26K={(a,b)Z26×Z26;gcd(a,26)=1}eK(x)=(ax+b)mod26;dK(y)=a1(yb)mod26

1.1.4 维吉尼亚密码

密码体制: 令 P = C = K = ( Z 26 ) m , 对 任 意 的 密 钥 K = ( k 1 , k 2 , . . . , k m ) , 有 e k ( x 1 , x 2 , . . . , x m ) = ( x 1 + k 1 , x 2 + k 2 , . . . , x m + k m ) d k ( y 1 , y 2 , . . . , y m ) = ( y 1 − k 1 , y 2 − k 2 , . . . , y m − k m ) 令P=C=K=(Z_{26})^m,对任意的密钥K=(k_1,k_2,...,k_m),\\有e_k(x_1,x_2,...,x_m)=(x_1+k_1,x_2+k_2,...,x_m+k_m)\\d_k(y_1,y_2,...,y_m)=(y_1-k_1,y_2-k_2,...,y_m-k_m) P=C=K=(Z26)mK=(k1,k2,...,km)ek(x1,x2,...,xm)=(x1+k1,x2+k2,...,xm+km)dk(y1,y2,...,ym)=(y1k1,y2k2,...,ymkm)

一次加密m个字母。密钥空间大小为 2 6 m 26^m 26m

1.1.5 希尔密码

在对明文采用线型加密的同时采用一次加密m个字母的方式。将全部m个明文分别用m组不同的权重线型加权得到密文。

因此密钥空间大小为 m ∗ m m*m mm,一般采用矩阵的形式,记为 K = ( k i , j ) , 加 密 过 程 为 y = x K , 解 密 过 程 为 x = y K − 1 K=(k_{i,j}),加密过程为y=x K,解密过程为x=y K^{-1} K=(ki,j)y=xKx=yK1

要求矩阵 K K K可逆, 矩 阵 K 在 模 26 的 情 形 下 可 逆 ⇔ g c d ( d e t K , 26 ) = 1 矩阵K在模26的情形下可逆 \Leftrightarrow gcd(det K,26)=1 K26gcd(detK,26)=1,证明略。

密码体制: 令 P = C = ( Z 26 ) m , ( m ⩾ 2 ) , K = { 定 义 在 Z 26 上 的 m × m 可 逆 矩 阵 } 有 e K ( x ) = x K d K ( y ) = y K − 1 令P=C=(Z_{26})^m,(m \geqslant 2),K=\{定义在Z_{26}上的m\times m可逆矩阵\} \\ 有e_K(x)=x K\\ d_K(y)=y K^{-1} P=C=(Z26)m,(m2)K={Z26m×m}eK(x)=xKdK(y)=yK1

1.1.6 置换密码

只改变明文中字母的位置,加密函数是双射。

密码体制: 令 P = C = ( Z 26 ) m , K 由 所 有 定 义 在 集 合 { 1 , 2 , . . . , m } 上 的 置 换 组 成 , 有 e k ( x 1 , x 2 , . . . , x m ) = ( x π ( 1 ) , x π ( 2 ) , . . . , x π ( m ) ) d k ( y 1 , y 2 , . . . , y m ) = ( y π − 1 ( 1 ) , y π − 1 ( 2 ) , . . . , y π − 1 ( m ) ) 令P=C=(Z_{26})^m,K由所有定义在集合\{1,2,...,m\}上的置换组成,\\有e_k(x_1,x_2,...,x_m)=(x_{\pi(1)},x_{\pi(2)},...,x_{\pi(m)})\\d_k(y_1,y_2,...,y_m)=(y_{\pi^{-1}(1)},y_{\pi^{-1}(2)},...,y_{\pi^{-1}(m)}) P=C=(Z26)mK{1,2,...,m}ek(x1,x2,...,xm)=(xπ(1),xπ(2),...,xπ(m))dk(y1,y2,...,ym)=(yπ1(1),yπ1(2),...,yπ1(m))

置换密码是希尔密码的特殊形式,很容易找到置换 π \pi π的关联置换矩阵 K π K_{\pi} Kπ,且 K π − 1 = K π − 1 K_{\pi^{-1}}=K_{\pi}^{-1} Kπ1=Kπ1

1.1.7 流密码
同步流密码(密钥流与明文无关)

通过密钥生成器流和初始密钥 K K K生成和明文长度一致的密钥流 z = z 1 z 2 . . . z=z_1 z_2... z=z1z2...,密钥流中的每个元素 z i z_i zi都对应一套加密和解密规则,然后用密钥流中对应位置的密钥元素分别对明文进行加密得到密文。

如果始终存在 z i + d = z i z_{i+d}=z_i zi+d=zi,那么称该流密码为周期为 d d d的周期流密码。流密码通常以二元字符表示。

一种产生密钥流的方法: 给 定 2 m 个 值 k 1 , k 2 , . . . , k m , c 0 , c 2 , . . . c m − 1 ∈ Z 2 , 令 z i + m = ∑ j = 0 m − 1 c j z i + j m o d 2 给定2m个值k_1,k_2,...,k_m,c_0,c_2,...c_{m-1}\in Z_2,令z_{i+m}= \sum_{j=0}^{m-1}c_j z_{i+j} mod 2 2mk1,k2,...,km,c0,c2,...cm1Z2zi+m=j=0m1cjzi+jmod2。在这种方法下通过选择合适的 c i c_i ci可以使任意非零初始向量 ( k 1 , k 2 , . . . k m ) (k_1,k_2,...k_m) (k1,k2,...km)产生周期为 2 m − 1 2^m-1 2m1的密钥流。

这种密钥流可以利用线性反馈移位器(LFSR)用硬件方式实现。

异步流密码(密钥流与明文有关)

根据明文生成密钥流,可能出现密钥空间较小不安全的问题。

1.2 密码分析

几种攻击模型:唯密文攻击,已知明文攻击,选择明文攻击,选择密文攻击

在唯密文攻击中,根据不同英文字母在大样本下的出现频率不同,可以结合这点进行攻击。

1.2.1 仿射密码分析

通过计算密文中各个字母出现的频率(数)推测明文字母与密文字母的映射关系,利用两对推测的映射关系解二元一次方程组得到 a , b a,b a,b,要注意对 a a a进行是否满足 g c d ( a , 26 ) = 1 gcd(a,26)=1 gcd(a,26)=1的验证,不满足的话说明映射关系推测错误,需要重新推测。

1.2.2 代换密码分析

代换密码比仿射密码复杂,但同样是依据字母出现的频率(数),同时结合两个字母组合以及三个字母组合的频率(数)来推断所有字母的映射关系。

1.2.3 维吉尼亚密码分析

首先要确定密钥长度m的值

kasiski测试法:找到长度至少为3的相同密文段,记下每个密文段到起始点密文段的距离 δ i \delta _i δi,则可以猜测m为 δ i \delta _i δi最大公因子的因子。

重合指数法:重合指数 I c ( x ) I_c(x) Ic(x)定义:对于长度为n的串 x = x 1 x 2 . . . x n x=x_1 x_2...x_n x=x1x2...xn I c ( x ) I_c(x) Ic(x) x x x中两个随机元素相同的概率。

f 0 , f 1 , . . . , f 25 f_0,f_1,...,f_{25} f0,f1,...,f25分别为 A , B , . . . , Z A,B,...,Z A,B,...,Z x x x中出现的频数,则$I_c(x)= \frac{\sum_{i=0}{25}C_{f_i}2}{C_n^2} $

对于英文文本串 x x x而言,设 p 0 , p 1 , . . . , p 25 p_0,p_1,...,p_{25} p0,p1,...,p25分别为字母 A , B , . . . , Z A,B,...,Z A,B,...,Z出现的期望概率,则 I c ( x ) ≈ ∑ i = 0 25 p i 2 = 0.065 I_c(x) \approx \sum_{i=0}^{25} p_i^2 = 0.065 Ic(x)i=025pi2=0.065

对维吉尼亚密文串 y = y 1 y 2 . . . y n y=y_1 y_2 ... y_n y=y1y2...yn而言,每隔m个字母取出一个字母,这样将其分割成m个等长子串,即 y 1 = y 1 y m + 1 y 2 m + 1 . . . y^1=y_1 y_{m+1} y_{2m+1}... y1=y1ym+1y2m+1...

这样构造完毕后如果每个子串 y i y^i yi的重合指数大约为0.065,则可以认为这个m就是密钥的长度。

确定密钥m的值之后需要确定密钥K

对于上述划分 y 1 , y 2 , . . . y^1,y^2,... y1,y2,...,每一个子串 y i y^i yi都相当于一组移位密码的密文,分别穷举26种可能的密钥,用类似重合指数的定义计算 M g = ∑ i = 0 25 p i f i + g n ′ M_g=\sum_{i=0}^{25} \frac{p_i f_{i+g}}{n'} Mg=i=025npifi+g,找到最接近0.065的值就是密钥 k i k_i ki的正确值。

1.2.4 希尔密码分析

希尔密码很难用唯密文攻击,但是可以采用已知明文攻击。

如果已知m和至少m对明-密文对,则可以选出m对利用矩阵的计算求出密钥矩阵K。

若不知道m则对m暴力穷举。

1.2.5 LFSR流密码分析

这里也介绍已知明文攻击

根据加密函数以及明-密文对不难求出若干个密钥流比特

假设m已知,已知明-密文对的长度为n,若 n ⩾ 2 m n\geqslant 2m n2m,则可以写出m个方程去解m个未知数 c 0 , c 1 , . . . , c m − 1 c_0,c_1,...,c_{m-1} c0,c1,...,cm1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值