(2) 计算第1个密钥字
(3) 用上面生成的密钥加密明文100101 解:
(1)数据表S只有8个元素。初始化为
0 1 2 3 4 5 6 7 S 0 1 2 3 4 5 6 7 由密钥326构造密钥数据表如下:
3 2 6 3 2 6 3 2 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)互换,互换结果如下:
3 1 2 0 4 5 6 7 S 0 1 2 3 4 5 6 7
同样i加1后,继续执行此过程,直到循环结束。最后数据表S就被随机化为
3 0 5 2 7 1 4 6 S 0 1 2 3 4 5 6 7 故初始化后S表的值为
3 0 5 2 7 1 4 6 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变为
0 3 5 2 7 1 4 6 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
17
j=(j+S(i))mod8 =(0+S(2))mod8=(0+5)mod8=5 Swap(S(2),S(5))
变换后数据表S变为
0 3 1 2 7 5 4 6 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*d≡1 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=120
e*d≡1 modΦ(n),而e=103故可解出d=7 n=p*q=11*13=143
c= me mod n=3103 mod 143=16
4.3在RSA体制中,某用户的公钥e=31,n=3599,那么该用户的私钥等于多少? 解:n=p*q (p和q都是素数),n=3599故解出p=59 ,q=61; Φ(n)=(p-1)*(q-1)=3480 ; e*d≡1 modΦ(n),而e=31故可解出d=3031 。
4.4在RSA体制中,假设某用户的公钥是3533,p=101,q=113,现对明文9726加密和解密。 解:加密过程如下:n=p*q=11413 ;
Φ(n)=(p-1)*(q-1)=11200 ; e*d≡1 modΦ(n),而e=3533故可解出d=6597;
18
c= me mod n=97263533 mod 11413=5761;
解密过程如下:m= cd mod n=57616597 mod 11413=9726 。
4.5在ElGamal密码体制中,假设Alice想要将消息m=1299传送给Bob。Alice任选一个大
素数p为2579,取g为101,选择保密的私钥x为237。 (1) 计算公钥y。 (2) 求密文。
(3) 写出解密过程 解:(1)y= gx mod p=101237 mod 2579=4 ;
(2)选取一个r为853,计算密文为 C1= gr mod p=101853 mod 2579=1559
C2=m*yr mod p=1299*4853 mod 2579=1358 故密文为{1559,1358};
(3)解密过程为:先计算w=(C1x)-1 mod p ,再计算m= C2*w mod p 。
4.6选取模p为11下的椭圆曲线y2 =x3+x+6,确定E(Z11)上的所有点。 解:
x square roots mod p? y x3 + x + 6 mod 11 0 1 2 3 4 5 6 7 8 9 10 6 8 5 3 8 4 8 4 9 7 4 no no yes yes no yes no yes yes no yes 4, 7 5, 6 2, 9 2, 9 3, 8 2, 9
4.7取实数域椭圆曲线y2=x3-36x上的两个点p=(-3,9), Q = (12, 36),计算P+Q和2P。
19
4.8利用ElGamal的椭圆曲线密码算法,设椭圆曲线是y2=x3-x+118.椭圆曲线上一个点A?(0,376),假设A选择一个秘密整数k=7。求:
(1) A的公开密钥;
(2) 发送方B欲发送消息 (562,201),选择随机数r=386.求密文。 (3) 给出A从密文恢复消息的计算过程。 解:(1)设模数p=563,则B=kA=7A=( 139,465) ,A的公开密钥是(A,B) ; (2) 密文为:( C1 ,C2)=(rA,M+rB)=(386(0,376),(562,201)+386(139,465)) =((458,314),(469,366)) (3) A从密文恢复消息的计算过程为:
M= C2-7C1=(469,366)-7(458,314)=(469,366)-(73,71) = (469,366)+(73,492)=(562,201)
4.9公钥密码一般用于传输对称密钥,现假设A和B之间需要传输数据,A产生一个会话钥,
请回答下面问题:
(1) 在事前通信发信者A应该得到什么密钥? (2) 会话钥的作用是什么?
(3) 写出一个密钥分配协议,并分析其安全性。 解:(1)在事前通信发信者A应该得到会话钥;
(2)会话钥的作用是将需要传送的数据用会话钥加密; (3)一个密钥分配协议如下: 1.A→B:EPUb(IDA||N1), 2.B→A:EPUa(N1||N2), 3.A→B:EPUb(N2+1), 4.B→A:EPUa(EPRb(Ks)),
这协议既可以保密又可以认证。
4.10在Diffie-Hllman方法中,公共素数p = 11,本原根α = 2 (1) 如果用户A的公钥YA = 9,则A的私钥XA为多少? (2) 如果用户B的公钥YB = 3,则共享密钥K为多少? 解:(1)YA=aXAmod p,则XA=6;
(2)K=YBXAmod p=36 mod 11=3。
4.11两个用户A和B使用Diffie-Hellman密钥交换协议来交换密钥,假设公共素数p为71,
20