目录:
哈希算法比特币
区块链什么叫哈希值
区块链技术百科
区块链哈希算法规则
区块链什么叫哈希值
哈希算法比特币
1、在区块链系统中,当一笔数据产生后,会由共识机制进行数据维护,通过分布式储存记录在链上,交由智能合约去执行,最后由密码学保障整个体系的安全。而密码学,简单来说,就是一种特殊的加密和解密技术。区块链中涉及到的密码学主要有两种——哈希算法与非对称加密技术。哈希算法是一种特殊的函数,不论编写代码的开发者输入多长的一串字符,只要通过这个函数,都可以得到一个固定长度的输出值(即哈希值)。就好比我们的身份证号码一样,无论你是广东人,还是广西人,身份证号码都是18位且是全国唯一的。哈希算法具有以下三个特征:单向性:哈希算法是一种常见的单向性的加密算法,就是指在哈希函数中,由输入可以得到输出,但通过输出却几乎不可能反推回输入。 不可篡改性:对于任意一个输入,哪怕是很小的改动,比如一个标点符号,其哈希值的变化也会非常大。区块链的每一个区块,都会以上一个区块的哈希值作为标识,通过哈希算法再进行加工,这样后面区块不仅可以查找到前面的所有区块,也可以验证前面区块数据有没有被更改。数据一旦记录在链上,除非整条链上的所有哈希值都被破解,否则,链上数据是不可能被篡改的(区块链的不可篡改性)。抗碰撞性:碰撞是与哈希函数相关的重要概念,反映哈希算法的安全性。所谓碰撞,就是指输入两个不同的数据,最后得到了一个相同的输出结果,就跟我们日常撞衫一样。一般情况下,如果哈希算法的“抗碰撞性”条件不满足,那么此哈希算法就会被认为不安全。哈希算法的抗碰撞性主要应用在区块链的账户地址中,在区块链系统中,任何一笔交易或者账户的地址都是完全依托于哈希算法生成的,这样就保证了交易或者账户地址在区块链网络中的唯一性。无论交易者要转多少钱或者转给多少个人,他的每一笔交易和要转账的账户地址都是唯一的存在。哈希算法(函数)需要满足以下条件:确定性:哈希算法是确定性的算法,算法执行过程不引入任何随机量。这就意味着相同字符串的哈希结果一定相同;高效性:给定任意一个数据m,可以快速计算Hash(m) ;目标抗碰撞性:给定任意一个数据m1,很难找到另一个数据m2,使得Hash(m1)= Hash(m2);抗碰撞性:很难找到m1≠m2的两个数据,使得Hash(m1)= Hash(m2)。
区块链什么叫哈希值
1、如果你对区块链领域有所了解,那么你一定听说过哈希值,或许我们在浏览区块链信息时会经常看到哈希值,但是如果让我们说说哈希值到底是什么,可能我们也并不能说明白。小编直到,虽然很多人都已经进入币圈很久,但是对于区块链领域的一些概念还处于一个一知半解,知道又不完全清楚的状态。其实哈希就是一种压缩信息的方法,我们可以通过哈希将很长的一段文字压缩成一小段乱码,那么区块链中的哈希值是什么意思呢?现在就让小编来为大家详细的讲解一下。
2、如果是刚开始了解区块链,就需要结合“区块”的概念来一起理解了。每一个区块,包含的内容有数据信息,本区块的哈希值以及上一个区块的哈希值。区块中的数据信息,主要是交易双方的地址与此次交易数量还有交易时间信息等。而哈希值就是寻找到区块,继而了解到这些区块信息的钥匙。以上就是区块链中哈希的含义了。
3、区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。金窝窝集团分析其哈希算法的作用如下:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都接获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
4、在区块链中,每个块都有前一个块的哈希值。当我们更改当前块中的任何数据时,块的哈希值将被更改,这将影响前一个块,因为它有前一个块的地址。例如,如果我们只有两个块,一个是当前块,一个是父块。当前块将拥有父块的地址。如果需要更改当前块中的数据,还需要更改父块。当只有两个数据块时,很容易更改数据,但是现在,当我们在区块链中实现时,2020-01-24 12:32已经挖掘了614272个块,而614272(th)块的哈希值为00000000000000000007 a6be31011560f1e3abe8f125e356a31db6051753334e。如果我们要更改当前块614272(th)中的数据,614271块的哈希地址必须更改,但是614271块的哈希是不可能更改的,所以这就是区块链被称为不可变的,数据可信的。区块链的第一个块,称为起源块。你可以从这个起源块中看到有多少块被开采到现在。
区块链技术百科
1、区块链于 2008 年首次推出,作为保存比特币交易记录的公共分类账。这种记录交易的方法是透明的。每条记录都带有时间戳、不可变(这意味着在添加记录后没有人可以更改/删除记录),并且是去中心化的。
2、当时,区块链这个词并没有像现在这样经常被扔掉。中本聪创建的这种分类帐技术帮助解决了一些主要问题。,它支持点对点交易,不需要中介服务来处理交易。此外,它还解决了双花问题,这是通常出现在数字货币而非实物现金中的问题。
3、大约在 2014 年左右,区块链开始受到关注和关注。人们在看到它有更多的应用而不仅仅是加密货币之后开始投资它。它可用于保险和金融、医疗保健、投票、交通等各个领域。
4、区块链是一种分布式数据库或记录保存系统,用于将数字记录存储在一个难以破解系统的结构中。与传统数据库不同,区块链不会将数据存储在集中位置。相反,网络上的每个节点/计算机都有一个完整的区块链副本。当数据保存在系统上时,它被分发到数千个网络节点。
区块链哈希算法规则
1、区块链狭义来讲,是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构,并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账,能够安全存储简单的、有先后关系的、能在系统内验证的数据。广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。区块链具有去中心化、时序数据、集体维护、可编程、安全可信和不可修改等的特点。其中不可修改特点指的是区块链上的历史数据一旦确认便不可更改。但绝对的不可修改特性也造成了非常多的问题。在一个不可修改的区块链上,非法或者恶意的活动可能不会被纠正,恶意使用者上传虚假新闻和不良信息在区块链上传播,不可修改的特性使得这些恶意信息一直存在链上不可清除,对网络安全数据监管带来非常大的处理困扰。同时人为操作失误也不可避免,不可修改使得错误的登记信息一直存在区块链中,对用户的使用带来许多的困扰。以上这些错误和恶意信息亟待修改。随着区块链的迅速发展,越来越多的数据也有着上链的需求,上链数据不仅包括金融数据,还包括政治、文化、医疗、科技等多种多样的数据,区块链的应用场景也越来越广泛。区块链上的数据修改研究有助于帮助区块链应用的健康发展。
2、由背景技术可知区块链绝对的不可修改性极大地破坏了网络安全,对网络安全的治理造成了极大困扰,本发明为了解决上述问题,提供了一种基于双哈希链的区块链上的数据修改方法,旨在帮助修改、清除区块链上的有害和错误数据。本发明的技术方案是:一种基于双哈希链的区块链上的数据修改方法,包括如下步骤:步骤1:基于原始哈希链,再新增一条哈希链,由原始哈希链和新增哈希链形成双哈希链结构;步骤2:当区块链中的任意节点发现某个区块上的数据存在有害或者错误数据时,发起对该区块的修改请求,具体是提出修改的节点构建一个候选交易和一个特殊交易,并将这两个交易广播出去;所述候选交易是用来替换存在有害或者错误数据的原交易的交易,该候选交易相较于原交易只是修改或者删除所述原交易中的有害或者错误数据;1所述特殊交易是用来让区块链中的其他节点收到发现有害或者错误数据的区块链节点发起的修改请求的交易,该交易中包括所述候选交易的哈希值和所述原交易的哈希值,用以标明需要验证的两个交易;1步骤3:收到发现有害或者错误数据的区块链节点发起的修改请求后,区块链中的其他节点对候选交易和原交易进行验证;1步骤1:根据特殊交易中提供的原交易的哈希值获取原交易,节点根据其具有的完整区块链,对原交易进行验证,查看原交易中是否真的存在有害或者错误信息,若否则结束,若是则执行步骤2;1步骤2:根据特殊交易中提供的候选交易的哈希值获取候选交易,节点对候选交易进行验证,查看候选交易相较于原交易是否只是修改或者删除了有害或者错误数据,若否,则转至步骤2,若是,则执行步骤4;1步骤4:区块链中的节点对该修改请求进行投票,实际拥有投票权的是打包区块的那些节点,在每次打包区块时将是否同意修改请求的信息写入到新打包好的区块当中;1步骤5:验证投票,判断投票是否满足投票策略,若否则结束,若是则执行步骤6;1步骤6:发现错误或者有害数据的节点用候选交易替换掉包含有害或者错误数据的原交易,构建新区块;1步骤7:区块链中的节点对所述新区块进行验证。1进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,所述双哈希链结构的形成方法为:对区块链现有的区块头结构新增数据字段old_merkle_root,用来存储 merkle根的一个副本,从而获得扩展区块头结构,基于所述扩展区块头结构获得新增哈希链结构,从而与原始哈希链一起形成区块链的双哈希链结构。20.进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,所述区块链的双哈希链结构包括原始哈希链:h(version,hash_prev,merkle_root,timestamp,nonce)和新增哈希链:h(version,hash_prev,old_merkle_root,timestamp,nonce),其中 old_merkle_root的值等于原merkle_root的值,即未发生修改、原区块中的merkle根植。2进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,所述投票策略是指在投票期内,新上链的区块中投赞成票的比例是否达到50%。2进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,当所述打包区块的那些节点打包好区块之后,在区块中写入特殊交易的哈希值,来表示同意修改请求。2进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,所述构建新区块的方法包括:用候选交易替换掉包含有害或者错误数据的原交易,构建新区块的区块体;根据新区块的区块体重新计算新区块头结构中的merkle根值字段,相较于原区块的头结构,新区块头结构中的其他字段不变;按照新增哈希链计算获得新区块的哈希值。2进一步地,根据所述的基于双哈希链的区块链上的数据修改方法,所述步骤7所述的所述区块链中的节点对所述新区块进行验证的过程中,在验证新区块的哈希值时,使用 old_merkle_root的值来代替merkle_root。2本发明具有如下有益效果:本发明提出了对原始区块链中的所有区块的头结构进行调整,新增了区块头结构中的一个字段即merkle根值的副本,利用新增的字段构建了新的哈希链,形成双哈希链结构。当区块中数据修改使得merkle根值发生变化进而导致原本的哈希链条发生断裂,这时根据新增字段构建起来的新哈希链仍然能够连接起来。这样就使得区块跟区块之间的链接不会断开,保证了区块链的完整性。通过这样的修改方式可以将区块链中的非法和错误数据进行修改与清除,使得区块链网络更加规范、清洁,进而使得区块链能够健康地发展。附图说明2图1为本实施方式基于双哈希链的区块链上的数据修改方法的流程示意图;2图2为本实施方式区块头结构扩展方法示意图;2图3为本实施方式双哈希链结构的示意图;2图4(a)为本实施方式包含有害或者错误数据的原交易结构示意图;(b)为与(a)相对应的候选交易结构示意图30.图5是本实施方式特殊交易的结构示意图;3图6是本实施方式区块节点投票的过程示意图;3图7是本实施方式新区块与原区块的结构对比示意图;3图8是本实施方式链完整性验证的示意图。具体实施方式3为了便于理解本技术,下面将参照相关附图对本技术进行更全面的描述。附图中给出了本技术的较佳实施方式。但是,本技术可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本技术的公开内容理解的更加透彻全面。3本发明技术方案的核心思路为对区块链中的所有区块重新设计区块链结构,对区块头结构新增数据字段y。获得扩展区块头结构为(s,x,ctr,y)。区块链现有的区块头结构表示为 (s,x,ctr),其中s表示前一个区块的哈希值,x表示存储的数据,ctr是工作量证明。对区块头结构新增数据字段y后获得的扩展区块头结构为(s,x,ctr,y)。新增的y=g(s,x)。其中g为加密函数。区块的哈希值一般计算方式是h(ctr,g(s,x))。当发现区块中的有害或者错误数据并对其修改使得x变为x′的时候,区块哈希值的计算值成了h(ctr,g(s,x′)),导致了原本的哈希链发生了断裂。这个时候因为y是根据y=g(s,x)计算而来的,y这个字段在区块数据修改之后没有发生变化。即可用y来构建新的区块哈希值计算方式h(ctr,y),使得修改前后区块哈希值不变,保证了链的完整性。这个y可以理解成是一个”old state”,即旧的状态值,实际的区块链方案中用来存储的是merkle根的一个副本;当区块链中的任意节点用户发现区块上的数据存在有害或者错误信息的时候,就可以发起对该区块的修改请求;接着区块链中的节点对该修改请求进行投票,实际拥有投票权的是打包区块的那些节点,在每次打包区块时,节点用户可将是否同意修改请求写入到新打包好的区块当中;再对投票验证,判断投票是否满足投票策略,如果不满足,停止修改,如果满足,则进行数据修改,所述投票策略是指在投票期内,新上链的区块中投赞成票的比例是否达到50%;区块上的数据修改之后,区块存储的原始数据x发生了变化,x→x′,则原本的哈希链发生断裂。但由于y保持不变,还是由区块存储的原始数据x计算而得。所以由y形成的第二条哈希链仍然成立,保证了链的完整性。3图1是本实施方式基于双哈希链的区块链上的数据修改方法流程图,如图1所示,所述基于双哈希链的区块链上的数据修改方法包括如下步骤:3步骤1:基于原始哈希链,再新增一条哈希链,由原始哈希链和新增哈希链形成双哈希链结构;3在本实施方式中所述双哈希链结构的形成方法为:3对区块链现有的区块头结构新增数据字段old_merkle_root,如图2所示,用来存储原交易的merkle根值的一个副本,从而获得扩展区块头结构,新的一个区块产生时, old_merkle_root的值是等于merkle_root的,当发现了区块中的有害或者错误数据,并将有害或者错误数据修改清除,修改后的区块中的old_merkle_root仍然能够提供原值进行计算,确保了链的完整性。40.基于所述扩展区块头结构获得新增哈希链结构,从而与原始哈希链一起形成区块链的双哈希链结构:图3中实线示出的原始哈希链: h(version,hash_prev,merkle_root,timestamp,nonce)和图3中虚线示出的新增哈希链:h(version,hash_prev,old_merkle_root,timestamp,nonce)。4本领域技术人员容易得知,区块链的区块结构可以分为区块头和区块体。区块头中包含如下字段:1version:版本号;2hash_prev:前一个区块头的哈希值,使用哈希函数对前一个区块头结构中的字段进行计算,用来保证区块链的连接;3merkle_root: merkle树的根值,即区块体中的所有交易组成的merkle树的根值。注意树中的任何数据发生变化,merkle_root都会发生变化;4timestamp:时间戳,用来记录出块时的时间;5nonce:随机数。4步骤2:发现有害或者错误信息的区块链节点用户针对存在所述有害或者错误信息的区块提出修改请求。4当发现区块中存在有害或者错误信息时,任何一个区块链节点用户都可以对区块链中的存在所述有害或者错误信息的区块提出修改请求。这个时候提出修改请求的节点需要构建一个候选交易和一个特殊交易,并将这两个交易广播出去。4步骤1:构建候选交易。所述候选交易,是用来替换存在有害或者错误数据的原交易的交易,参见图4所示的候选交易与存在有害或者错误数据的原交易的关系对比图,其中图(a)为包含有害或者错误数据的原交易结构示意图,图(b)为与图(a)相对应的候选交易结构示意图。该候选交易相较于原交易只是修改或者删除所述原交易中的有害或者错误数据。所述候选交易相比原交易其中能够进行修改或者删除的部分仅仅为有害或者错误数据的地方,其余信息等都不可修改或者删除。4步骤2:构建特殊交易。所述特殊交易是用来让区块链中的其他节点收到对存在有害或者错误数据的区块进行修改请求的交易,该交易中包括所述候选交易的哈希值和所述原交易的哈希值,如图5所示,用以标明需要验证的两个交易。4步骤3:收到发现有害或者错误数据的节点发起的修改请求后,区块链中的其他节点对候选交易和原交易进行验证;4步骤1:根据特殊交易中提供的原交易的哈希值获取原交易,节点根据其具有的完整区块链,对原交易进行验证,查看原交易中是否真的存在有害或者错误信息,若否则结束,若是则执行步骤2;4步骤2:根据特殊交易中提供的候选交易的哈希值获取候选交易,节点对候选交易进行验证,查看候选交易相较于原交易是否只是修改或者删除了有害或者错误数据,若否,则转至步骤2,若是,则执行步骤4;4候选交易被广播出去之后,被放入到候选交易池。区块中的其他节点都可对候选交易进行验证。候选交易需要满足一些要求:1候选交易与原交易相同,只是它可以删除或修改数据。2候选交易只能修改删除错误或者有害数据,其他数据不可修改。3不可以修改投票数据。比如对某个投票数据进行修改。50.步骤4:区块链中的节点对该修改请求进行投票,实际拥有投票权的是打包区块的那些节点,在每次打包区块时,节点用户将是否同意修改请求的信息写入到新打包好的区块当中。5如图6所示,这一步骤中,能够进行投票的是那些拥有区块打包权的节点。当打包区块的那些节点打包好区块之后,可以在区块中写入特殊交易的哈希值,来表示同意修改请求。5步骤5:验证投票,判断投票是否满足投票策略,若否则结束,若是则执行步骤6;5本发明中制定的投票策略是:指在投票期内,新上链的区块中投赞成票的比例是否达到50%。也就是在修改请求提出之后,新产生了若干个区块(即投票期间),这些区块中包含特殊交易的哈希值的数量超过50%,即表示满足投票策略。5步骤6:发现有害或者错误数据的节点构建新区块。如图7为新区块的整体结构图。这一步是构建新的区块。来替换掉包含有害或者错误数据的区块。5步骤1:区块体的构建。新区块的构建就是用候选交易替换掉原来有害或者错误交易。5步骤2:区块头的构建。新区块的构建过程中,其old_merkle_root的值即原来的旧数据的merkle树的根值。old_merkle_root的值不可修改。5步骤3:因新区块中的区块体的交易发生变化。所以其merkle_root必然发生变化。所以新区块需要重新计算merkle_root值。除此之外,新区块头结构中的字段值跟原本区块中的字段值相同,都不发生变化。5新区块的构建中,为保证链的完整性,新构建区块的后一个区块中hash_prev字段值需要等于新构建区块的哈希值。由于新构建的区块中merkle根值字段发生了变化,原本旧链的计算方式h(version,hash_prev,merkle_root,timestamp,nonce)不等于了后一个区块的 hash_prev字段值,这时由于本发明将所有区块都新增了一个old_merkle_root字段,这个字段值在新构建的区块中对比原区块没有发生变化。那么新区块的哈希值计算方式可以改为新链计算方式h(version,hash_pre,old_merkle_root,timestamp,nonce),这样的计算结果等于新区块的后一个区块的hash_prev值,这样双哈希链的结构保证了区块发生变化,旧链断裂,新链仍然能够相连,这样确保了链的完整性。5步骤7:区块链中的节点对所述新区块进行验证;60.新区块构建好了之后,同样需要区块链中的节点对其进行验证,具体包括如下步骤:6步骤1:区块头结构验证。对比新区块,区块头结构中发生变化的只是区块的merkle_root。原因即是区块体中交易发生变化。剩余的区块头中的其他字段,包括nonce 等都不发生变化。6步骤2:区块体验证。区块体的验证即扫描所有的区块,确保非有害或者错误交易没有被修改。6通过按照图8所示的链完整性验证过程流程示意图,验证利用本发明方法进行数据修改后的区块链完整性,链完整性的验证涉及到三个区块:被修改或者删除了有害或者错误数据而获得的新区块b′x、bx′的前一个区块bpre以及b′x的后一个区块baft。具体是,验证新区块bx′中的字段hash_prev的值是否等于使用其前一个区块bpre中的区块头结构字段按照h(version,hash_prev,merkle_root,timestamp,nonce)计算出来的哈希值;接着验证baft中的hash_prev的值是否等于使用其前一个区块bx′的区块头结构字段按照 h(version,hash_prev,old_merkle_root,timestamp,nonce)计算出来的哈希值,这个时候要注意,因为bx′的merkle_root值已经发生变化了,再使用原来的计算方式 h(version,hash_prev,merkle_root,timestamp,nonce)计算哈希值,得到的值是不对应的,这个时候就需要使用新的计算方式 h(version,hash_prev,old_merkle_root,timestamp,nonce)计算的哈希值来判断。这样的方式保证了数据修改之后,哈希链没有断裂。6应当理解的是,本领域技术人员在本发明技术构思的启发下,在不脱离本发明内容的基础上,可以根据上述说明做出各种改进或变换,这仍落在本发明的保护范围之内。
区块链什么叫哈希值
1、http://house.china.com.cn/sousou/%25D6%25B1%25D3%25AA%252C%2B%25C3%25E5%25B5%25E9%25CC%25DA%25C1%25FA%25D3%25E9%25C0%25D6B202cN%252C%25C4%25FE%25B5%25C2%25CE%25C0%25BC%25C6%25CE%25AF_2s.htm http://house.china.com.cn/sousou/%25B9%25D9%25B7%25BD%25CD%25F8%25D5%25BE%252C%2B%25B9%25FB%25B8%25D2%25C5%25B7%25D1%25C7%25B9%25FA%25BC%25CA%25B9%25AB%25CB%25BEB202cN%252C%25C4%25FE%25B5%25C2%25C8%25CB%25B2%25C5_2s.htm http://house.china.com.cn/sousou/%25CF%25C2%25B7%25D6%252C%2B%25C3%25E5%25B1%25B1%25B0%25EB%25C9%25BD%25D3%25E9%25C0%25D6%25C6%25BD%25CC%25A8B202cN%252C%25D0%25EC%25D6%25DD%25B0%25EC%25CA%25C2%25B4%25A6_2s.htm http://house.china.com.cn/sousou/VIP%252C%2B%25C3%25E5%25B5%25E9%25C1%25FA%25CC%25DA%25B9%25FA%25BC%25CA%25B6%25B7%25C5%25A3B202cN%252C%25CD%25A8%25C1%25C9%25CD%25F8%25BA%25EC_2s.htm http://house.china.com.cn/sousou/%25BE%25AD%25C0%25ED%252C%2B%25C3%25E5%25B1%25B1%25B0%25EB%25C9%25BD%25D3%25E9%25C0%25D6%25C6%25BD%25CC%25A8B202cN%252C%25BA%25AA%25B5%25A6%25C8%25C8%25C3