LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 区块链入门(6) — 区块链的骨骼

区块链入门(6) — 区块链的骨骼

2019-11-05 币自来 来源:区块链网络

区块链不是腾空出世的新技术,它是包含了计算机科学过去20多年的研究成果:计算机网络P2P、算法、数据库、分布式系统和?计算机密码学?等等......区块链里的计算机密码学对于货币、股票、信任、数字资产、版权和交友信息的保护都十分重要。

1.?什么是哈希算法?

哈希算法又叫散列算法,是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。它的原理其实很简单,就是把一段交易信息转换成一个固定长度的字符串。

了解哈希算法,首先先认识一样东西——?黑盒?想象一个神奇的盒子,如果你从往盒子里塞一个的苹果进去,它可能会吐出一个汉堡包。小锦囊:这个神奇的盒子被称为“哈希方程”,但非专业人士又怎么好理解“哈希”这个词。所以,今天,我们就叫他“黑盒”。

3655aa4f549e91cd7321e0507772eaa1?x-oss-process=style%2Fcailu-watermark

黑盒(又叫做 哈希方程)?假设:我们从左边塞了个数字 4 进去,我们会发现,它在右边吐出了下列字串:‘dcbea’。

数字 4 是在怎么转化成这串字符的?没有人知道。而且,这个过程是不可逆的。得到了这串字符 ‘dcbea’,也不可能搞清楚这黑盒从左边塞进去过什么。但是,任何时候,你输入数字4给这个黑盒,它都总是会吐出同样的字符:‘dcbea’。

64037a43fff00fc4409f4ca8d0b25d40?x-oss-process=style%2Fcailu-watermark

hash(4) = dcbea?来试试发送一个别的数字进去,比如:26怎么样?

bd13925e838f17343ed114df27e57445?x-oss-process=style%2Fcailu-watermark

hash(26)=94c8e

这次我们得到了 ‘94c8e’,看来字符同样可以包含数字。有意思吧!?假如我现在问你如下问题:?“你能不能告诉我,要想在黑盒右边得到以三个0开头的一串字符(比如000ab),我该从左边放什么东西进去呢?”

527f521a165204f2ff7558ed8a9959d2?x-oss-process=style%2Fcailu-watermark

这个黑盒有个属性:我们无法从右边的结果,直接猜出来从左边放了什么进去。那我们应该怎么回答前面那个问题??是的,最直接的方法,就是一个数字一个数字的放进黑盒去尝试,直到我们得到我们想要的结果。?经过几千上万次尝试之后,最终会得到符合要求的输入值72533。

e22cd23c557d9da4c3dc748c36035455?x-oss-process=style%2Fcailu-watermark

结论:靠给定的输出结果来猜测输入值是极其困难的,但给定输入值来推测输出结果又是非常容易的,只要把东西放入黑盒就能立马得出相应的输出结果,并且放入同一个数字,黑盒都会吐出同一的结果。?如果我给你一个数字72533,然后问你:“这个数字,输入这个黑盒之后,是否会产生一个以三个 0 开头的字符串结果?”要得出答案难不难?是的,一点都不难。要做的就是把这个数字放进去,然后查看在右边能得到什么,就这么简单。?所以黑盒最重要的属性就是——给定一个输出值,要算出输入值是极端困难的。但是,给定输入值和输出值,要检验该输入是否会得到该输出,却是非常容易的。?接下来,我们将使用这台魔法黑盒为记账的文件夹产生一把密码锁。?想象一个场景:我给你一个数字20893。然后我问你:“你能不能找出一个数字,加上装在第一个数字20893以后,一起放进黑盒,最终会给我们一个以三个 0 开头的字符?”

这跟我们在之前看到的很相似,而我们已经知道,算出这样一个数字的唯一方法就是穷举每一个可能的数字。?又通过N多次尝试之后,我们会偶然发现一个数字,比如21191,加上20893以后(比如:21191+20893 = 42084)输入黑盒,将产生一串符合我们要求的字符。

7641b2e3c496f7527e9f95ad57e65698?x-oss-process=style%2Fcailu-watermark

在这个例子中,数字 21191 就成了数字 20893 的密码锁。假设现在有一张纸,数字 20893 写在上面。为了封印这页纸(比如:使得没有人能更改这页纸上的内容),我们将锁一个带有标签 ‘21191’ 的密码锁锁在上面,一旦密码锁数字(比如:21191)被锁在纸上,这页纸就被封印了。

3b60f1296f031f2107c8d142c6861360?x-oss-process=style%2Fcailu-watermark

小锦囊:密码锁数字又被称为?“工作量证明”。

这也就是我们平时经常听说的“挖矿”的原理之一。

