《信息安全原理与技术》(第2版)习题答案.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date信息安全原理与技术(第2版)习题答案信息安全原理与技术习题参考答案信息安全原理与技术习题参考答案郭亚军,宋建华,李莉,董慧慧清华大学出版社第1章1.1 主动攻击和被动攻击是区别是什么?答:被动攻击时系统的操作和状态不会改变,因此被动攻击主要威胁信息的保密性。主动攻击则意在篡改或者伪造信息、也可以是改变系统的状态和操作,因此主动攻击主要威胁信息的完整性、可用性和真实性。1.2 列出一些主动攻击和被动攻击的例子。答:常见的主动攻击:重放、拒绝服务、篡改、伪装等等。 常见的被动攻击:消息内容的泄漏、流量分析等等。 1.3 列出并简单定义安全机制的种类。答:安全机制是阻止安全攻击及恢复系统的机制,常见的安全机制包括:加密机制:加密是提供数据保护最常用的方法,加密能够提供数据的保密性,并能对其他安全机制起作用或对它们进行补充。数字签名机制:数字签名主要用来解决通信双方发生否认、伪造、篡改和冒充等问题。访问控制机制:访问控制机制是按照事先制定的规则确定主体对客体的访问是否合法,防止未经授权的用户非法访问系统资源。数据完整性机制:用于保证数据单元完整性的各种机制。认证交换机制:以交换信息的方式来确认对方身份的机制。流量填充机制:指在数据流中填充一些额外数据,用于防止流量分析的机制。路由控制机制:发送信息者可以选择特殊安全的线路发送信息。公证机制:在两个或多个实体间进行通信时,数据的完整性、来源、时间和目的地等内容都由公证机制来保证。1.4 安全服务模型主要由几个部分组成,它们之间存在什么关系。答:安全服务是加强数据处理系统和信息传输的安全性的一种服务,是指信息系统为其应用提供的某些功能或者辅助业务。安全服务模型主要由三个部分组成:支撑服务,预防服务和恢复相关的服务。支撑服务是其他服务的基础,预防服务能够阻止安全漏洞的发生,检测与恢复服务主要是关于安全漏洞的检测,以及采取行动恢复或者降低这些安全漏洞产生的影响。1.5 说明安全目标、安全要求、安全服务以及安全机制之间的关系。答:见图1.4,全部安全需求的实现才能达到安全目标,安全需求和安全服务是多对多的关系,不同的安全服务的联合能够实现不同的安全需求,一个安全服务可能是多个安全需求的组成要素。同样,安全机制和安全服务也是多对多的关系,不同的安全机制联合能够完成不同的安全服务,一个安全机制也可能是多个安全服务的构成要素。1.6 说明在网络安全模型中可信的第三方所起的作用。答:要保证网络上信息的安全传输,常常依赖可信的第三方,如第三方负责将秘密信息分配给通信双方,或者当通信的双方就关于信息传输的真实性发生争执时,由第三方来仲裁。第2章2.1、列出小于30的素数。2、3、5、7、11、13、17、19、23、292.2、若a是大于1的整数, 则a的大于1的最小因子一定是素数。 证明 若a是素数, 显然a的大于1的最小因子就是素数a; 若a是合数, 则显然除1和a外还有其它的因数,令b是这些正因数中最小者, 可以证明b不是合数而是素数, 若其不然, b必有大于1且不等于b的因数c, 于是由c|b和b|c可知c|a, 即c是a的因数,又有1<c<b, 这与假设b是a的大于1的最小因数相矛盾故b不是合数而是素数因此,a的大于1的最小因数b是素数2.3、如果n|(a-b), 证明ab mod n 证明:由n|(a-b)可知存在正整数k,使得a=kn+b,其中b是1到n-1之间的正整数,所以有 a mod n=b, b mod n=b,可知a,b同余,即ab mod n2.4、证明下面等式(1) (a+b) mod m = (a mod m) + (b mod m) mod m (2) (a-b) mod m = (a mod m) - (b mod m) mod m (3) (a×b) mod m = (a mod m) × (b mod m) mod m (4) (a×(b+c) ) mod m = (a×b) mod m) + (a×c) mod m) mod m 2.5、证明560-1是56的倍数。2.6、对于整数39和63,回答下面问题 (1) 它们是否互素;解:由于gcd(39,63)=3,所以他们不互素。 (2) 用欧几里德算法求它们的最大公因子; 解:用欧几里德算法的计算过程如下: (3) 25-1 x mod 15是否有解。 2.7、用欧几里德算法求gcd (1997, 57)和 gcd(24140, 16762) 2.8、用扩展欧几里德算法求下列乘法逆元(1) 1234 mod 4321 用扩展欧几里德算法的计算过程如下:循环次数QX1X2X3Y1(T1)Y2(T2)Y3(T3)初始值-104321011234130112341-3619211-3619-1461531-146152-7441532-74-3071075351-30710753309-10821 (2) 24140 mod 40902用扩展欧几里德算法的计算过程如下:循环次数QX1X2X3Y1(T1)Y2(T2)Y3(T3)初始值-104090201241401101241401-116762211-116762-12737832-1273783-52006433-52006-1014136051-1014136013-196466213-19646-36526879-365268326-4873482326-48734-68810260根据扩展欧几里德算法没有逆元。(3)550 mod 1769解:计算过程如下表所示:循环次数QX1X2X3Y1(T1)Y2(T2)Y3(T3)初始值-1017690155013015501-3119241-3119-4137431-413745-1645415-1645-9292951-9292914-45166114-4516-23741371-23741337-11938437-1193-1715501根据扩展欧几里德算法逆元是5502.9、用快速指数模运算方法计算200837 mod 77和319971 mod 772.10、用费马定理求3201 (mod 11)2.11、计算下面欧拉函数;(1) f(41) 、f(27)、f(231)、f(440) (2) (2)(6)和(3)(4),哪一个等于(12)。2.12、求解下列一次同余方程(1)3x10(mod 29)解 因为(3,29)1,所以方程有惟一解。利用辗转相除法求得使3x29y1成立的x、y为x10,y1。于是3·1029·(1)1,3·10029·(10)10,所以x10013(mod 29)。(2)40x191(mod 6191)解 因为(40,6191)1,所以方程有惟一解。利用辗转相除法求得使40x6191y1成立的x、y为x1393,y9。于是40·13936191·(9)1,40·1393·1916191·(9·191)191,所以x1393·1916041(mod 6191)(3)258x131(mod 348)解 因为(258, 348)6,而6 131,所以方程无解。2.13、证明下面结论设a、b、c、d为整数,m为正整数,若ab(mod m),cd(mod m),则: (1)axcybxdy(mod m),x、y为任意整数;(2)acbd(mod m);(3)anbn(mod m),n0;(4)f(a)f(b)(mod m),f(x)为任一整系数多项式。证明 (1)因为ab(mod m),cd(mod m),所以m|(ab),m|(cd),于是m|(ab)x(cd)y),即m|(axcy)(bxdy),故axcybxdy(mod m)。(2)因为ab(mod m),cd(mod m),所以m|(ab),m|(cd),于是m|(ab)c(cd)b),即m|(acbd),故acbd(mod m)。(3)因为ab(mod m),则存在整数q使得abmq。于是:anbn(bmq)nbn(bnbn-1(mq)1b1(mq)n-1(mq)n)bnmp,其中p是一整数。所以anbn(mod m)。(4)由(1)和(3)可证。2.14、求满足下面同余方程的解x1(mod 5),x5(mod 6),x4(mod 7),x10(mod 11)解:令m15,m26,m37,m411,b11,b25,b34,b410。则m2310,M1462,M2385,M3330,M4210。利用辗转相除法求得M1¢2,M2¢1,M3¢1,M4¢1。所以,x1·(2)·4625·1·385 4·1·33010·1·21044212111(mod 2310)2.15、求Z5中各非零元素的乘法逆元。解:1-1=1,2-1=3,3-1=2,4-1=42.16、类似于表2.2,用表列出有限域GF(5)中的加法和乘法运算解:表如下:加法01234001234112340223401334012440123乘法01234000000101234202413303142404321a-aa-100-1412333224142.17、对于系数在Z10上的取值的多项式运算,分别计算2.18、假设f(x)=x3+x+1在GF(2n)中是一个不可约多项式,a(x)=2x2+x+2,b(x)=2x2+2x+2,求a(x)b(x) 2.19、编程实现模n的快速指数运算。#include "stdafx.h"#include<stdio.h>#include<iostream.h>int main(int argc, char* argv) int m,e,n;printf("input the first number: ");cin>>e;printf("input the second number: ");cin>>m;printf("input the third number: ");cin>>n;int a=e,b=m,c=1;for(a=e;a>0; )if(a%2=1) a-=1; c=(c*b)%n; if(a=0) cout<<c<<endl;else if(a%2=0) a=a/2; b=(b*b)%n;return 0;2.20、编写实现扩展欧几里德算法求最大公因子和乘法逆元。#include "stdafx.h"#include<iostream.h>int main(int argc, char* argv)int m,d;cout<<"input the first number:"<<endl;cin>>m;cout<<"input the second number:"<<endl;cin>>d;int a3=1,0,m,b3=0,1,d; int Q;if(b2%a2>=0)Q=b2/a2;for(int i=0;i<=2;i+) int t3; ti=ai-Q*bi; ai=bi; bi=ti;if(b2=0) cout<<"m和d的最大公因子是"<<b2<<","<<b2<<"没有逆元!"<<endl;else if(b2=1) cout<<"m和d的最大公因子是"<<b2<<","<<b2<<"是d的逆元!"<<endl;return 0;第3章3.1 下式是仿射密码的加密变换c= (3m+5) mod 26,试求:(1) 该密码的密钥空间是多少(2) 求出消息“hello”对应的密文(3) 写出它的解密变换(4) 试对密文进行解密解:(1)密钥空间为n=312。(2)hello五个字母对应的数字分别是7,4,11,11,14 分别加密如下: (3*7+5)mod26=0 (3*4+5)mod26=17(3*11+5)mod26=12(3*11+5)mod26=12(3*14+5)mod26=21五个密文数字为0,17,12,12,21,对应密文是ARMMV。(3)解密变换为m=(c-5)mod26(4)密文ARMMV五个字母对应数字分别为0,17,12,12,21 分别利用解密变换解密,解密后对应数字为7,4,11,11,14 所以得到明文为hello。3.2用Playfair密码加密下面消息:ciphers using substitutions or transpositions are not secure because of language characteristics. 密钥为the playfair cipher was invented by Charles Wheatstone。解:由密钥可构建如下的密钥矩阵。THEPLAYFI/JRCWSNVDBOGKMQUXZ将明文按照两个字母分组为:ci ph er su si ng su bs ti tu ti on so rt ra ns po si ti on sa re no ts ec ur eb ec au se of la ng ua ge ch ar ac te ri st ic sx则密文为:NA LE LF OE NF GX OE OW PA EM PA GS OU AL AY VN EG NF PA GS CF FL SG EC TS ZF HO TS FM OF US TR GX MF OP WT YA CD HP AR CE AN NU3.3 假设密钥为“encryption”,用维吉尼亚密码加密消息symmetric schemes require both parties to share a common secret key。解: 在明文下面重复写密钥字,组成密钥。 明文M:symmetricschemesrequirebothpartiestoshareacommonsecretkey 密钥K:encryptionencryptionencryptionencryptionencryptionencrypt 将明文和密钥转化为数字 明文=(18,24,12,12,4,19,17,8,2,18,2,7,4,12,4,18,17,4,16,20,8,17,4,1,14,19,7,15,0,17,19,8,4,18,19,8,4,18,19,14,18,7,0,17,4,0,2,14,12,12,14,13,18,4,2,17,4,19,10,4,24) 密钥=(4,13,2,17,24,15,19,8,14,13,4,13,2,17,24,15,19,8,14,13,4,13,2,17,24,15,19,8,14,13,4,13,2,17,24,15,19,8,14,13,4, 13,2,17,24,15,19,8,14,13,4,13,2,17,24,15,19) 对每个明文数字和对应的密钥数字,使用加密,得到密文数字为 C=(22,11,14,3,2,8,10,16,16,21,6,21,6,3,2,7,10,12,4,7,12,4,6,18,12,8,0,23,14,4,23,21,6,9,17,3,11,15,14,4,8,13,4,5,10,1,7,21,6,17,6,4,6,10,8,19,17)于是密文为WLODCIKQQVGVGDCHKMEHMEGSMIAXOEXQGJRDLPOEINEFKBHVGRGEGKITR3.4 Hill密码不能抵抗已知明文攻击,如果有足够多的明文和密文对,就能破解Hill密码。(1) 攻击者至少有多少个不同明文-密文对才能攻破该密码?(2) 描述这种攻击方案。解:(1)破解一个Hillm密码至少应该有m个不同的明文-密文对。(2)攻击方案为:假定攻击者已经确定了正在使用的m值,至少有m个不同的明-密文对设为: 对任意的,有。如果定义两个, 则有矩阵方程Y=XK,其中矩阵K是未知密钥。假如矩阵X是可逆的,则攻击者可以算出,从而可以破译Hill密码(如果X不可逆,则必须重新选择m个明-密文对)。3.5用Hill密码加密消息”hill”,密钥为:并写出从密文恢复明文的解密过程。解:经计算设明文为Hill,则相应的明文向量为(7,8)和(11,11)。于是,相应的密文向量分别为因此,明文Hill的密文为XIYJ。3.6用一次一密加密消息“01011010101100111100010101010101011011110001010001”,选定的密钥是“10010101011110101101000101000001111100100101010010”,试写出密文。解:密文=明文密钥=0101101010110011110001010101010101101111000101000110010101011110101101000101000001111100100101010010=110011111100100100010100000101001001110101000000113.7使用DES加密,假设明文和密钥都为 (0123456789ABCDEF)16 = (00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2(1) 推导出第一轮的子密钥K1(2) 写出R0和L0(3) 扩展R0并计算E(R0)K1(4) 将第(3)问的结果,输入到8个S盒,求出加密函数F(5) 推导出R1和L1解: (1)将密钥K经置换选择1,得 =11110000 11001100 10101010 0000 =10101010 11001100 11110000 0000 左移1位后经置换选择2输出48为。 =00001010 00000010 01110111 10011011 01001000 10100101 (2)初始置换后,得到 =11001100 00000000 11001100 11111111 =11110000 10101010 11110000 10101010 (3)用扩展置换E将扩展为48位后,与异或E()=01110000 00010111 00100010 11100001 01011101 11110000(4)经过8个S盒输出32位S1(011100)=0000 S2(000001)=0000 S3(011100)=0010 S4(100010)=1000 S5(111000)=0011 S6(010101)=1101 S7(110111)=1000 S8(110000)=1100经置换函数P,输出加密函数如下:F=00111000 00000000 00100000 11101101(5)由和计算出L1和R1 L1=11110000 10101010 11110000 10101010 R1=F=11001000 10101010 11010000 010001113.8在GF(28)上01的逆是什么?并验证其在S盒中的输入。解:在GF(28)上01的逆是01,用二进制标识为0000 0001,代入S盒的变换,如下: 结果为01111100,用十六进制表示为2A,与查S盒所得到结果一致。3.9假设 AES的State矩阵的某一列分别是s0 = 87,s1= 6E,s2 = 46,s3 = A6。经过列混淆变换后,s1 = 6E 映射为s1 = 37,试计算验证这一结果。解: 第一列第2个字节的代换方程为87(026E)(0346)A6=37 下面验证上面等式成立。用多项式表示为 那么 再模一个次数为8的不可约多项式结果为写成二进制为11011100。同样,计算出0346=11001010, 87=10000111, A6=10100110。因此87(026E)(0346)A6计算结果为 10000111 11011100 1100101010100110 00110111=373.10采用AES加密,密钥为2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C,明文为32 43 F6 AD 88 5A 30 8D 3131 98 A2 E0 37 07 34(1) 写出最初的State的值(2) 写出密钥扩展数组中的前8个字节(3) 写出初始轮密钥加后State的值(4) 写出字节代换后State的值(5) 写出行移位后的State的值(6) 写出列混淆后State的值解: (1)最初的State的值为: (2)K0=(W1,W2,W3,W4)=密钥扩展数组中前8个字节为W0,W1,即2b 7e 15 16 28 ae d2 a6(3)根据的计算公式,分别计算出各式,然后计算出K1。 W4=SubByte(RotByte(W3)Rcon1 W0 = SubByte(CF4F3C09)(01000000) (2B7E1516) =(8A84EB01) (01000000) (2B7E1516) =A0FAFE17 W5=W1W4=(28AED2A6)( A0FAFE17)=88542CB1 W6=W2W5=(ABF71588)( 88542CB1)=23A33939 W7=W3W6=(09CF4F3C)( 23A33939)=2A6C7605 所以,得到第一轮子密钥K1为: 初始轮密钥加后,B1=B0+K0 =(4)经过字节代换后,state的值为 (5)经过行移位后,state的值为 (6)经过列混淆变换后,state的值为3.11 对习题3.10的明文和密钥不变,采用SMS4加密。(1)求出第一轮的轮密钥rk0。(2)求第一轮加密后的明文输出是什么?解:(1)SMS4加密算法的轮密钥由加密密钥通过密钥扩展算法生成,第一轮轮密钥rk0的计算过程如下:首先,将加密密钥按字分为四组,分别为 , , ,已知: 根据,得出各个的值:=0010 1011 0111 1110 0001 0101 0001 0110= 1010 0011 1011 0001 1011 1010 1100 0110两者做异或运算后,得=1000 1000 1100 1111 1010 1111 1101 0000同理计算,可以分别得=0111 1110 0000 0100 1110 0001 1111 0110=1100 1100 1000 1010 1000 0100 0001 1111=1011 1011 1011 1111 0110 1101 1110 0000然后,求出变换的输出:固定参数的十六进制表示为:00070e15,则通过异或运算=(0000 1001 0011 0110 0000 0110 0001 1100)。十六进制表示为:09 36 06 1c。再将输出结果A分为四组进入S盒,通过查表,输出的十六进制为:b6 e8 3d 49。利用公式,得=0001 0101 1001 1010 0111 1111 1000 101最后,由公式知,将与步骤求出的做异或运算,即可得到。=0001 0101 1001 1010 0111 1111 1000 1010 异或 =1000 1000 1100 1111 1010 1111 1101 0000=1001 1101 0101 0101 1101 0000 0101 1010,十六进制表示为:9d 55 d0 5a。(2)根据SMS4加密算法,首先将十六进制明文 32 43 f6 ad 88 5a 30 8d 31 31 98 a2 e0 37 07 34分组:。然后,根据第一轮轮密钥rk0的计算结果,已知加密函数F,得到第一轮输出数据。 进行合成置换T运算中间值=(1100 0100 0000 1001 0111 1111 0100 0001)。十六进制表示为:c4 09 7f 41。 将输出结果A分为四组进入S盒,通过查表,输出中间值的十六进制为:bb b6 9e 07。 进行线性变换由公式得,=1111 0000 1011 0001 1010 0000 1011 0011。 利用加密函数,将式得到的结果与做异或运算,即=( 0011 0010 0100 0011 1111 0110 1010 1101) (1111 0000 1011 0001 1010 0000 1011 0011 )=1100 0010 1111 0010 0101 0110 0001 1110十六进制表示为:c2 f2 56 1e。因此,得到第一轮的输出=88 5a 30 8d 31 31 98 a2 e0 37 07 34 c2 f2 56 1e。3.12有一个四级线性移位寄存器的反馈函数为f(a1, a2, a3, a4)= a1a2其中初态为(a1, a2, a3, a4 )=(1000),求其则输出序列的前12位。解: 四级移位存储器的输出如下所示:状态(a4, a3, a2, a1)输出状态(a4, a3, a2, a1)输出000110110010000101110100001011001001010010011110111100011100所以,输出序列的前12位是1000 1001 1010。3.13假如使用3位(从0到7)的RC4,其操作是对8取模(而不是对256取模),密钥是326,(1) 求初始化后S表的值(2) 计算第1个密钥字(3) 用上面生成的密钥加密明文100101解: (1)数据表S只有8个元素。初始化为01234567 S 0 1 2 3 4 5 6 7 由密钥326构造密钥数据表如下:32632632 K 0 1 2 3 4 5 6 7 利用如下循环构造实际S数据表。 j=0; for i=0 to 7 do j= (j+ S(i) + K(i)mod 8 ; swap(S(i),S(j); 该循环以j=0和i=0开始,使用更新公式后, j=(0+S(0)+K(0)mod8=(0+0+3)mod8=3 因此,S数据表的第一个操作是将S(0)和S(3)互换,互换结果如下:31204567 S 0 1 2 3 4 5 6 7 同样i加1后,继续执行此过程,直到循环结束。最后数据表S就被随机化为30527146 S 0 1 2 3 4 5 6 7 故初始化后S表的值为30527146 S 0 1 2 3 4 5 6 7 (2)从j=0和i=0开始,下面计算第一个密钥字: i=(i+1)mod8 =(0+1)mod8=1 j=(j+S(i)mod8 =(0+S(1)mod8=(0+0)mod8=0 Swap(S(1),S(0) 变换后数据表S变为03527146 S 0 1 2 3 4 5 6 7 然后如下计算t和k: t=(S(i)+S(j)mod8=(S(1)+S(0)mod8=3 k=S(t)=2 所以第一个密钥字是2,其二进制表示为010。(3)在(2)的基础上重复(2)过程,此时i=1,j=0 i=(i+1)mod8 =(1+1)mod8=2 j=(j+S(i)mod8 =(0+S(2)mod8=(0+5)mod8=5 Swap(S(2),S(5) 变换后数据表S变为03127546 S 0 1 2 3 4 5 6 7 然后如下计算t和k: t=(S(i)+S(j)mod8=(S(2)+S(5)mod8=6 k=S(6)=4 所以第二个密钥字是4,其二进制表示为100。 故,使用密钥100010加密明文100101,即异或得到密文000111。3.14在8位CFB模式中,如果传输中一个密文字符发生错误,这个错误将传多远?解: 错误将传9个字符。第4章4.1在使用RSA的公钥体制中,已截获发给某用户的密文为c=10,该用户的公钥e = 5, n =35,那么明文m等于多少?为什么能根据公钥可以破解密文?解:n=p*q (p和q都是素数),n=35故解出p=5 ,q=7 ;(n)=(p-1)*(q-1)=24 ;又因为e*d1 mod(n),而e=5故可解出d=5;m= cd mod n=105 mod 35=5 。因为RSA密码体制的安全性是基于分解大整数的困难性设计的。RSA算法的加密函数c= me mod n是一个单项函数,故对于解密密文的陷门是分解n=p*q ,只要知道这个分解就可以计算(n)=(p-1)*(q-1) ,然后用扩展欧几里德算法来求计算解密私钥d。4.2利用RSA算法运算,如果p=11,q=13, e=103,对明文3进行加密.求d及密文。解:(n)=(p-1)*(q-1)=10*12=120e*d1 mod(n),而e=103故可解出d=7n=p*q=11*13=143c= me mod n=3103 mod 143=164.3在RSA体制中,某用户的公钥e31,n=3599,那么该用户的私钥等于多少?解:n=p*q (p和q都是素数),n=3599故解出p=59 ,q=61; (n)=(p-1)*(q-1)=3480 ; e*d1 mod(n),而e=31故可解出d=3031