哈希运算和区块链的区别 哈希运算在区块链中的作用

超果 区块链 2023-01-27 101 0

本篇文章主要给网友们分享哈希运算和区块链的区别的知识,其中更加会对哈希运算在区块链中的作用进行更多的解释,如果能碰巧解决你现在面临的问题,记得关注本站!

小白如何秒懂区块链中的哈希计算

小白如何秒懂区块链中的哈希计算

当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。

那位说“拉稀”同学你给我出去!!

这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:

# 一、什么是哈希算法

## 1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。

从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。

如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。

如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。

呵呵,先别打我啊!这确实就只是一个函数的概念。

## 2、特点:

这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?

1)**确定性,算得快**:咋算结果都一样,算起来效率高。

2)**不可逆**:就是知道输出推不出输入的值。

3)**结果不可测**:就是输入变一点,结果天翻地覆毫无规律。

总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“b0baee9d279d34fa1dfd71aadb908c3f”,你说“11112”它给你弄成“afcb7a2f1c158286b48062cd885a9866”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。

# 二、哈希运算在区块链中的使用

## 1、数据加密

**交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头**。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。

1)、**识别区块数据是否被篡改**:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。

2)、**把各个区块串联成区块链**:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。

## 2、加密交易地址及哈希

在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?

首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。

这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。

这么哈希了半天,搞什么事情?有啥作用呢?

1)、**快速定位每笔交易**:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。

举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。

2)、**核实交易数据是否被篡改**:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。

## 3、挖矿

  在我们的区块头中有个参数叫**随机数Nonce,寻找这个随机数的过程就叫做“挖矿”**!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。

找这个数字是弄啥呢?做这个有什么作用呢?

1)、**公平的找到计算能力最强的计算机**:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。

2)、**动态调整难度**:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。

# 三、哈希运算有哪些?

说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。

从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。

需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。

**总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。

区块链的哈希算法是什么玩意?

和数软件解释:区块链是使用哈希算法加密。哈希算法是区块链中保证交易信息不被篡改的单项密码机制。哈希算法接收一段明文后,以一种不可逆的方式将其转化成一段长度较短,位数固定的散列数据。

哈希图会取代区块链?

2018年2月份哈希图团队就在Reddit上po出了一种新的实现共识算法平台,旨在为世界提供一种更有效、快速的价值互联网底层支撑。

从比特币出现到现在,区块链这个名词已经深入人心,似乎我们已经被深深植入一种想法,那就是 价值互联网 必将通过区块链来实现。而仔细一看,区块链似乎就是一个简单的链表,只不过是更宏观一些的区块相连。区块之内打包的各种公开的交易事务。于是我们从中总结出了人人都能谈的区块链的特点:

而区块链的用途承载了我们很多美好的想象,赋予更多节点以价值,包括内容,个人数据等形形色色的各类资产。

诚然,区块链已经在部分领域实现了这个功能。但是,在具体使用过程中,我们渐渐遇到了很多性能问题,先是以太坊上养猫就堵塞了整个以太坊网络。而比特币就更不用说了,即使全世界成千上万个分布式节点,各大矿场投入了巨资构建的矿场来支撑这个网络,仍然受限于每10分钟才出一个区块的算法限制。

因为性能瓶颈,其他算法也迅速出现,企图解决这个问题。比如通过PoS算法,DPoS算法,试图绕过PoW这种简单粗暴的解决方案,来提升网络每秒能够处理的交易事务次数(TPS)。

而最近掀起的EOS节点竞选,全世界范围内各个财大气粗的团队,参与竞选全球 21个超级节点 ,用于投票产生下一个区块。本质上仍然属于DPoS算法的应用,只不过这个超级节点能够获得大量的EOS代币|Token(主网上线后可称之为Coin)奖励,按照当前价格折算,就是上亿的收入。资本逐利,无可厚非。但是仔细想一想,官方的说法,这是为了提升TPS而设计的一种折中的方法。意思就是,决定区块产生的不再是公平的,而是一种代议制,在去中心化和中心化之间找到的一个微妙的平衡,当然这个系统内,除了超级节点,备胎节点也是必须的。本文不赘述EOS。

而这些,不禁让人深深思索一个新的问题,当年中本聪的设想,一人一个CPU,一个投票权的愿景似乎已经渐行渐远了。

