区块链密码算法:哈希算法

写在前面

区块链系统包含了计算机科学过去20多年的成果:计算机网络 p2p、算法、数据库、分布式系统、计算机密码学,等等。其中,计算 机密码学又是重中之重。只要想到以后在区块链上跑的会是各种各样的 价值:货币、股票、信任、数字资产、版权、交友信息……不需要太多 的知识,普通人就能理解密码保护会有多重要。本章关于密码学的讨 论、证明和陈述,完全基于计算机冯.诺依曼体系结构,不涉及量子计 算这些领域,主要讨论区块链里用到的典型加密算法以及编码方式。

哈希算法

哈希算法在区块链系统中的应用很广泛:比特币使用哈希算法通过 公钥计算出了钱包地址、区块头以及交易事务的哈希值,梅克尔树结构 本身就是一棵哈希树,就连挖矿算法都是使用的哈希值难度匹配;以太 坊中的挖矿计算也使用了哈希算法,其中的梅克尔-帕特里夏树同样也 是一棵哈希树;其他的区块链系统也都会多多少少使用到各种哈希算 法,因此可以说哈希算法贯穿到区块链系统的方方面面。

什么是哈希计算

密码学上的哈希计算方法一般需要具有以下的性质:

  • 函数的输入可以是任意长的字符串;

  • 自函数的输出是固定长度的;

  • 函数的计算过程是有效率的。

这个说法比较学术化,说白了,就是通过一个方法将一段任意输入 的字符串计算出一个固定长度的值,相当于计算出一个身份证号。通过 哈希算法计算出的结果,是无法再通过一个算法还原出原始数据的,即 是单向的,因此适合用于一些身份验证的场合,同时由于哈希值能够起 到一个类似于身份证号的作用,因此也可以用于判断数据的完整性,哪 怕数据发生微小的变化,重新计算后的哈希值都会与之前的不一样。

一般来说,为了保证哈希函数在密码学上的安全性,必须满足以下 3个条件。

1〕抗冲突。简单来说,哈希函数抗冲突指

的是不同的输入不能产生相同的输出。这就好像到电影院买票看电影, 对于付出真金白银买了电影票的人,他们的座位号不能是一样的。?同 时必须说明的是,抗冲突并不是说不会有冲突,只不过找到有冲突的两 个输入的代价很大,不可承受。这就好像暴力破解一个有效期为20年的 密码,整个破解过程长达30年,虽然最后密码被破解了,但是由于密码 有效期过了,所以也就失去了意义。

2〕信息隐藏。这个特性是指如果知道了哈希 函数的输出,不可能逆向推导出输入。这在密码学很好理解:即使敌人 截获了公开信道(比如无线电波),获取了传送的哈希信息,敌人也不 可能根据这段信息还原出明文。

3〕可隐匿性如果有人希望哈希函数的输出是 一个特定的值(意味着有人事先知道了哈希函数的输出结果),只要输 入的部分足够随机,在足够合理的时间内都将不可能破解。这个特性主 要是为了对付伪造和仿制。近来某位当红歌星的演唱会门票超贵,10000元一张。这就催生了假票行当:伪造个人演唱会的门票。这里门 票是公开的,大家都知道长什么样,用什么材质,这相当于已知哈希函 数的输出。可隐匿特性就是要做假票的明明知道输出长什么样,但不知 道使用何种“原料”和“工艺”造出一模一样的票来。

哈希算法的种类

密码学中常用的哈希算法有“MD5、SHA1SHA2、SHA3SHA256SHA512SHA3,下面简单介绍一下。

MD5是输入不定长度信息, 输出固定长度128BITS他的算法。经过程序流程,生成4个32位数据,最后 联合起来成为一个128BITS哈希。基本方式为求余、取余、调整长度、与 链接变量进行循环运算,得出结果。“MD5算法曾被广泛使用,然而目前 该算法已被证明是一种不安全的算法。王晓云教授已经于2004年破解了 “MD5算法。

SHA1。SHA1在许多安全协议中广为使用,包括TLS和SSL.2017年2月,GOOGLE扭宣布已攻破了SHA1,并准备在其⑶⑴伽浏览器产品中逐 渐降低59八1证书的安全指数,逐步停止对使用59八1哈希算法证书的支

持。

SHA2。这是SHA算法家族的第二代,支持了更长的摘要信彡息输 出,主要有SHA224、SHA256、SHA384和SHA512,数字后缀表示它们生成的哈希摘要结果长度。

SHA3。看名称就知道,这是SHA算法家族的第三代,之前名为 KECCAK:算法,SHA3并不是要取代SHA2,因为目前SHA2并没有出现明显的弱点。

事实上,除了以上的算法,哈希算法还有很多种,有一些是不太讲 宄加密特性的,比如在负载均衡领域常用的一致性哈希算法,目的只是 将服务器地址快速地计算出一个摘要值,而不是加密,因此会使用一些 其他的快速哈希算法。

区块链种的哈希算法

1.区块哈希

