密码学原理与实践答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
密码学原理与实践答案
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)=(x−K)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) ax≡y(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}}) 对∀m,一定存在m=∏i=1npiei,则ϕ(m)=∏i=1n(piei−piei−1)
下面讨论解密函数。
易知当且仅当 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} a−1。
则有 d ( y ) = a − 1 ( y − b ) m o d 26 d(y)=a^{-
1}(y-b)mod 26 d(y)=a−1(y−b)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=Z26,且K={(a,b)∈Z26×Z26;gcd(a,26)=1}eK(x)=(ax+b)mod26;dK
(y)=a−1(y−b)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)m,对任意的密钥K=(k1,k2,...,km),有ek(x1
,x2,...,xm)=(x1+k1,x2+k2,...,xm+km)dk(y1,y2,...,ym
)=(y1−k1,y2−k2,...,ym−km)
一次加密m个字母。
密钥空间大小为 2 6 m 26^m 26m
1.1.5 希尔密码
在对明文采用线型加密的同时采用一次加密m个字母的方式。
将全部m个明文分别用m组不同的权重线型加权得到密文。
因此密钥空间大小为 m ∗ m m*m m∗m,一般采用矩阵的形式,记为 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=xK,解密过程为x=yK−1。
要求矩阵 K K K可逆,矩阵 K 在模 26 的情形下可
逆⇔ g c d ( d e t K , 26 ) = 1 矩阵K在模26的情形下可逆 \Leftrightarrow gcd(det K,26)=1 矩阵K在模26的情形下可逆⇔gcd(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,(m⩾2),K={定义在Z26上的m×m可逆矩阵}有eK
(x)=xKdK(y)=yK−1
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)m,K由所有定义在集合{1,2,...,m}上的置换组成,有ek(x1,x2, (x)
)=(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 给定2m个值k1,k2,...,km,c0,c2,...cm−1∈Z2,令zi+m=∑j=0m−1cj
zi+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 2m−1的密钥流。
这种密钥流可以利用线性反馈移位器(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=025n′pifi+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 n⩾2m,则可以写出m个方程去解m个未知数c 0 , c 1 , . . . , c m − 1 c_0,c_1,...,c_{m-1} c0,c1 ,...,cm−1。