当前位置:首页 > 重庆美食 > 正文

区块链基本技术父哈希(区块链是一种去中心化,利用哈希函数)

本篇文章给大家谈谈区块链基本技术父哈希,以及区块链是一种去中心化,利用哈希函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

区块链技术的组成元素架构?

随着互联网岁散的不断租返发展,越来越多的人都了解到了关于区块链技术的一些特点和使用情况,今天我们就来介绍一下,区块链的一些元素组成都有哪些。

区块链的组成

区块链由区块和链组成。每一个区块包含三个元素:数据、哈希值、前一区块的哈希值。

区块的第一个元素是数据。区块中所保存的数据与区块链的类型有关。例如,比特币区块链中的区块保存了相关的交易信息,包括卖家,买家,以及交易比特币的数量。

区块的第二个元素是哈希值。每个区块包含了一个哈希值,这个哈希值是的,它用来标识一个区块和它所包含的所有内容。一旦某个区块被创建,它的哈希值就相对应的被计算出来了。改变区块中的某些内容会使得哈希值改变。所以换句话说:当你想要检测区块中内容的改变时,哈希值对你就很有帮助。如果一个区块的指纹改变了,那它就再也不是之前的区块了。

区块的第三个元素是前一个区块的哈希值。这个元素使得区块之间可以形成链接,并且能够使得区块链十分的弊雀饥安全。

举个例子***设我们有一条区块链包含3个区块。每个区块包含了一个自己的哈希值以及前一个区块的哈希值。3号区块指向2号区块,2号区块又指向1号区块。但是1号区块有点特殊,它不能指向前一个区块,因为它是第一个区块。我们把1号区块叫做创世区块。

那么,现在我们***设你篡改了第二个区块。这将导致第二个区块的哈希值改变,那么3号区块存储的数据就是错误的、非法的。而3号区块存储的数据一旦是非法的,后面的区块也一定是非法的。

所以如果一个人想要篡改区块链中任何一个区块,它必须修改这个区块以及这个区块之后的所有区块。这将是一个很繁重的任务。

区块链的工作量证明

但是,仅仅使用哈希值的方法不足以防止用户篡改区块。因为现在的计算机运算速度已经足够强大,并且能够每秒计算成千上万的哈希值。j***a课程建议你完全可以篡改一个区块并且重新计算其他的区块的哈希值,这样就使得你的区块再次变得合法。

区块链密码算法是怎样的?

区块链作为新兴技术受到越来越广泛的关注,是一种传统技术在互联网时代下的新的应用,这其中包括分布式数据存储技术、共识机制和密码学等。随着各种区块链研究联盟的创建,相关研究得到了越来越多的资金和人员支持薯嫌陪。区块链使用的Hash算法、零知识证明、环签名等密码算法:

Hash算法

哈希算法作为区块链基础技术,Hash函数的本质是将任意长度(有限)的一组数据映射到一组已定义长度的数据流中。若此函数同时满足:

(1)对任意输入的一组数据Hash值的计算都特别简单;

(2)想要找到2个不同的拥有相同Hash值的数据是计算困难的。

满足上述两条性质的Hash函数也被称为加密Hash函数,不引起矛盾的情况下,Hash函数蠢数通常指的是加密Hash函数。对于Hash函数,找到使得被称为一次碰撞。当前流行的Hash函数有MD5,SHA1,SHA2,SHA3。

比特币使用的是SHA256,大多区块链系统使用的都是SHA256算法。所以这里先介绍一下SHA256。

1、 SHA256算法步骤

STEP1:附加填充比特。对报文进行填充使报文长度与448模512同余(长度=448mod512),填充的比特数范围是1到512,填充比特串的最高位为1,其余位为0。

STEP2:附加长度值。将用64-bit表示的初始报文(填充前)的位长度附加在步骤1的结果后(低位者歼字节优先)。

STEP3:初始化缓存。使用一个256-bit的缓存来存放该散列函数的中间及最终结果。

STEP4:处理512-bit(16个字)报文分组序列。该算法使用了六种基本逻辑函数,由64 步迭代运算组成。每步都以256-bit缓存值为输入,然后更新缓存内容。每步使用一个32-bit 常数值Kt和一个32-bit Wt。其中Wt是分组之后的报文,t=1,2,...,16 。

STEP5:所有的512-bit分组处理完毕后,对于SHA256算法最后一个分组产生的输出便是256-bit的报文。

作为加密及签名体系的核心算法,哈希函数的安全***关整个区块链体系的底层安全性。所以关注哈希函数的研究现状是很有必要的。

2、 Hash函的研究现状