提到区块链,我们常说共识算法,其实全称是一致性共识算法。其中,拆出两个关键词来:

共识似乎离普通用户很近,白话说即为,我们大多数人认同它的价值,它就有价值。而一致性却离得很远,下一个区块怎么产生,节点之间如何同步数据与我何干?

这里,我也只浅浅列出用在区块链世界的几种牛批的共识算法,包含:

下面进入本文的主题。

无论是什么共识算法,核心目的相同,那就是:在无可信中心节点可以依仗时,社区用户能够关于事务的产生,区块打包达成一致。

此处上一个对比图,将会一目了然,然后我也会再文字赘述一遍,和大家分享我自己对此的一点点浅浅的思考,如有任何差错,欢迎随时指正。

可见,左边是区块链,右边是哈希图。

仔细看,区块链实际上是一个公平但是残酷的机制。每一个参与挖矿的节点,都是在玩一个概率游戏。比如老大哥比特币,使用纯正的PoW算法,每个人通过密码学问题,暴力求解那个答案,我们称之为哈希碰撞。在10分钟内,产生的交易事务其实不止那个最终被加入最长的链上的区块的那些事务。而是同时有很多其他区块。每一笔事务会通过广播机制,向周围的其他节点广播以求得到足够的确认,并最终加入区块链。问题来了,节点保存着当前最新的备份,且只认最长的那个链,但是我们知道,广播意味着一样长的多个链会产生,于是节点就需要同时保存多个备用区块,然后静静等待下一步传来的区块,再比较选谁链更长,就把谁真的加入大家都认同的那个链,而失败的区块,就黯然退场,加入下一轮的事务。

挖到那个没加入到链上的节点,只能暗暗擦干眼泪,继续前行。

以太坊呢,就稍稍温情一些,会有一点点奖励给这类被称之为叔块的东西。

看到左边的区块链结构吗?生长过程中,是个树,长成了以后,就会被修剪的只剩下一个白白长长的树干。这就是我们说的,只认最长的链的法则残酷之处。

哈希图

对比看右边的哈希图结构,是不是要复杂很多?简单说,就是一个都不能少。

挖到的区块全都加入到系统。每个分支都将被用到,最终缝合到整个系统。

稍稍想想,就能知道左边的没有右边的事务处理速度快。因为左边总是要自我阉割一部分打包在区块内的事务。而右边不用。

那么,为什么右边可行?而区块链却选择的是更慢的算法呢?

答案很简单,区块链的广播方法,在全网达成共识很慢。那么哈希图是怎么做到的呢?

下面将谈一谈哈希图的两个核心机制中的其中一个,官方称呼为Gossip about gossip协议。

粗浅翻译为:关于八卦的八卦协议。

先来说一说Gossip协议(八卦协议)。

Gossip协议解决的问题就是在分布式环境下信息高效分发的问题。这个问题的解决决定着系统的一致性程度。

以办公室八卦为例,八卦一般是从一次对话开始,只要一个人八卦一下,有限的时间内办公室的人都会知道。与病毒传播类似。因此Gossip别名就是“病毒感染算法”,“谣言传播算法”。

Gossip的核心就是当前节点随机选择一些节点把那个告诉它们你知道的所有事情。好比说,你听到了一个八卦消息,你会忍不住想和朋友分享,于是你从你认识的人中,随机挑了一部分人,把这个消息告诉了他们。他们也一样,每个人听到这个消息,也会忍不住想和他们的朋友分享。像病毒传播一样,迅速传遍了整个人际网络。

因此理解八卦协议,可以带入一种日常生活我们总是会参与到的八卦场景。

而关于八卦的八卦协议,这里不再多说,只是可以对照一下,作为一个传递八卦消息的人,你再被其他人八卦,是不是有一种意想不到的被人验证的感觉?后面会再写文详述。

总之,通过Gossip协议,哈希图能够做到在秒级别实现共识(牛批吧)。因此,就能够采用这种绝不放弃任何区块的图状方式,进而提升事务打包确认的速度。不是一般的快。

有人认为哈希图要颠覆区块链的,但是哈希图的人认为,它们会共存。-- 且当八卦,不必在意

接着引出一个新的问题给大家,我们真的关心底层技术的实现方式吗?

