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

2024-05-14

1. 区块链中的哈希算法是什么?

哈希算法是什么?

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

2. 区块链技术中的哈希算法是什么?

1.1. 简介
计算机行业从业者对哈希这个词应该非常熟悉,哈希能够实现数据从一个维度向另一个维度的映射,通常使用哈希函数实现这种映射。通常业界使用y = hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。区块链中哈希函数特性:
函数参数为string类型;
固定大小输出;
计算高效;
collision-free 即冲突概率小:x != y => hash(x) != hash(y)隐藏原始信息:例如区块链中各个节点之间对交易的验证只需要验证交易的信息熵,而不需要对原始信息进行比对,节点间不需要传输交易的原始数据只传输交易的哈希即可,常见算法有SHA系列和MD5等算法
1.2. 哈希的用法
哈希在区块链中用处广泛,其一我们称之为哈希指针(Hash Pointer)哈希指针是指该变量的值是通过实际数据计算出来的且指向实际的数据所在位置,即其既可以表示实际数据内容又可以表示实际数据的存储位置。下图为Hash Pointer的示意图
HashPointer在区块链中主要有两处使用,第一个就是构建区块链数据结构。了解区块链的读者应该知道区块链数据结构由创世区块向后通过区块之间的指针进行连接,这个指针使用的就是图示的HashPointer.每个区块中都存储了前一个区块的HashPointer。这样的数据结构的好处在于后面区块可以查找前面所有区块中的信息且区块的HashPointer的计算包含了前面区块的信息从而一定程度上保证了区块链的不易篡改的特性。第二个用处在于构建Merkle Tree. Merkle Tree的各个节点使用HashPointer进行构建,关于区块链数据结构以及MerkleTree的内容我们在后续文章中进行进一步介绍。
哈希还在其他技术中有所应用例如:交易验证以及数字签名等等。
2.加密算法
2.1简述
加密简单而言就是通过一种算法手段将对原始信息进行转换,信息的接收者能够通过秘钥对密文进行解密从而得到原文的过程。按照加密方和解密方秘钥相同与否可以将加密算法大致分为三种子类型:
对称加密对称加密的加密解密方使用相同的秘钥,这种方式的好处在于加解密的速度快但是秘钥的安全分发比较困难,常见对称加密算法有DES,AES,...
非对称加密非对称加密体系也称为公钥体系,加解密时加密方拥有公钥和私钥,加密方可以将公钥发送给其他相关方,私钥严格自己保留。例如银行的颁发给个人用户的私钥就存储在个人的U盾里;非对称加密中可以通过私钥加密,他人能够使用公钥进行解密,反之亦然;非对称加密算法一般比较复杂执行时间相对对称加密较长;好处在于无秘钥分发问题。常见的其他非对称加密算法有RSA,ECC,区块链中主要使用ECC椭圆曲线算法。
对称加密与非对称加密的结合这种方式将加密过程分为两个阶段,阶段一使用非对称加密进行秘钥的分发使得对方安全地得到对称加密的秘钥,阶段二使用对称加密对原文进行加解密。
2.2 数字签名
数字签名又称之为公钥数字签名,是一种类似于写在纸上的物理签名。数字签名主要用于数据更改的签名者身份识别以及抗抵赖。数字签名包含三个重要特性:
只有自己可以签署自己的数字签名,但是他人可以验证签名是否是你签发;
数字签名需要和具体的数字文档绑定,就好比现实中你的签名应该和纸质媒介绑定;
数字签名不可伪造;依赖非对称加密机制可以较容易实现上述三种特性。首先,需要生成个人的公私钥对:(sk, pk) := generateKeys(keysize),sk私钥用户自己保留,pk公钥可以分发给其他人其次,可以通过sk对一个具体的message进行签名:sig := sign(sk, message) 这样就得到了具体的签名sig最后,拥有该签名公钥的一方能够进行签名的验证:isValid := verify(pk, message, sig)在区块链体系中每一条数据交易都需要签名,在比特币的设计过程中直接将用户的公钥来表征用户的比特币地址。这样在用户发起转账等比特币交易时可以方便的进行用户交易的合法性验证。
2.3 数字证书和认证中心
2.3.1 数字证书(Digital Certificate)
数字证书又称“数字身份证”、“网络身份证”是经认证中心授权颁发并经认证中心数字签名的包含公开秘钥拥有者及公开秘钥相关信息的电子文件,可以用来判别数字证书拥有者身份。数字证书包含:公钥、证书名称信息、签发机构对证书的数字签名以及匹配的私钥证书可以存储在网络中的数据库中。用户可以利用网络彼此交换证书。当证书撤销后,签发此证书的CA仍保留此证书的副本,以备日后解 决可能引起的纠纷。
2.3.2 认证中心(Certificate Authority)
认证中心 一般简称CA, CA一般是一个公认可信的第三方机构,其作用主要是为每个用户颁发一个独一无二的包含名称和公钥的数字证书。
2.4 常见加密算法的对比

