Loading

什么是Hash算法?Hash算法的特点是什么?

2019-10-10 16:34:03 75

一个优秀的哈希算法要具备正向快速、输人敏感逆向困难强抗碰撞等特征。

正向快速:正向即由输人计算输出的过程,对给定数据,可以在极短时间内快速得到哈希值。如当前常用的SHA26算法在普通计算机上一秒钟能做2000万次哈看运算。


输人敏感:输人信息发生任何微小变化,哪怕仅仅是一个字符的更改,重新生成的哈希值与原哈希值也会有天壤之别。同时完全无法通过对比新旧哈希值的差异推测数据内容发生了什么变化。因此,通过哈希值可以很容易地验证两个文件内容是否相同。该特性广泛应用于错误校验。在网络传输中,发送方在发送数据的同时,发送该内容的哈希值。接收方收到数据后,只需要将数据再次进行哈希运算,对比输出与接收的哈希值,就可以判断数据是否损坏。


image.png


逆向困难:要求无法在较短时间内根据哈希值计算出原始输人信息。该特性是哈希算法安全性的基础,也因此是现代密码学的重要组成。哈希算法在密码学中的应用很多,此处仅以哈希密码举例进行说明。当前生活离不开各种账户和密码,但并不是每个人都有为每个账户单独设置密码的好习惯,为了记忆方便,很多人的多个账户均采用同一套密码。如果这些密码原封不动地保存在数据库中,一旦数据泄露,则该用户所有其他账户的密码都可能暴露,造成极大风险。所以在后台数据库仅会保存密码的哈希值,每次登录时,计算用户输人的密码的哈希值,并将计算得到的哈希值与数据库中保存的哈希值进行比对。由于相同输人在哈希算法固定时,一定会得到相同的哈希值,因此只要用户输人密码的哈希值能通过校验,用户密码即得到了校验。在这种方案下,即使数据泄露,黑客也无法根据密码的哈希值得到密码原文,从而保证了密码的安全性。


强抗碰撞性:即不同的输入很难可以产生相同的哈希输出。当然,由于哈希算法输出位数是有限的,即哈希输出数量是有限的,而输人却是无限的,所以不存在永远不发生碰撞的哈看算法。但是哈希算法仍然被广泛使用,只要算法保证发生碰殖的概率   够小,通过暴力枚举获取哈希值对应输人的概率就更小,代价也相应更大。只要能保证破解的代价足够大,那么破解就没有意义。就像我们购买双色球时,虽然我们可以通过购买所有组合保证一-定中奖,但是付出的代价远大于收益。优秀的哈希算法即需要保证找到碰撞输人的代价远大于收益。


 哈希算法的以上特性,保证了区块链的不可篡改性。对一个区块的所有数据通过哈希算法得到一个哈希值,而这个哈希值无法反推出原来的内容。因此区块链的哈希值可以唯一、准确地标识一一个区块,任何节点通过简单快速地对区块内容进行哈希计算都可以独立地获取该区块哈希值。如果想要确认区块的内容是否被篡改,利用哈希算法重新进行计算,对比哈希值即可确认。