什么是哈希函数?哈希函数(Hashfunction)是一种将任意大小的数据映射为固定长度散列值(哈希值)的函数。哈希函数接受输入数据,并通过执行特定的算法对数据进行处理,产生一个固定长度的输出,哈希函数的主要特点包括:1.固定长度输出:无论输入数据的大小如何,哈希函数都会生成一个固定长度的哈希值,常见的哈希函数输出长度为128位256位或更长。
3.不可逆性:从哈希值无法逆向推导出原始输入数据,即使输入数据的微小变化,也会导致完全不同的哈希值,这使得哈希函数在密码选中用于保护数据的完整性。4.唯一性:理想情况下不同的输入应该生成不同的哈希值,而相同的输入始终生成相同的哈希值,这种唯一性可以用于快速查找和索引。哈希函数在计算机科学和信息安全领域有广泛的应用,包括密码学中的数字签名、消息认证码密码、哈希函数数据完整性校验数据结构中的哈希表布隆过滤器等。
1、密码技术(七、二
单向散列函数获取消息的“指纹”MD4是由Rivest于1990年设计的单向散列函数,能够产生128比特的散列值。不过,虽则Dobbertin提出寻找MD4散列碰撞方法,现在它已经不安全了。MD5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它也已经不安全了。
SHA1是由NIST(NationalInstitueofStandardsandTechnology,美国国家标准计算研究所)设计的一种能够产生160比特的散列值的单向散列函数。1993年别作为美国联邦信息处理标准规格发布的是SHA,1995年发布修订版FIPSPUB1801称为SHA1。在《CRYPTREC密码清单》中,SHA1已经被列入“可谨慎运用的密码清单”,即除了用于保持兼容性的目的以外,其他情况都不推荐使用。
2、单向散列函数的函数性质
Hash是作用于一任意长度的消息M,返回一固定长度的散列值h:hH(m)。其中h的长度为m。Hash函数主要用于封装或者数字签名的过程当中,它必须具有如下几个性质:1.给定h,根据H(M)h计算M在计算上是不可行的;2.给定M,要找到另一消息M’。并满足H(m)H(m’)在计算上是不可行的。上述特性中的任何弱点都有可能破坏使用Hash函数进行封装或者签名的各种协议的安全性,如生日攻击。
如果用户A用数字签名算法H(m)进行签名,而B能产生满足H(m)H(m’)的另一消息M’,那么B就可以声称A对M进行了签名。Hash函数除了需要上述性质外还需要的性质有:3.给定M,很容易计算h;4.抗碰撞性,即随机找到两个消息M和M’,使H(m)H(m’)在计算上不可行。