2004年我国密码学家王小云在国际密码讨论年会(CRYPTO)上展示了MD5算法的碰撞并给出了第一个实例(Collisions for hash functions MD4, MD5, H***AL-128 and RIPEMD,rump session of CRYPTO 2004,How to Break MD5 and Other Hash Functions,EuroCrypt 2005)。该攻击复杂度很低,在普通计算机上只需要几秒钟的时间。2005年王小云教授与其同事又提出了对SHA-1算法的碰撞算法,不过计算复杂度为2的63次方,在实际情况下难以实现。

2017年2月23日谷歌安全博客上发布了世界上第一例公开的SHA-1哈希碰撞实例,在经过两年的联合研究和花费了巨大的计算机时间之后,研究人员在他们的研究网站SHAttered上给出了两个内容不同,但是具有相同SHA-1消息摘要的PDF文件,这就意味着在理论研究长期以来警示SHA-1算法存在风险之后,SHA-1算法的实际攻击案例也浮出水面,同时也标志着SHA-1算法终于走向了生命的末期。

NIST于2007年正式宣布在全球范围内征集新的下一代密码Hash算法,举行SHA-3竞赛。新的Hash算法将被称为SHA-3,并且作为新的安全Hash标准,增强现有的FIPS 180-2标准。算法提交已于2008年10月结束,NIST 分别于2009年和2010年举行2轮会议,通过2轮的筛选选出进入最终轮的算法,最后将在2012年公布获胜算法。公开竞赛的整个进程仿照高级加密标准AES 的征集过程。2012年10月2日,Keccak被选为NIST竞赛的胜利者,成为SHA-3。

Keccak算法是SHA-3的候选人在2008年10月提交。Keccak***用了创新的的“海绵引擎”散列消息文本。它设计简单,方便硬件实现。Keccak已可以抵御最小的复杂度为2n的攻击,其中N为散列的大小。它具有广泛的安全边际。目前为止,第三方密码分析已经显示出Keccak没有严重的弱点。

KangarooTwelve算法是最近提出的Keccak变种,其计算轮次已经减少到了12,但与原算法比起来,其功能没有调整。

零知识证明

在密码学中零知识证明(zero-knowledge proof, ZKP)是一种一方用于向另一方证明自己知晓某个消息x,而不透露其他任何和x有关的内容的策略,其中前者称为证明者(Prover),后者称为验证者(Verifier)。设想一种场景, 在一个系统中, 所有用户都拥有各自全部文件的备份, 并利用各自的私钥进行加密后在系统内公开。 ***设在某个时刻,用户Alice希望提供给用户Bob她的一部分文件,这时候出现的问题是Alice如何让Bob相信她确实发送了正确的文件。一个简单地处理办法是Alice将自己的私钥发给Bob,而这正是 Alice不希望选择的策略,因为这样 Bob可以轻易地获取到Alice的全部文件内容。零知识证明便是可以用于解决上述问题的一种方案。零知识证明主要基于复杂度理论,并且在密码学中有广泛的理论延伸。在复杂度理论中,我们主要讨论哪些语言可以进行零知识证明应用,而在密码学中,我们主要讨论如何构造各种类型的零知识证明方案,并使得其足够优秀和高效。

环签名群签名

1、群签名

在一个群签名方案中,一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名。与其他数字签名一样,群签名是可以公开验证的,且可以只用单个群公钥来验证。群签名一般流程:

(1)初始化,群管理者建立群***,生成对应的群公钥(Group Public Key)和群私钥(Group Private Key)群公钥对整个系统中的所有用户公开,比如群成员、验证者等。

(2)成员加入,在用户加入群的时候,群管理者颁发群证书(Group Certificate)给群成员。

(3)签名,群成员利用获得的群证书签署文件,生成群签名。

(4)验证,同时验证者利用群公钥仅可以验证所得群签名的正确性,但不能确定群中的正式签署者。

(5)公开,群管理者利用群私钥可以对群用户生成的群签名进行追踪,并暴露签署者身份。

2、环签名

2001年,Rivest, shamir和Tauman三位密码学家首次提出了环签名。是一种简化的群签名,只有环成员没有管理者,不需要环成员间的合作。环签名方案中签名者首先选定一个临时的签名者***,***中包括签名者。然后签名者利用自己的私钥和签名***中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者***中的成员可能并不知道自己被包含在其中。

环签名方案由以下几部分构成:

(1)密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)。

(2)签名。签名者用自己的私钥和任意n个环成员(包括自己)的公钥为消息m生成签名a。

(3)签名验证。验证者根据环签名和消息m,验证签名是否为环中成员所签,如果有效就接收,否则丢弃。

环签名满足的性质:

(1)无条件匿名性:攻击者无法确定签名是由环中哪个成员生成,即使在获得环成员私钥的情况下,概率也不超过1/n。