其实,在比特币等靠工作量证明来实现“挖矿”的区块链项目中,每个矿机就是扮演着一个人,他拿着纸和笔,在给定某个结果(比如上文中的00078)的前提下,去尝试到底放进去哪个数字到黑盒能得到00078这个结果。谁先算出21191这个正确答案,谁就是获胜者,谁就可以拿到这个密码锁去封印这个文件夹的权利,并获得一定的奖励。?并且,如果任何人想验证这页纸是否已经被替换了,他需要做的不过是将这页纸上的内容,与密码锁数字加在一起并输入那个黑盒;如果黑盒给出了一串三个 0 开头的字符,那么内容就没有被改变。如果出现的字符不能满足我们的要求,我们就可以丢掉这页纸了,因为它的内容已经有了水分,没有任何用处了。

74d07470072603722b46b30e177677b9?x-oss-process=style%2Fcailu-watermark

因此,哈希算法有以下几个特点:1.正向快速?给定明文和哈希算法,在有限时间和有限资源内能快速计算得到哈希值。2.逆向困难?给定哈希值,在有限时间内很难逆推出明文,只能将所有可能性进行穷举,而并不能破解算法。3.输入敏感 原始输入信息发生任何变化,新的 Hash 值都会出现天翻地覆的变化。4.冲突避免?这个特点也是唯一性,后面的查找也要用到这个特点,因为只有哈希值是唯一的,我们才能用它去定位,否则就没有意义。

2.?哈希算法有什么用途?

哈希算法可以检验信息是否是相同的,这样的优势可以节省重复文件传送的时间。

举一个生活中很平常的例子,我们在生活工作中会使用一些软件给别人传送文件数据,如果有人传送了一份文件给一个人,然后又有一个人传送了相同的文件给了另外一个人,那么这个社交软件在第二次传送文件的时候会对比两次传送的哈希值,发现是相同的,该软件就不会再次上传文件给服务器了。

除此之外,哈希算法还可以检验信息的拥有者是否真实。

比如,我们在一个网站注册一个账号,如果网站把密码保存起来,那这个网站不论有多安全,也会有被盗取的风险。但是如果用保存密码的哈希值代替保存密码,就没有这个风险了,因为哈希值加密过程是不不可逆的。

3.?梅克尔树(Merkle tree)

梅克尔树(Merkle trees)结构是拉尔夫.梅克尔在1979年发明并以他的名字命名的,由于在比特币系统里梅克尔树实际上是由一大堆数据通过不断地哈希运算组成的树形结构,故此应该叫梅克尔哈希树。?梅克尔树是一种二叉树的数据结构:

f10b435a7912c7a24837e8e3f19e9076?x-oss-process=style%2Fcailu-watermark?梅克尔树

在梅克尔哈希树结构中,交易1、交易2等被称作叶子。由于二叉梅克尔树要求叶子是偶数才能合并,当出现单独一个叶子没法合并时候,就采用将其复制的方式进行自我合并。以此类推,当叶子上面的子节点也出现相同情况时候,也是同样以复制方式自我合并,只有形成树根了才是一个单独的哈希值。

梅克尔树结构以及把梅克尔树根放在区块头的设计,对维持比特币系统以分布式网络存在有着十分重要的作用。因为比特币系统一年生产几万个区块,而每个节点都要对交易进行验证记账,储存数据的空间就要越来越大,长期下去就只有少数节点有足够的能力做到,到那时候系统只剩下这少数节点时候,去中心化网络就演变成了中心化,这并不是中本聪所希望看到的。

对此中本聪让没有足够存储能力的大多数节点只需要保存区块头就行了,一个区块头只有80字节,几万个区块的区块头加起来也没有10MB,对普通电脑来说绰绰有余了,这些节点就会始终存在,确保了整个网络始终处于分布式状态。

放在区块头的梅克尔树根还可以对交易进行验证,当需要验证一笔交易时候,系统会向存储了所有交易的节点发出请求,该节点(又称全节点)就会将该笔交易的叶子组合、子节点组合发送过来(并不会发送全部交易),最后算出来的梅克尔树根哈希值与区块头保存哈希值的对比,相互一致了就证明交易验证通过。

另外,每一个区块的梅克尔树根哈希值,都放进下一个区块的区块头里成为父区块哈希值,相当于下一个区块保存了上一个区块的所有交易。这样一环扣一环的链接,让任何虚假交易或伪造区块都难以混进系统的区块链接中,除非从创世区块开始修改交易内容,这个难度大于上青天,确保比特币系统拥有足够的安全性。

梅尔克树听起来像是数学,而实际上,它是一个很简单的结构。因此,梅克尔树保障了区块链的数据不可篡改,想换根只能砍树了。

c7b2a1946fb192b608c71d60693f0ad1?x-oss-process=style%2Fcailu-watermark

【总结】看到这里你是不是对哈希算法有了初步的了解。区块链也可以说是哈希链,他们通常是一系列的梅克尔根哈希,或许,你可以将区块链比作一列火车,而每列火车就是一个梅克尔根,实际上列车上的乘客代表了大量的数字资产。每个梅克尔根连接在一起,形成一个更加强大的区块链结构体系。

—-

编译者/作者:币自来

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...