11.1 安全 Hash 函数需要具有那些特性
H能用于任何大小的数据分组;
H产生定长输出;
对任意给定的x, H(x)要相对易于计算,使得软硬件实现都实际可行;
单向性:对任意给定的码y, 寻求x使得H(x)=y在计算上不可行;
弱抗碰撞性:任意给定分组x, 寻求不等于x的x’, 使得H(x)= H(x’)在计算上不可行;
强抗碰撞性:寻求任何的(x,x’)对,使得H(x)=H(x’)在计算上不可行;
11.2 弱抗碰撞性和强抗碰撞性的区别是什么
弱抗碰撞性是任意给定分组x, 寻求不等于x的x’, 使得H(x)= H(x’)在计算上不可行;强抗碰撞性是寻求任何的(x,x’)对,使得H(x)=H(x’)在计算上不可行; 前者的x是给定的,而后者是不给定的,因而强抗碰撞性的要求要比弱抗碰撞性的要求的要高。
11.3 Hash 函数中的压缩函数的作用是什么
压缩函数将一个较长的,固定长度的输入处理后,返回一个较短的,固定长度的输出。Hash函数是一种基于压缩函数的不断重复压缩输入的分组和前次压缩处理的结果,知道整个消息都被压缩完毕的过程,最后的输出作为整个消息的hash值。在这个过程中,任意长度的消息被破碎成一定长度的分组,分组的长度取决于压缩函数。并且出于安全的角度,对未填充满的分组作相应的数据填充
11.7 给出海绵结构的定义
海绵结构分为吸水阶段和挤压阶段。海绵函数接收一定长度的输入,然后输出一定长度的输出,中间包含了有限个内部状态。在海绵函数中,输入消息被分块为固定长度的分组。每个分组逐次作为每轮迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生一组输出块。