白话“区块链技术”之延伸阅读——区块链中的hash机制

【本部分不独立成文,仅作为《白话区块链技术》一文得延伸阅读。】

区块很像数据库的记录,每次写入数据,就创建一个区块。每个区块包含区块头(Head)和区块体(Body)两部分,区块头记录当前区块的多项特征值,区块体存储实际数据。若干区块以链表的形式连接在一起,便成了区块链。

那么什么是哈希(hash)呢?哈希是一种函数映射机制,也可以理解为一种算法,这种算法会把任意长度的内容变成一串长度固定的字符(二进制数字串),这就是所谓的哈希值。简单地说就是:用一个HASH函数对自变量A求值,得到哈希值B,即B=HASH(A)。Hash函数有很多种,主要目的是比较两个数据是否相同。例如,下载的文件有没有在下载过程中遭到破坏,计算一下,看看和官方的Hash值是否相同即可。比特币的区块链要保证不可修改,靠的就是HASH机制。每个区块都计算生成了一个哈希值,一旦数据被篡改,求得的哈希值便与原哈希值相差甚远。常用的SHA_256算法求得的哈希值是256位定长的二进制编码。

【讲到这里,机敏的童鞋肯定要问:对SHA_256而言,如果x长度超过256位,那HASH函数就是多对一映射,不同的x岂不是也可能映射为相同的y值?没错,可能性是有,但如果要人为地寻找一个x’,使得x篡改为x’后,HASH(x’)=HASH(x),这一过程很难,以目前的计算能力来说,短时间难以做到,因此暂不作考虑。】

区块头中“上一个区块的hash(pre_hash)”和“当前区块的hash”这两个域保存的便是将相应区块内的几个域作为自变量,用HASH函数算出的哈希值。HASH函数的选择有明确要求,不同的x对应的y值不能相同,并且由y无法逆推出x值。常用的SHA_256生成的HASH值y为256位二进制数。由此可以推得:

1.因为区块头各不相同(包含不同的时间戳),区块头的哈希值自然也各不相同,因此可以通过区块头的哈希值标识区块(不妨将该值称作区块的哈希);

2.如果区块体的内容变了,那么区块头中与之对应的哈希值也会相应改变,继而导致新算出的区块哈希不同于之前。

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

这一点对区块链有重大意义。如果有人修改了一个区块,该区块的哈希就变了。为了让后面(编号比它大的)的区块还能连到它,该人必须依次修改后面所有的区块(因为下一个区块包含上一个区块的哈希),否则被改掉的区块就脱离区块链了

由于哈希值的计算极为耗时,短时间内修改多个区块几乎不可能,除非有人掌握了全网51%以上的计算能力。正是通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。这就像历史一样,发生了就是发生了,从此再无法改变。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180606G0ZBOS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券