哈希运算在区块链中是如何应用的呢?要弄懂这个问题,我们要先把区块的结构弄清楚。
哈希算法是区块链中保证交易信息不被篡改的单向密码机制,哈希算法接受一段明文后,以一种不可逆的方式,将其转化为一段长度较短、位数固定的散列数据。
那么哈希运算在区块链中又是如何应用的呢?要弄懂这个问题,我们要先把区块的结构弄清楚。
区块结构
区块是区块链的基本组成单元,每一个区块由两部分组成:区块头和区块体。
区块头主要包含了上一个区块的哈希值(PreHash),本区块的哈希值(Hash),以及时间戳(TimeStamp)等等。我们以比特币为例,它的区块头包括:
| 数据项 | 目的 | 大小(字节) |
|---|---|---|
| 版本(Version) | 区块版本号 | 4 |
| 难度系数(当前目标的Hash值) | 压缩格式的当前目标Hash值 | 4 |
| 上一个区块的哈希值(PreHash) | 上一区块的256位哈希值 | 32 |
| 默克尔根(Merkle Root) | 当前区块中所有交易的256位哈希值 | 32 |
| 时间戳(Time) | 从1970-01-01 00:00 UTC开始到现在,以秒为单位的当前时间戳 | 4 |
| 随机数(Nonce) | 从0开始的32位随机数 | 4 |
区块体储存了这个区块的详细数据(Data),这个数据是若干行记录,可以是交易信息。比特币的话,一般是2000笔交易以内
区块的链接
我们再看区块是如何串联成链。每个区块的区块头都包含上一个区块的哈希值和当前区块的哈希值,那么每新生成一个区块,它区块头的上一个区块的哈希值,是和上一个区块的哈希值是对应的,如图琐事,每个区块通过哈希指针相连,最后成了一个有哈希指针串联而成的列表。

这里我们引入一个概念叫哈希指针,指针是指向某个元素地址的计算机对象,通过指针指向的地址,可以找到对应的变量。哈希指针也是相似的,不同的是哈希指针不仅可以指向数据的存储位置,还可以明晰某个时间戳下该数据的哈希值。如图,对于区块链来说,每一个哈希指针指向的是前一个区块的储存地点和哈希值。

不可篡改性
区块链的结构特征可以帮助我们更好的理解防篡改这一特性。
假设有人试图去篡改链条中的数据,当攻击者修改了K区块上的数据,这时候他会发现K+1区块上的哈希值与K区块不再匹配,那么他不得不一直修改下去。
所以只要我们保存好链表最后的那个哈希指针,就一定能发现是否有人篡改了区块数据。
文章原标题:侯震:修改区块链有多难?反正不比骗媳妇简单 原作者:侯震