(2)正确性:签名必需能被所有其他人验证。

(3)不可伪造性:环中其他成员不能伪造真实签名者签名,外部攻击者即使在获得某个有效环签名的基础上,也不能为消息m伪造一个签名。

3、环签名和群签名的比较

(1)匿名性。都是一种个体代表群体签名的体制,验证者能验证签名为群体中某个成员所签,但并不能知道为哪个成员,以达到签名者匿名的作用。

(2)可追踪性。群签名中,群管理员的存在保证了签名的可追踪性。群管理员可以撤销签名,揭露真正的签名者。环签名本身无法揭示签名者,除非签名者本身想暴露或者在签名中添加额外的信息。提出了一个可验证的环签名方案,方案中真实签名者希望验证者知道自己的身份,此时真实签名者可以通过透露自己掌握的秘密信息来证实自己的身份。

(3)管理系统。群签名由群管理员管理,环签名不需要管理,签名者只有选择一个可能的签名者***,获得其公钥,然后公布这个***即可,所有成员平等。

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

区块链的核心技术是什么?

简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。

或许以上概念过于抽象,我来举个例子,你就好理解了。如晌

你可以想象有 100 台计算机分布在世界各地,这 100 台机器之间的网络是广域网,并且,这 100 台机器的拥有者互相不信任。

那么,我们***用什么样的算法(共识机制)才能够为它提供一个可信任的环境,并且使得:

节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;

每个节点的数据会同步到最新数据,并且会验证最新数据的有效性;

基于少数服从多数的原则,整体节点维护的数据可以客观反映交换历史。

区块链就是为了解决上述问题而产生的技术方案。

二、区块链的核心技术组成

无论是公链还是联盟链,至少需要四个模块组成:P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。

1、P2P 网络协议

P2P 网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、节点发现和维护。

通常我们所用的都是比特币 P2P 网络协议模块,它遵循一定的交互原则。比如:初弯旁次连接到其他节点会被要求按照握手协议来确认状态,在握手之后开始请求 Peer 节点的地址数据以及区块数据。

这套 P2P 交互协议也具有自己的指令***,指令体现在在消息头(Message Header) 的 命令(command)域中,这些命令为上层提供了节点发现、节点获取、区块头获取、区块获取等功能,这些功能都是非常底层、非常基础的功能。如果你想要深入了解,可以参考比特币开发者指南中的 Peer Discovery 的章节。

2、分布式一致性算法

在经典分布式计算领域,我们有 Raft 和 Paxos 算法家族代表的非拜占庭容错算法,以及具有拜占庭容错特性的 PBFT 共识算法。

如果从技术演化的渣闹锋角度来看,我们可以得出一个图,其中,区块链技术把原来的分布式算法进行了经济学上的拓展。

在图中我们可以看到,计算机应用在最开始多为单点应用,高可用方便***用的是冷灾备,后来发展到异地多活,这些异地多活可能***用的是负载均衡和路由技术,随着分布式系统技术的发展,我们过渡到了 Paxos 和 Raft 为主的分布式系统。

而在区块链领域,多***用 PoW 工作量证明算法、PoS 权益证明算法,以及 DPoS 代理权益证明算法,以上三种是业界主流的共识算法,这些算法与经典分布式一致性算法不同的是,它们融入了经济学博弈的概念,下面我分别简单介绍这三种共识算法。

PoW: 通常是指在给定的约束下,求解一个特定难度的数学问题,谁解的速度快,谁就能获得记账权(出块)权利。这个求解过程往往会转换成计算问题,所以在比拼速度的情况下,也就变成了谁的计算方法更优,以及谁的设备性能更好。

PoS: 这是一种股权证明机制,它的基本概念是你产生区块的难度应该与你在网络里所占的股权(所有权占比)成比例,它实现的核心思路是:使用你所锁定代币的币龄(CoinAge)以及一个小的工作量证明,去计算一个目标值,当满足目标值时,你将可能获取记账权。

DPoS: 简单来理解就是将 PoS 共识算法中的记账者转换为指定节点数组成的小圈子,而不是所有人都可以参与记账。这个圈子可能是 21 个节点,也有可能是 101 个节点,这一点取决于设计,只有这个圈子中的节点才能获得记账权。这将会极大地提高系统的吞吐量,因为更少的节点也就意味着网络和节点的可控。

3、加密签名算法

在区块链领域,应用得最多的是哈希算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征。

其中,难题友好性正是众多 PoW 币种赖以存在的基础,在比特币中,SHA256 算法被用作工作量证明的计算方法,也就是我们所说的挖矿算法。

