11.1、安全Hash函数需要具有哪些特性?
①输入长度可变:H可应用于任意大小的数据块
②输出长度固定:H产生定长的输出
③效率:对于任意给定的x,计算H(x)比较容易,用硬件和软件均可实现
④抗原向攻击(单向性):对于任意给定的Hash码h,找到满足H(y)=h的y在计算上是不可行的
⑤抗第二原向攻击(抗弱碰撞性):对于任意给定的分块x,找到满足y
≠
\neq
=x且H(x)=H(y)的y在计算上是不可行的
⑥抗碰撞攻击(抗强碰撞性):找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的
⑦伪随机性:H的输出满足伪随机性测试标准
11.2、抗弱碰撞和抗强碰撞之间的区别是什么?
对于抗弱碰撞 ,攻击者对给定的Hash值h,试图找到满足H(y)=h的y,穷举攻击方法是随机选择y,尝试计算其Hash值直到碰撞出现,对于m位Hash值,穷举规模大约是
2
m
2^m
2m,平均尝试
2
m
−
1
2^{m-1}
2m−1才能找到。
对于抗强碰撞,攻击者试图找到两个消息或数据块x和y,满足H(x)=H(y),对于m位Hash值,预计在
2
m
/
2
2^{m/2}
2m/2次尝试就可找到。
一个函数如果是抗强碰撞的那么也同时是抗弱碰撞的
11.3、Hash函数中的压缩函数的作用是什么?
压缩函数将一个较长的、固定长度的输入处理后返回一个较短的、固定长度的输出。
11.7、给出海绵结构的定义
海绵结构与其他迭代Hash函数的结构相似,且允许输入长度和输出长度都可变,在海绵函数中,输入消息被分块为固定长度的分组。每个分组逐次作为每轮迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生一组输出块。
海绵函数由三组参数定义:
f = 内部函数,用于处理每轮的输入分组
r = 输入分组的位长度,称其为位速率(bitrate)
pad = 填充算法