3. 区块链哈希算法是什么?

哈希算法也被称为“散列”,是区块链的四大核心技术之一。是能计算出一个数字消息所对应的、长度固定的字符串(又称消息摘要)的算法。由于一段数据只有一个哈希值,所以哈希算法可以用于检验数据的完整性。在快速查找和加密算法的应用方面,哈希算法的使用非常普遍。
在互联网时代,尽管人与人之间的距离更近了,但是信任问题却更严重了。 现存的第三方中介组织的技术架构都是私密而且中心化的,这种模式永远都无法从根本上解决互信以及价值转移的问题。因此,区块链技术将会利用去中心化的数据库架构完成数据交互信任背书,实现全球互信的一大跨步。在这一过 程中,哈希算法发挥了重要作用。
散列算法是区块链中保证交易信息不被篡改的单向密码机制。区块链通过散列算法对一个交易区块中的交易进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。区块链的散列值能够唯一而准确地标识一个区块。在验证区块的真实性时,只需要简单计算出这个区块的散列值,如果没有变化就 意味着这个区块上的信息是没有被篡改过的。

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

区块链哈希算法是什么?

4. 区块链中哈希算法的特点是什么?

哈希算法可以作为一个很小的计算机程序来看待,无论输入数据的大小及类型如何,它都能将输入数据转换成固定长度的输出。哈希算法在任何时候都只能接受单条数据的输入,并依靠输入数据创建哈希值。
根据最终产生的哈希值的长度不同,有不同的哈希算法。
在区块链中使用的为加密哈希算法,其特点有:
1、能够为任何类型的数据快速创建哈希值
2、确定性
3、伪随机
4、单向函数
5、防碰撞

5. 区块链中的哈希算法的作用是什么?

区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。
金窝窝集团分析其哈希算法的作用如下:
区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都接获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。

区块链中的哈希算法的作用是什么?

6. 区块链中哈希函数有什么用?

哈希函数,又叫散列函数、散列算法,是一种从任何一种数据中创建小的数字“指纹”(也叫做摘要)的方法。什么意思呢?就是说,你输入任何长度、任何内容的数据,哈希函数输出固定长度、固定格式的结果,这个结果类似于你输入数据的指纹。只要输入发生变化,那么指纹一定会发生变化。不同的内容,通过哈希函数得到的指纹不一样。这就是哈希函数。

在分布式账本里,为了保证数据完整性,会采用哈希值进行校验。如,一笔交易、一页账本(也就是区块的概念),用了哈希之后生成摘要,意味着整个区块交易信息无法进行篡改(即无法在篡改数据之后保持摘要不变)。
区块链原始的定义或狭义的理解就是区块+链的形式,这个链是通过哈希链接起来,每一个区块可能都有很多交易,整个区块又可以通过哈希函数产生摘要信息,然后规定每一个区块都需要记录上一个区块的摘要信息,这样一来所有区块都可以连成一条链。
如果改了历史中某一个区块的数据,意味着这个区块摘要值(即哈希值)会改变,那么下一个区块中记录的上一个区块的哈希也得做相应的修改,以此类推,也就是说如果要修改历史记录的话,要从那一个点开始往后所有记录都要修改才能保证账本的合法性,哈希函数就提高了账本篡改的难度。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

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

​     小白如何秒懂区块链中的哈希计算
  
 当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“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。
  
 需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。
  
 
  
                                          
 **总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。

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

8. 哈希图会取代区块链?

 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
   郑重声明
   本文里还未提到哈希图的缺点,导致给人一种推广软文的感觉。本文只是纯粹科普一下不同的公开记账本实现方式,并非诱导大家投资,我个人不参加一级市场的私募,风险承担不起,也不鼓吹大家参与。个中风险,自己衡量,自己把握。
最新文章
热门文章
推荐阅读