支付宝好用,微信好用,我们关心它们是怎么实现的吗?我想绝大部分朋友是不在意的。

那么对应到区块链或者哈希图,我们其实并不会太在意到底哪个算法更好,而是更关心,我这个转账多久能够被确认,别人给我转的钱多久能收到。

诚然,我们不必太在意底层,但是支撑起一个良好体验的产品,必然是从底层汲取能量。

或许,哈希图将带来一种崭新的体验。

到现在,我相信一组新词不断出现在大家的信息捕捉器里:

我的粗浅理解是,不带代币的互联网产品都是古典的,而带有代币的大多数号称价值互联网的产品也只是耍猴,博眼球,卖空气,更不要提国外还时不时捧出的12岁CEO,发行以太坊代币,我归结为卖傻儿子系列。

不管是什么互联网,我们的核心诉求始终都是,要好用,简单说就是快且安全高效。

而价值呢,更多的愿景仍然是希望将个人产生的价值部分乃至全部还归于个人。

但是,任重道远。在古典互联网安家的90后们尚且未能全部拥抱区块链,更别说80后,70后等等大部队了。

我们终将死去,价值互联网会在新一代的原住民中生存。

而本篇,希望带来了一点点价值,那就很好了。

2018.4.21 -- YQ

郑重声明

本文里还未提到哈希图的缺点,导致给人一种推广软文的感觉。本文只是纯粹科普一下不同的公开记账本实现方式,并非诱导大家投资,我个人不参加一级市场的私募,风险承担不起,也不鼓吹大家参与。个中风险,自己衡量,自己把握。

区块链最直白的解释

近几年,“区块链”一词成了大热门,新闻媒体竞相报道,但大家或许对于区块链的认知还停留在雾里看花的阶段,今天我们就来揭开它的神秘面纱。

其实区块链的本质特别简单,一句话就可以解释:去中心化分布式数据库。

区块链的主要作用是用于存储信息,任何人都可以将信息写入,同时也可以读取,所以它是一个公开的数据库。

区块链的特点

要说分布式数据库这种技术,市场上早有存在,可不同的是,区块链虽然同为分布式数据库,但它没有管理员,是彻底去中心化的。

去中心化是区块链技术的颠覆性特点,它无需中心化代理,实现了一种点对点的直接交互,使得高效率、大规模、无中心化代理的信息交互方式成为了现实。

但是,没有了管理员,人人都可以往里面写入数据,怎么才能保证数据是可信的呢?被坏人改了怎么办?设计者早已想到了这些,这也证明了区块链是真正划时代的产物。

区块

区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。

每个区块包含两个部分:

区块头(Head):记录当前区块的特征值

区块体(Body):实际数据

区块头包含了当前区块的多项特征值。

生成时间

实际数据(即区块体)的哈希

上一个区块的哈希

...

系统中每一个节点都拥有最新的完整数据库拷贝,修改单个节点的数据库是无效的,因为系统会自动比较,认为最多次出现的相同数据记录为真。同时数据的每一步记录都会被留存在区块链上,可以溯源每一步的往来信息。

这里,你需要理解什么叫哈希(hash),这是理解区块链必需的。

所谓"哈希"就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。

举例来说,字符串123的哈希是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六进制),转成二进制就是256位,而且只有123能得到这个哈希。(理论上,其他字符串也有可能得到这个哈希,但是概率极低,可以近似认为不可能发生。)

因此,就有两个重要的推论。

推论1:每个区块的哈希都是不一样的,可以通过哈希标识区块。

推论2:如果区块的内容变了,它的哈希一定会改变。

哈希的不可修改性

区块与哈希是一一对应的,每个区块的哈希都是针对"区块头"(Head)计算的。也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。

Hash = SHA256( 区块头 )

上面就是区块哈希的计算公式,SHA256是区块链的哈希算法。注意,这个公式里面只包含区块头,不包含区块体,也就是说,哈希由区块头唯一决定。

前面说过,区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。

这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面的区块还能连到它(因为下一个区块包含上一个区块的哈希),该人必须依次修改后面所有的区块,否则被改掉的区块就脱离区块链了。由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。

正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。

关于哈希运算和区块链的区别和哈希运算在区块链中的作用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

评论