一、古典密码(1,2,4)解:设解密变换为m=D(c)≡a*c+b (mod 26)由题目可知密文ed 解密后为if,即有:D(e)=i :8≡4a+b (mod 26) D(d)=f :5≡3a+b (mod 26) 由上述两式,可求得a=3,b=22。
因此,解密变换为m=D(c)≡3c+22 (mod 26)密文用数字表示为:c=[4 3 18 6 8 2 10 23 7 20 10 11 25 21 4 16 25 21 10 23 22 10 25 20 10 21 2 20 7] 则明文为m=3*c+22 (mod 26)=[8 5 24 14 20 2 0 13 17 4 0 3 19 7 8 18 19 7 0 13 10 0 19 4 0 7 2 4 17]= ifyoucanreadthisthankateahcer4. 设多表代换密码C i≡ AM i + B (mod 26) 中,A是2×2 矩阵,B是0 矩阵,又知明文“dont”被加密为“elni”,求矩阵A。
解:dont = (3,14,13,19) => elni = (4,11,13,8)二、流密码 (1,3,4)1. 3 级 线 性 反 馈 移 位 寄 存 器 在 c 3=1 时 可 有 4 种 线 性 反 馈 函 数 , 设 其 初 始 状 态 为 (a 1,a 2,a 3)=(1,0,1),求各线性反馈函数的输出序列及周期。
解:设反馈函数为 f(a 1,a 2,a 3) = a 1⊕c 2a 2⊕c 1a 3当 c1=0,c2=0 时,f(a 1,a 2,a 3) = a 1,输出序列为 101101…,周期为 3。
当 c1=0,c2=1 时,f(a 1,a 2,a 3) = a 1⊕a 2,输出序列如下 10111001011100…,周期为 7。
当 c1=1,c2=0 时,f(a 1,a 2,a 3) = a 1⊕a 3,输出序列为 10100111010011…,周期为 7。
当 c1=1,c2=1 时,f(a 1,a 2,a 3) = a 1⊕a 2⊕a 3,输出序列为 10101010…,周期为 2。
3. 设 n=4,f(a 1,a 2,a 3,a 4)=a 1⊕a 4⊕1⊕a 2a 3,初始状态为(a 1,a 2,a 3,a 4)=(1,1,0,1),求此非线性 反馈移位寄存器的输出序列及周期。
解:列出该非线性反馈移位寄存器的状态列表和输出列表:而第 m+3a m +3 = c 1a m +2 + c 2a m +1 + c 3a m = c 1 ⊕1 + c 2 ⊕ 0 + c 3c m ⊕ 0即第 m+3 比特为 0三、分组密码(1,2,3,4)1. (1)设M’是M的逐比特取补,证明在DES中,如果对明文分组和密文分组都逐比特取补,那么得到的密文也是原密文的逐比特取补,即如果Y = DES K(X),那么Y’=DES K’(X’)提示:对任意两个长度相等的比特串A和B,证明(A⊕B)’=A’⊕B。
证:(i)容易验证,在DES中所有的置换操作,包括初始置换IP、逆初始置换IP-1、选择扩展算法E、置换运算P以及置换选择PC1、置换选择PC2,都满足如下性质:如果N=PO(M),则N’=PO(M’),其中PO是某种置换操作即有(PO(M))’= PO(M’)(ii)容易验证,密钥生成过程中的左循环移位LS满足如下性质:如果N=LS (M),那么N’=LS(M’),即有(LS (M))’=LS(M’)结合(1)可知,如果记子密钥为(K1,…,K16),K为初始密钥,KG为密钥生成算法,则有如下性质:如果(K1,…,K16)=KG(K),那么(K1',…,K16')=KG(K’)(iii) 对于任意两个比特a和b,有(a⊕b)’= a⊕b⊕1=(a⊕1)⊕b=a’⊕b(= a⊕(b⊕1)=a⊕b’),因此对任意两个长度相等的比特串A和B,有(A⊕B)’=A’⊕B=A⊕B’成立。
穷举搜索密钥空间K1/2,对于某个k∈K1/2,假设(i) E k(x)=y1,如果y1=y,则说明k0=k而且k0∈K1/2。
(ii) E k(x’)=y2,如果y2=y’,则说明k= k0’,即k0= k’而且k0∈K’1/2。
综上可知:对于选定的明文密文对(x,y),只需遍历K1/2中的所有密钥即可,此时密钥空间大小少为255。
2.证明DES的解密变换是加密变换的逆。
证明:定义T是把64位数据左右两半交换位置的操作,即T(L,R)=(R,L),则T2(L,R)=(L,R),即T2=I,其中I为恒等变换。
定义DES中第i轮的主要运算为f i,即f i (L i 1, R i 1 ) = ( L i 1 F (R i 1, K i ), R i 1 )么解密后的P1跟加密前一样,同样有一个比特的错误,而对于C i≥2能够解密得到无错误的明文。
4.在8比特CFB模式中,如果在密文字符中出现1比特的错误,问该错误能传播多远。
解:该错误将传播到后面的 '≤(64+8-1)/8∞ƒ = 8个单元,共9个单元解密得到错误的明文。
四、公钥密码1. 3.用Fermat定理求3201 mod 11。
解:对于模运算,有结论(a×b) mod n = [ (a mod n)×(b mod n)] mod n 由Fermat 定理,可知310≡1 mod 11,因此有(310)k≡1 mod 11所以3201 mod 11= [(310)20×3] mod 11 = [( (310)20 mod 11)×(3 mod 11)] mod 11 = 3。
解:n=35 -> p=5, q=7∏(n)=(p-1)(q-1)=24d≡e-1 mod ∏(n)≡5-1 mod 24≡5 mod 24 .... (因为5×5≡1 mod 24)所以,明文M ≡ C d mod n ≡ 105 mod 35 ≡ 512.设RSA 加密体制的公开钥是(e,n)=(77, 221)。
(1) 用重复平方法加密明文160,得中间结果为:(1)如果接收方B 的公开钥是y B=3,发送方A 选择的随机整数k=2,求明文M=30 所对应的密文。
(2)如果A 选择另一个随机整数k,使得明文M=30 加密后的密文是C=(59, C2),求C2。
解:(1) C1≡g k mod p = 72 mod 71 = 49,C2≡y Bk M mod p = (32×30) mod 71= 57 所以密文为C=(C1, C2)=(49, 57)。
(2)由7k mod 71 = 59 ,穷举k 可得k=3 。
所以C2 = (3k×30) mod 71 = (33×30) mod 71 = 29。
解:C2 - n A C1= (P m + kP A)– n A (kG) = (10, 2)– 7(8,3) = (10, 9) = P m五、消息认证与杂凑函数1. 6.1.3 节的数据认证算法是由CBC 模式的DES 定义的,其中初始向量取为0,试说明使用CFB 模式也可获得相同结果。
(图1)解:CFB 模式中的加密部分的框图如下:(图2)如果要使CFB 模式输出结果和CBC 模式的相同,那就要选择适当参数和输入。
假设消息为M=D1D2…D N,则按如下思路考虑:(1) CBC 中DES 加密算法输入输出都为64 位,所以CFB 中的参数j 应取64。
此时的CFB 模式变为:(图3)(2)比较图1 和图2 中开始几个分组的处理,考虑DES 加密的输入和输出,可知,IV → D1, P1 → D2, ...(3)CBC 中最后一个DES 加密的输出为消息认证符,即O N=E K(D N⊕O N-1),因此在CFB 中,应取P M为Z64(64 比特都为0 的分组),这样有C M=E K(C M-1)⊕Z64=E K(C M-1)。
此时,应取P M-1 = D N。
综上可知:对于消息M=D1D2...D N, 如果采用DES/CFB 的数据认证算法,那么,当其参数取如下值时,参数j=64, 参数IV=D1,输入消息M'=D2D3...D N Z64其输出与采用DES/CBC 的数据认证算法的输出相同。
NCUT 密码学–习题与答案2010 2.有很多散列函数是由CBC模式的分组加密技术构造的,其中的密钥取为消息分组。
例如将消息M分成分组M1,M2,…,M N,H0=初值,迭代关系为H i=E Mi(H i-1)⊕H i-1 (i=1,2,…,N),杂凑值取为HN,其中E是分组加密算法。
(1)设E为DES,我们知道如果对明文分组和加密密钥都逐比特取补,那么得到的密文也是原密文的逐比特取补,即如果Y=DES K(X),那么Y’=DES K’(X’)。
利用这一结论证明在上述散列函数中可对消息进行修改但却保持杂凑值不变。
(2) 若迭代关系改为H i=E Hi-1(M i)⊕M i,证明仍可对其进行上述攻击。
解:(1) H i=E Mi(H i-1)⊕H i-1 E Mi(H i-1)= H i⊕H i-1E Mi’(H’i-1)= (H i⊕H i-1)' = H i⊕H’i-1即H i =E Mi’(H’i-1)⊕H’i-1则有H1 =E M1’(H’0)⊕H’0,因此,构造消息M’1M2…M n,同时初始向量取为原先的初始向量的补,则可得到相同的杂凑值。
(2) H i=E Hi-1(M i)⊕M i E Hi-1(M i)= H i⊕M i E H’i-1(M’i)= H i⊕M’i则有H1 =E H0’(M’1)⊕M’1因此,构造消息M’1M2…M n,同时初始向量取为原先的初始向量的补,则可得到相同的杂凑值。
3.考虑用公钥加密算法构造散列函数,设算法是RSA,将消息分组后用公开钥加密第一个分组,加密结果与第二个分组异或后,再对其加密,一直进行下去。
设一消息被分成两个分组B1和B2,其杂凑值为H(B1,B2)=RSA(RSA(B1)⊕B2)。
证明对任一分组C1可选C2,使得H(C1,C2)=H(B1,B2)。
证明用这种攻击法,可攻击上述用公钥加密算法构造的散列函数。
证明:(1)对任一分组C1,设RSA算法中加密公钥为e。
若取C2为C2 = (C1e mod n)⊕(B1e mod n)⊕B2则有RSA(C1)⊕C2 = (C1e mod n)⊕[(C1e mod n)⊕(B1e mod n)⊕B2]= (B1e mod n)⊕B2= RSA(B1)⊕B2从而有H(C1,C2) = H(B1,B2)成立。