计算机安全、密码学8道综合题

一、形如F(M)=Mk mod N,其中K保密,N公开,M=2,3,4,5,6……
问:这个方案能生成一系列的子密钥用于一次一密吗?

不能生成,因为M较大时,F(M)可由M较小的F(M)推出。
比如F(2)=2Kmod N,F(4)=4kmod N=F(2)2 mod N,F(4)可由F(2)推出,不安全,不适用于一次一密


二、一个公司内部使用的通讯协议原版为:
(1)A将(A,E(PUb,[M,A]),B)发给B
(2)B发送应答(B,E(PUa,[M,B]),A)给A

请问该协议可否简化为:
(1)A将(A,E(PUb,M),B) 发给B
(2)B发送应答(B,E(PUa,M),A)给A

不能简化。
若有公司员工C,
①C将A->B的消息截获,将(A,E(PUb,M),B) 改成(C,E(PUb,M),B),然后发给B
②B解密C发来的消息,将 (C,E(PUb,M),B)解密得到M,然后再给C发应答(B,E(PUc,M),C)
③C得到了B->C即(B,E(PUc,M),C),可用C的私钥解密,C也能得到M
所以,不安全,协议不能简化。


三、
(1)Bob截获了一份发给Alice的密文C,该密文采用RSA算法,是用Alice的公钥e加密的。Bob想获得原始消息明文M=Cd mod n。Bob选择了一个小于n的随机数r,并计算:
Z=re mod n
X=ZC mod n
T=r-1 mod n
接着,Bob让Alice用她的私钥d对X进行签名,收到Alice返回Y=Xd mod n。请说明Bob如何利用获得的信息去破解求出M。

Y=Xdmod n
Y=(ZC)dmod n
Y=(Zd * Cd)mod n
Y=(Zd * M)mod n
Y=(red * M)mod n
Y=(r * M)mod n
又因为T=r-1 mod n
所以:
TY=M mod n=M(因为M<n)
即M=TY

(2)Bob对明文M加上盲因子Z后发给Alice,让Alice用她的私钥签名,收到Alice返回Y=Xd mod n,请说明Bob如何利用获得的信息求出去盲因子后 有签名的明文M。

Alice得到的信息是ZM
Alice签名将Y=(ZM)dmod n发给Bob
Bob进行去盲
Y=(ZM)dmod n
Y=(ZdMd)mod n
Y=(redMd)mod n
Y=(r * Md)mod n
又因为T=r -1 mod n
所以:
TY=Md mod n=M(因为M<n)
即Md mod n=TY


四、利用RSA加密算法构造单向散列函数,处理如下两个分组B1和B2,其中RSA加密使用公开的公钥。
已知:Hash(B1,B2)=RSA(RSA(B1) ⨁ \bigoplus B2)
请问在B1,B2,C1已知和RSA用于加密的公钥均已知,能否快速找到C2,使得:
Hash(B1,B2)=Hash(C1,C2) ?

ps:一个数m异或另一个数n两次,得到的还是m


能找到C2
Hash(B1,B2)=Hash(C1,C2)
RSA(RSA(B1) ⨁ \bigoplus B2)=RSA(RSA(C1) ⨁ \bigoplus C2)
因为RSA明文密文一一映射,所以得到
RSA(B1) ⨁ \bigoplus B2=RSA(C1) ⨁ \bigoplus C2
再两边同时异或RSA(C1)
即RSA(C1) ⨁ \bigoplus RSA(B1) ⨁ \bigoplus B2=RSA(C1) ⨁ \bigoplus RSA(C1) ⨁ \bigoplus C2
可得RSA(C1) ⨁ \bigoplus RSA(B1) ⨁ \bigoplus B2=C2
所以,C2为RSA(C1) ⨁ \bigoplus RSA(B1) ⨁ \bigoplus B2


ps:因为给定任一分组C1,可以选择C2使得Hash(C1,C2)=Hash(B1,B2).因此该散列函数不满足抗弱碰撞性。

五、H(m)是一个抗碰撞性函数。将任意长的消息映射为n位。请问是否对于所有的消息x1和x2,若它们不相等,则他们的散列结果也不相等?

不是。若他们不相等,他们的散列结果可能相等。
若m>n,则m与散列值H(m)不能一一映射,为多对一,所以x1和x2不相等时,散列结果可能相等


六、请借助RSA的相关方法,设计一个方案,使得:
(1)第一签名者形成文件,对文件签名,并发给第二签名者;
(2)第二签名者首先验证该文件确实是第一签名者签过名。然后,他将其签名也加入文件中。

如何使公众不能签证 第一签名者签了名但第二签名者未签名的中间结果。只有当两人均签名,公众才能验证到两人都已签名。

设第一签名者为A,第二签名者为B,公众为C。
A->B为RSAPUB(RSAPRA(M,A)) ,即A用私钥A签名后再用B的公钥加密发给B
B用私钥RSAPRB解密得RSAPRA(M,A)
B->C为RSAPRB(RSAPRA(M,A),B)
公众持有B公钥和A公钥,可解密得到A和B均签名的文件。但不能在A->B的中间结果RSAPUB(RSAPRA(M,A)) 时得到A签名的文件,因为公众没有B私钥。


七、运用对称密码实现数字签名的早期方案基于如下叙述的内容:为了对n位的消息签名,研究者设计了这个方案,事先随机产生2n个56位的密钥:
k1,K1,k2,K2……kn,Kn
这些参数是保密的。发送者再相应地事先准备好两套64位的验证参数:
u1,U1,u2,U2……un,Un 和v1,V1,v2,V2……vn,Vn

这两套参数公开,其中vi=E(ki,ui),Vi=E(Ki,Ui
消息M按如下方式签名。对于消息的第i位,依赖该消息位的值为0或1,将ki或Ki附在消息上,例如,如果消息的前三位为011,则签名的前三个密钥为k1,K2,K3。.

(1)该方法如何验证签名?

根据消息第i位的0或者1,直接代入验证vi=E(ki,ui)或者Vi=E(Ki,Ui)是否成立,即可验证签名。

(2)该方法安全吗?

在一定条件下安全,超过n位就不安全。
若n+1位,无法签名。
若大于n时重复签名密钥,不安全。

(3)一套保密密钥可以安全地为不同的消息签名多少次?

一次。因为一次签名后,对应n位的密钥都暴露了。

(4)该方案会带来何种实际问题?

公开参数的开放问题。只能一次一密。


八、仿射Caesar密码,具有如下定义:对于每一个明文p,用密文C代替。其中C=E([a,b],p)=(ap+b)mod26,对加密算法的一个基本要求是单射,也就是如果p不等于q,则E([a,b],p)也不等于E([a,b],q)。

(1)对b的取值有没有限制?

(2)判定a不能取哪些值?

(3)分析a可以取哪些值,不可以取哪些值?

猜你喜欢

转载自blog.csdn.net/weixin_44575911/article/details/113244368
今日推荐