侯震:我有一对双胞胎小姨子,但是我没有同一个哈希值

原创
2374 天前
3557

区块链的核心思想是去中心化,小编写作的核心思想是去妖魔化。在这个区块链已经被妖魔化的世界,如何化繁为简、去伪存真至关重要,要准确全面了解一个技术,从底层技术入手,弄清楚基础概念是必要的。对于区块链来说,哈希算法的理解至关重要,很多白皮书对哈希运算只是一笔带过,并没有详细的介绍,这里小编会用通俗的语言给大家讲解什么是哈希运算,以便大家更好的了解区块链技术。

 

哈希定义

       Hash(哈希或散列)算法是一种常见的计算机基础算法,它能将任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,通常情况下,不同的输入很难映射为相同的Hash值。

例如,计算“Astar区块链实验室很棒!”的SHA-256Hash值。

这说明,对于一个文件,无需查看其内容,只要其SHA-256Hash计算后结果为cda445c254d7123437d1542423daded0bfffba5545eb084da00a652af797601d,则说明文件内容极大概率为“Astar区块链实验室很棒!”。

 

常见算法

       目前主流的Hash算法包括MD5和SHA系列算法。

       MD5(消息摘要算法第五版)是Rivest在1991年基于MD4算法开发出技术更加成熟的算法。它输入仍以512位分组来处理输入的信息,最后生成一个128位散列值。MD5比MD4复杂度大一些,但却更为安全。MD5已被证明不具备“强碰撞抗性”。

       SHA(Secure Hash Algorithm)是一个密码散列函数家族,并不是一个算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

       SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,算法原理类似。

       综上,MD5和SHA1已经被破解,一般推荐使用至少SHA-256或更安全的算法。

 

算法特性

正向快速

       无论你对同一个输入尝试多少次哈希运算,都会在有限时间内返回一个固定的哈希值。这里我们尝试用10买的“小霸王”来跑下运算速度,看看具体消耗了多少时间。0.4毫秒。

逆向抗力

       已经给定的Hash值,在有限时间内几乎很难逆推找到输入。

这里用几乎很难是因为,逆推找到输入只能应用穷举法,也就是一个一个去试。运气好的话试一次就出来了,运气差的话要试2^128-1次,可以肯定的是,我们Astar老大的10代世孙肯定是看不到试出来那一天了。平均下来,试出来的期望是2^127次,所以还是看不到。

 

敏感特性

       输入值只要有微小的改动,输出Hash值就会大不一样。

       Hash算法一般都是计算敏感型。也就是说计算资源是瓶颈,主频越高的CPU运行Hash计算的速度也越快,随后又引入了更高校的GPU来进行哈希计算。这也就导致了近两年显卡的价格大大上涨,所以喜欢吃鸡的小伙伴痛苦了,更换显卡的成本至少3000元。

 

冲突避免

       很难找到两段不同的输入,使得它们的Hash值一样(发生碰撞)。也就是说只要输入不同,那么他们的输出几乎不同。

       冲突避免又称为“抗性碰撞”,分为“弱抗碰撞性”和“强碰撞抗性”。在给定输入的前提下,无法找到另一个有相同Hash值的输入,则称算法具有“弱抗碰撞性”。如果无法找到任意两个发生Hash碰撞的输入,则称算法有“强碰撞抗性”。

 

       总结今天的内容,主要就介绍了哈希算法的概念和它的一些特征,是现代密码学算法的基础,后面小编会继续介绍区块链相关的技术内容,内容会以通俗易懂为主,目的是让大家更加好的了解区块链技术。我们下期见!