11.1
需求 | 描述 |
---|---|
输入长度可变 | H H H 可应用于任意大小的数据块 |
输出长度固定 | H H H 产生定长的输出 |
效率 | 对任意给定的 x x x,计算$ H ( x ) $比较容易,用硬件和软件均可实现 |
单向性 | 对于任意给定的Hash吗h,找到满足 $H ( y ) = h $的 y y y在计算上是不可行的 |
弱抗碰撞性 | 对于任何给定的分块 x x x,找到满足 y ≠ x y y\neq xy y=xy |
强抗碰撞性 | 找到任何满足 H ( x ) = H ( y ) 的偶对 (x,y) 在计算上是不可行的 |
伪随机性 | $H $的输出满足伪随机测试标准 |
11.2
- 弱抗碰撞是指攻击者对于给定的Hash值h,试图找到 H ( y ) = h H ( y ) = h H(y)=h 的 y y y。对于 m m m位的Hash值,穷举攻击的规模是 2 m 2^m 2m
- 强抗碰撞是指攻击者试图找到两个消息或数据块x和y,满足$H ( x ) = H ( y ) $。对于m位的Hash值,穷举攻击的规模是 2 m / 2 2^{m/2} 2m/2
11.3
哈希函数使用压缩函数作为基本构建块,并涉及压缩函数的重复应用。
压缩函数将一个较长的,固定长度的输入处理后,返回一个较短的,固定长度的输出。Hash函数是一种基于压缩函数的不断重复压缩输入的分组和前次压缩处理的结果,直到整个消息都被压缩完毕的过程,最后的输出作为整个消息的hash值。在这个过程中,任意长度的消息被破碎成一定长度的分组,分组的长度取决于压缩函数。并且出于安全的角度,对未填充满的分组作相应的数据填充。
11.7
海绵结构与其他迭代Hash函数的结构相似,在海绵函数中,输入消息被分块为固定长度的分组。每个分组逐次作为每轮迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生一组输出块。海绵函数允许输入长度和输出长度都可变。
海绵函数由三组参数定义:
$f = $内部函数,用于处理每轮的输入分组
$r = $输入分组的位长度,称其为位速率(bitrate)
$pad = $填充算法
海绵函数允许输入长度和输出长度都可变,可以用于设计Hash函数、伪随机数发生器、以及其他密码函数。