而在莱特币身上,我们也会看到 Scrypt 算法,该算法与 SHA256 不同的是,需要大内存支持。而在其他一些币种身上,我们也能看到基于 SHA3 算法的挖矿算法。以太坊使用了 Dagger-Hashimoto 算法的改良版本,并命名为 Ethash,这是一个 IO 难解性的算法。

当然,除了挖矿算法,我们还会使用到 RIPEMD160 算法,主要用于生成地址,众多的比特币衍生代码中,绝大部分都***用了比特币的地址设计。

除了地址,我们还会使用到最核心的,也是区块链 Token 系统的基石:公私钥密码算法。

在比特币大类的代码中,基本上使用的都是 ECDSA。ECDSA 是 ECC 与 DSA 的结合,整个签名过程与 DSA 类似,所不一样的是签名中***取的算法为 ECC(椭圆曲线函数)。

从技术上看,我们先从生成私钥开始,其次从私钥生成公钥,最后从公钥生成地址,以上每一步都是不可逆过程,也就是说无法从地址推导出公钥,从公钥推导到私钥。

4、账户与交易模型

从一开始的定义我们知道,仅从技术角度可以认为区块链是一种分布式数据库,那么,多数区块链到底使用了什么类型的数据库呢?

我在设计元界区块链时,参考了多种数据库,有 NoSQL 的 BerkelyDB、LevelDB,也有一些币种***用基于 SQL 的 SQLite。这些作为底层的存储设施,多以轻量级嵌入式数据库为主,由于并不涉及区块链的账本特性,这些存储技术与其他场合下的使用并没有什么不同。

区块链的账本特性,通常分为 UTXO 结构以及基于 Accout-Balance 结构的账本结构,我们也称为账本模型。UTXO 是“unspent transaction input/output”的缩写,翻译过来就是指“未花费的交易输入输出”。

这个区块链中 Token 转移的一种记账模式,每次转移均以输入输出的形式出现;而在 Balance 结构中,是没有这个模式的。

详解区块头

    最近一直在看技术向的普及读物,我觉得比看行情有意思。

    在刚开始了解比特币的时候,我就很想要知道一个区块的数据大概是由哪些部分构成,知道了这些构成对我的理解有着莫大的便利性,还好我找到了。

    区块大小和交易计数器很好理解,区块头和交易则稍显复杂。

    区块头包括三组数据:

    第一、父区块哈希值的数据。我认为可以理解为基因。

    第二、挖矿难度值、区块时间戳以及Nonce。这一组数据记录与挖矿有关的内容。

    第三、Merkle树根。这是个神奇的东西,可以先理解为描述区块中所有交易的数据。

    区块链之所仿则以叫链,就是因为它的结构是一条从后向前有序连接起来的数据结构,就像是一条尾巴永远在变长的链子。

    那是什么原因导致这条数据这样井然有序的从后向前的连接呢?这就得靠父区块哈希值了。

    从字面意思理解,这是来自于父亲的哈希值。在区块链中,我们称呼当前区块的前一个区块为父区块,相应的后一个区块为子区块。唯独有一个区块是特殊的,它没有父区块,它是孙悟空~不对,它叫创世区块!

    所谓的父区块哈希值,就是父区块的区块头哈希值。从表格2中可以看到,区块头中包含了各种数据,大小是80字节,而这80字节的数据经过哈希运算,会得到一个32字节的字符串,这个32字节的字符串就是区块头哈希值。

    举个例子(例中数据全是随机乱输入的),第198808个区块的区块头哈希值是ade12318fbce...12ade413(32字节),那么第198809个区块的区块头数据就是这样的:

    把198809区块头中的所有数据经过哈希运算得到一个32字节的数据:bcf45896aefcd...33cde409(32字节),那么第198810个区块的区块头数据就是这样的:

    把两张图放到一起,就能得到一个简单的由2个区块构成的链。而区块链就是以这种方式构成的一条可以随着时间流逝无限延长的链。

    为什么要这样做呢?

    一开始我有说,我认为父区块哈希值可以理解为基因。如果我们的祖先有8条腿,我们人类可能就不是现在这个长相了,蜘蛛应该培大拦会非常可爱!

    而父区块哈希值如果出现变化,那么把父区块哈希值作配胡为输入条件的子区块哈希值一定会出现变化,紧跟着孙区块也一定会发生变化,如此这般,这个被改变的区块之后所有的已有区块都必须改变。

    越是早创造的区块,更改后需要的工作量越大,越不可能实现,而越新的区块被改变的难度也就越低。这也是区块链的交易一般需要有6个新区快建立以后才被确认交易完成的原因,因为这个时候,交易被更改的可能性已经基本没有了。

    凭着这个结构,区块链实现了不可逆、不可篡改的特性!

关于区块链基本技术父哈希和区块链是一种去中心化,利用哈希函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。