所谓区块哈希就是对区块头进行哈希计算,得出某个区块的哈希 值,用这个哈希值可以唯一确定某一个区块,相当于给区块设定了一个 身份证号,而区块与区块之间就是通过这个身份证号进行串联,从而形 成了一个区块链的结构。这样的结构也是区块链数据难以篡改的技术基 础之一。比如,一共有100个区块,如果要更改10号区块的数据,则11 号就不能与10号连接,区块链就会断开,这样等于篡改无效了,而如果 篡改了 11号,就接着要篡改12号,以此类推,几乎就是牵一发动全身。 如果区块链很长,那么要想更改之前的历史数据几乎就是不可能的了。 从这个角度来看,哈希值相当于一个指针,传统的指针提供了一种获取 信息的方法,而哈希指针则提供了一种检验信息是否被改编的方法,如 果信息被篡改,那么其哈希值和哈希指针的值必定是不等的。

2梅克尔树

我们在第1章简单介绍过梅克尔树,梅克尔树在不同的区块链系统 中有不同的细节,但本质是一样的,我们就以比特币中的梅克尔树来说 明。比特币中的梅克尔树称为二叉梅克尔树,每一个区块都有自己的梅 克尔树,是通过将区块中的交易事务哈希值两两结对计算出新的哈希 值,然后哈希值再两两结对进行哈希计算,递归循环,直到计算出最后 一个根哈希值,这样的一棵树也称为哈希树。梅克尔树既能用于校验区 块数据的完整性,也能对钱包进行支付验证。

举一个生活中常见的例子,当我们签订一份^页的合同时,通常都 会在每页合同上盖章,只不过每一页上的章都是一样的,这就给作弊留 下了空间。如果我们稍微改变一下做法,给每一页合同盖一个数字印 章,并且每一页上的数字印章是前一页数字印章和本页内容一起使用哈 希算法生成的哈希值。例如:

1〕合同第一页的数字印章是本页内容的哈希值,即第一页数字印章=hash(第一页内容〕。

2〕合同第二页的数字印章是第一页的数字印章及第二页内容加在

起后再哈希的值,第二页数字印章=hash (第一页的数字印章^第二页 内容)。

3〕合同第三页的数字印章是第二页的数字印章及第三页内容加在 起后再哈希后的值,即第三页数字印章二935^ (第二页的数字印章十第 页内容〕。

4〕上述过程以此类推。

这样对第一页合同的篡改必然使其哈希值和第一页上的数字印章不 符,且其后的2,3,4,5,…,^页也是如此;对第二页合同的篡改必 然使其哈希值和第二页上的数字印章不符,且其后的3,4,5,…,^页 也是如此。

从上面的例子,我们可以发现梅克尔树的优势:

1〕我们能知道信息是否被篡改;

2〕我们还能知道是第几页或者第几块的信息被篡改了。

为了便于理解,我们看下梅克尔树的典型架构,如下图所示。

梅克尔树的典型架构

我们看到,首先这是一个树结构,在底部有4个哈希值,假设某个 区块中一共有4条交易事务,那么每条交易事务都计算一个哈希值,分 别对应这里的hash到hash4,然后再两两结对,再次计算哈希值,以此 类推,直到计算出最后一个哈希值,也就是根哈希。这样的一棵树结构 就称为梅克尔树(merkle tree〕,而这个根哈希就是梅克尔根(merkle root)

梅克尔树(merkle tree〕

可以看到,每一个区块都是具有一棵梅克尔树结构的,同时可以发 现,梅克尔树中的每一个节点都是一个哈希值,因此也可以称之为哈希 树,而比特币中的梅克尔树是通过交易事务的哈希值两两哈希计算而 成,所以这样梅克尔树称为二叉梅克尔树,那么这样的树结构有什么作 用呢?

比特币是分布式的网络结构,当一个节点需要同步自己的区块链账 本数据时,并没有一个明确的服务器来下载,而是通过与其他的节点进 行通信实现的。在下载区块数据的时候,难免会有部分数据会损坏,对 于这些一条条的交易事务,如何去校验有没有问题呢?这个时候,梅克 尔树就能发挥作用了,由于哈希算法的特点,只要参与计算的数据发生 一点点的变更,计算出的哈希值就会改变。我们以第一个示意图来说 明,假设八通过8来同步区块数据,同步完成后,发现计算出的梅克尔 根与8不一致,也就是有数据发生了损坏,此时先比较hash12和hash34 哪个不一致,假如是hsah12不一致,则再比较hash1和hash2哪个不一 致,如果是hash、2不一致,则只要重新下载交易事务2就行了。重新下载 后,再计算出hash12并与hash34共同计算出新的梅克尔根比较,如果一 致,则说明数据完整。我们发现,通过梅克尔树,可以很快找到出问题 的数据块,而且本来一大块的区块数据可以被切分成小块处理。

玖壹区块链声明

加微信:469649885区块链培训教程
还可免费获取区块链培训班试学名额

分享:

扫一扫在手机阅读、分享本文

区块链评论

玖壹区块链培训

玖壹区块链培训学院简称(玖壹学院http://www.91xiubbs.com/)提供区块链技术培训资料、区块链开发培训视频教程等下载,不过网上自学区块链技术课程必然存在一些缺陷:遇到问题易卡壳、学习周期漫长、无针对性等。区块链培训机构现场面对面的讲授区块链培训课程可以让您和团队在最短时间内掌握正确、系统、高效的区块链实战技术。