区块链简史(十二):万物信任大厦的基石——散列法

欢迎来到懒区块,人人都能看懂的区块链技术解读,深入浅出的解剖整个区块链系统。本文由懒区块整理撰写,不经过允许,切勿转载。本系列有十二篇文章,这十二篇文章介绍了区块链技术的简史、应用、预测和展望。您的每一次关注、转发、收藏都是我们更新优质内容的源动力。

各位小伙伴们大家上午好,在上一篇文章中我们简单了解了下跨链的一些概念,并且使用一个简单的小例子进行举例。今天这篇文章是区块链简史的最后一篇文章,明天起懒区块将会更新其他模块的文章,如源码解析、区块链教程等。今天我们就来聊下前面文章中我们说过的加密算法——散列法,散列法也被誉为是区块链技术的基础,因为区块链最大的进步就是解决去中心化的信任问题,而散列算法起到了不可替代的作用。

信任大厦基石——散列法

提到散列法的时候,我们先来将一个计算机中的常识,我们都知道计算机中所有的数据都是由0和1组成的,当然量子计算机就排除在外了,最小的单位就是比特(bit或者位),比特也是0或者1,我们来简单遐想一下,一台计算机拥有很多灯泡,我们定义灯泡亮为1,灭为0,而不同的数据则由不同的灯泡图案组成,一个单一的灯泡代表一个比特,我们来简单计算下,1MB的数据就拥有800万个字节,也就相当于800万个灯泡。

如今,电脑已经普及到千家万户,电脑的存储能力就能轻松上T,换算来说就是拥有数十亿个乃至万亿个灯泡。其实我们简单算下,就能发现只要256个灯泡组成的集合就足以代表宇宙中任何可观察到的颗粒(宇宙的颗粒数大约为2^80左右),而256个颗粒所拥有的可能为2^256个。简单粗暴地说,这就是一个天文数字

宇宙所有颗粒不过2^80个

聊完2^256,我们回归主题,来说下加密散列函数,也可以成为加密哈希函数。至于什么是散列函数(哈希函数),可以简单的理输入任何大小的值,就可以产生一个特定大小的输出。运用这个散列函数,产生数值的过程我们就称它为散列法,而散列函数的输出称之为散列。注意到这里有一个词叫做特定大小,不同的散列函数可以产生不同的大小,在今天文章中,我们不具体讲使用哪种散列函数。

散列输出256位的大小字符串

我们使用上图的散列例子,可以发现其输出的大小始终是256位的字符串,当我们输入一部N兆的电影,它输出的结果还是256位,输入一个邮箱也是输出256位,只是他们的灯泡图案不同。换个角度思考,其实散列法可以就像压缩算法一样,无论多大都压缩成固定大小的位数。但是压缩算法和散列法还是有不同的差异的,我们来简单了解下。散列算法总是会产生固定数量的灯泡(字节),而压缩算法压缩一部N兆的电影,还是会产生数以百万计的灯泡。并且使用压缩算法压缩的电影是可以解压复原的,而如果一部电影被散列到只有256位在理论来看是很难复原的了,因为信息丢失的太多了。这也是散列的一个优点:不可逆性

将一部电影散列成256位

一个安全的加密散列函数,必须有以下几点特征:单向、随机和抗碰撞单向是什么意思,就是不可逆。那么随机是什么意思呢,举个例子,对“串猪神”和“串牛神”进行散列法,它们产生的灯泡图案是有很大区块的。否则如果图案是相似的,那么对方就可以不同进行推敲,使用相关的词来推算出,例如串猪、猪神等。一个安全的散列算法,就算输入的结果相差一个bit,那么产生的灯泡图案也会大大不同。而抗碰撞,在上文中,我们提过,散列算法产生的总是特定大小的灯泡图案,如果这个灯泡图案能代表的事务较少,并且不同的输入内容有很大概率可以产生相同的灯泡图案,那么这个抗碰撞性就较差。

散列加密图片

讲了这么多,我们来简单说下散列在区块链技术中的应用吧。区块链上的地址,都是由散列法运算公钥得到的,一个以太坊的账户地址,是以Keccak-256加密散列算法进行运算,而比特币上的地址,是使用SHA2-256RIPEMD160算法得到的。如果散列算法的抗碰撞性不好,很容易就产生相同的地址,那么双方都有可能花掉这个地址上的数字资产。

在区块链中,散列法不仅被用于计算地址,签名也是由散列法得到的。在区块链中签名也是一个很重要的组成元素,签名类似于签署一张支票,用于证明哪些交易是真实的。签名则需要由私钥和需要被签名的数据散列生成。我们来举个一个例子,比如一笔交易“Alice在D日T时,向Bob发送了X单位的货币”,那么交易就会被提交为他们的散列,只要将这笔交易产生的散列复制到区块链浏览器,就可以查看这笔交易了。

区块链网络

在比特币的挖矿机制中,工作量证明(POW)就是一个随机数,我们称它为nonce。当它和其他散列过的数据进行合并时,会产生一个比规定目标值更小的值。挖矿使得散列法成为一种快速运算、单向不可逆的算法。找到一个有效的随机数需要时间,因为(矿工)没有可用的线索来帮助它们找到一个足够小的散列,而唯一找到一个小于目标值的方法,就是计算很多的散列:在比特币中,目前存在了超过10^25(10 septillion)数量级的散列。当一个(nonce)随机数被找到时,验证它的时间就需要1秒,然后这个新区块会在网络中广播,形成最新的共识和区块链。

好了,今天就聊这么多了。区块链简史的十二篇文章也到此结束了。接下来懒区块将会带大家开启新模块的文章。欢迎小伙伴点击关注,了解区块链技术。每晚更新相关的区块链技术文章,让区块链服务未来,小伙伴们想了解更多哪方面的文章,也可以在文章底部留言评论。懒区块会第一时间列入参考。因为小编能力有限,上述文章存在错误的,欢迎小伙伴在评论区指出,优秀的评论还可以获得懒区块赠送的小礼物。

你可能感兴趣的:(区块链简史(十二):万物信任大厦的基石——散列法)