现代密码学-第5章Hash函数与消息认证习题与解答-20091202

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章 Hash 函数与消息认证

习题及参考答案

1. 指出强抗碰撞H ash 函数与弱抗碰撞H ash 函数之间的区别。

答:弱抗碰撞H ash 函数是任给一个消息x,寻找另一个不同的消息x ,

使得他们的H ash 函数值相等是不可行;强抗碰撞Hash 函数是同时寻找两个不同的消息使得他们的Hash 函数值相等是计算上不看行的,可以看出强抗碰撞Hash 函数一定是弱抗碰撞的。

2. 考虑Gibson Hash 函数h 。设p 、q 是两个素数,N =p ⨯q ,g 是(Z N )*的生成元。N 作为公钥,p 与q 作为签名者的私钥。对任意消息m ,其摘要定义为:

h (m )= g m mod N 。

(1) 令N =4897,g =2231。分别计算消息m =132748,m '=75676的摘要。 (2) 证明:如果得到了两个碰撞的消息,那么就可以求出N 的分解。 (3) 证明:如果得到了N 的分解,那么就可以找到碰撞的消息。 解:(1)由h (m )= g m mod N 。 所以h (132748)=2231

132748

mod4897=2611 h(75676)=2611

(2)证明:若h (m)= h (m ')则有g m mod N= g m ' mod N

假设 N 的分解为 N=p*q 所以代入 然后根据中国剩余定理可以解得 p ,q 。

3. 设p 是一个素数,g 1、g 2是(Z p )*

的两个生成元,使得离散对数

p g g mod log

21

的计算是困难的。对任意消息m =(m 1, m 2),定义H ash 函数h 的摘要为:

p g g m m h m m mod ),(2

1

2

1

21⨯=。

(1) 设p =65867,g 1=11638,g 2=22770。分别计算消息m =(33123, 11789),m '=(55781, 9871)的摘要。

(2) 证明:求解H ash 函数h 的碰撞等价于计算离散对数p g g mod log

21

解:(1)由p g g m m h m m mod ),(2

1

2121⨯=并把题中数据代入公式中 得 h(33123,11789)=56381 h (55781,9871)=15899

(2)证明:求解Hash 函数h 的碰撞,即寻找m 和m ',使得)'()(m H m H =,也即

使得:p g g p g g m

m

m m mod mod '

2

'

12

1212

1⨯=⨯

两边同时在关于模p 求以1g 为底的对数,整理后得到:

p g m m m m g mod log

)'()'(2

22111

-=-,

这里就涉及到计算离散对数p g g mod log 21

。因此,求解H ash 函数h 的碰撞等价于

计算离散对数p g g mod log

21

4. 设H 1是一个从(Z 2)2n 到(Z 2)n 的Hash 函数,这里n ≥1,Z 2={0, 1}。对任意整数i ≥2,按下述方式定义一个从n

i

22)

(Z 到(Z 2)n 的H ash 函数H i :

对任意n i

x 22)(Z ∈,设

x = x 1||x 2,

其中n

-i x x 1

2

221)

(Z ,∈,定义

H i (x )= H 1(H i -1(x 1) || H i -1(x 2) )。

假设H 1是强抗碰撞的。试证H i 也是强抗碰撞的。 证明:根据定义))(||)(()(21111x H x H H x H i i i --=, 以此类推:))(||)(()(122112111x H x H H x H i i i ---=, ……

))(||)(()(121111111112 x H x H H x H =。

我们不妨假设i H 不是强抗碰撞的,则找得到'x 和已知的)(x H i 碰撞,即有

)'()(x H x H i i =,根据以上推导,可以找到1H 的一对碰撞111' x 和111 x ,这与1H 是

强抗碰撞是矛盾的。

因此,如果H 1是强抗碰撞的那么H i 也是强抗碰撞的。

5. 考虑用公钥加密算法构造Hash 函数。假设使用公钥加密算法RSA ,首先将消息进行分组;用RSA 加密第一个分组;将加密结果与第二个分组作异或,再对其进行加密;一直进行下去。例如,如果消息M 被分成二个分组B 1和B 2,则其H ash 值为H (B 1,

B 2)=RSA (RSA(B 1)⊕ B 2)。证明对任一分组

C 1,可找到分组C 2,使得H (C 1, C 2)=H (B 1, B 2)。进一步证明用这种攻击方法,可攻击该Hash 函数。 证明:

我们先来证明可以找到2C ,使得在已知1C 的情况下使得),(),(2121B B H C C H =。 在RSA 密码体制下,设加密密钥是e 。则),(),(2121B B H C C H =即为

e

e

e e

B B

C C )()(2121⊕=⊕,我们这里不妨令2121B B C C e

e ⊕=⊕, 则e

e C B B C 1122⊕⊕=,这里的2C 总是能找到的,并且它就满足题目要求,使得H (C 1, C 2)=H (B 1, B 2)。

在多个分组的情况下,利用证明的方法,总是能找到满足要求的分组消息,即实现对该H ash 函数的攻击。

6. 参考利用分组密码构造H ash 函数的方法,试利用公钥加密算法RSA 构造一个Hash 函数,并分析其安全性能。

解:上题即是一个基于RSA 算法构造的H ash 函数,其安全性不能好,在实际应用中必须加以改进。

7. 设E k 是一个分组长度为n 的分组密码的加密算法,密钥为k 。假设密钥长度也为n 。对于任意消息x ,首先对x 进行分组,每组长度为n 。如果x 的长度不是n 的倍数,则在x 的最后适当添加一些数据使得x 的长度恰好是n 的倍数。设

x = x 1 x 2…x l ,

其中x i ∈GF(2)n (1≤i ≤ l )。任选IV ∈GF(2)n 作为初始向量,令y 0=IV ,按下面四个不同的公式分别计算y i (1≤i ≤ l ),最后定义H (x )= y l 。试分析四个H ash 函数H 的安全性。

,)(,)(1-⊕⊕=⊕=i i i k i i i k i y x x E y x x E y

.

)(,)(111---⊕⊕⊕=⊕⊕=i i i i k i i i i k i y x y x E y x y x E y

解:H ash 函数一的安全性依赖于分组密码加密的安全性。

Hash 函数二的安全性依赖反馈序列的安全性和分组加密的安全性。 Hash 函数三的安全性依赖于加密密钥的复杂度。

Hash 函数四的安全性依赖于序列的安全性以及加密密钥的安全性。

8. 为什么在密钥公开的条件下,基于分组密码的CBC 工作模式和CFB 工作模式的Hash 函数H 是不安全的?对于任意给定的消息x ,试寻找一个与x 不同的消息x ',使得H (x ')=H (x )。 答案参见第5题。

相关文档
最新文档