如何向圈外人讲明白区块链(四) --区块链是怎么防止数据被篡改
0上期回顾
上期我们主要学习了区块链几个比较重要的几个概念:
1.区块链的定义:本质上是一个分布式账本技术。
2.共识机制的分类:工作量证明机制(PoW)、权益证明机制(PoS)、股份授权证明机制(DPoS)和Pool验证池。
3.智能合约的特性:代码即是法律、数字化资产、去中心化和自动执行。
我们总是说区块链去中心化,数据不可篡改,那它是怎么防止被篡改的呢?
本期我们就来探讨学习一下区块链是怎么防止数据被篡改的吧。
1先给大家讲一个故事
在远离陆地、与世隔绝的一个孤岛上,住着许多的人,他们以家庭为单位。
每个家庭都拥有一定规模的资产,主要以粮食、蔬菜、日用品、房产等方式存在。
岛上的物质交换只在岛内居民之间进行。
所有的交易都由岛上唯一能写会算的岛主记录。
每天随着岛内交易的进行,交易信息都在不断增长,岛主将所有的交易信息都记录在一本账本中,并由自己来保管。
随着岛内居民的交易行为日益频繁,每天要记的账目越来越多,岛主记账的压力越来越大。
为了缓解自身的压力,岛主决定:
1.将记账的技能传授给了岛上的所有居民,让他们参与到记账过程中。
2.要求居民将交易金额及交易时间等信息都记录下来,并且每一笔交易记录经交易双方签字后方可生效。
3.为岛上每个家庭配一个独立的信箱。
4.只有该家庭成员才能使用钥匙打开信箱,查看信箱中存储的账目信息。
有了信箱之后,岛上的记账模式发生了变化:
- 新交易记录产生是,交易人将一份记载了新的交易信息的记录放入每家的信箱中
- 这些交易信息按放入信箱的顺序形成了一个天然的账本,每一户的居民都能开箱查看
这样,即使有个别人将信箱中的信息进行篡改,整体的交易记录依然不会出现偏差。居民只要拿出每个人家中保存的账本,根据多数原则确定统一的交易历史,就可以再无需岛主监管的情况下完成准备地记账。
这就是分布式记账的模型,实现了信息公开,不被轻易篡改的可能。
2区块链是怎么实现信息不可篡改的
2.1哈希算法
还是借助上述的例子,随着新交易的不断产生,岛上的每家每户账本里记录的交易信息也快速增长,越来越多的记录信息也会被报讯到信箱中。
类似地,在区块链中,一个又一个的新产生的区块会不断链接到现有区块链的尾端。如何能够保证这个信息页的每一页,以及区块链账本中的每一个区块都真实准确、没有被篡改过?
假设,我们通过一种算法对账本的信息进行加密,给区块链上第一个区块打上一个唯一的标签,之后的每一个区块也加密打上一个唯一标签,同时又能够包含前一个区块链的标签。这样,只要采用一种方法保证这个标签无法被轻易替换或更改,那么我们就能够保证这个区块记录的信息没有被篡改过。
这时候我们就需要一种加密的算法----哈希算法。该算法的思想是接收一段明文,以一种不可逆的方式将它转化成一段长度较短、位数固定的输出散列。
这个加密过程是不可逆的,这就意味着无法通过输出散列的内容推断出任何与原文有关的信息。
哈希算法的特点:
1) 输出长度固定为256位,即为32字节的随机散列
2) 输出的散列与输入的原文一一对应
3) 一个哈希值可以唯一、准确地标识一个区块
4) 哈希值字符串无法反推出原来的内容,当今的技术想要破解可能性几乎为0
5) 要想确认内容是否被篡改,只能用哈希算法从新计算,如果计算信息没有变化,计算出来的哈希值也不会产生变化
哈希是以上特性,确保了数据被篡改的难度,及数据可被验证是否被篡改过,保障了数据的安全、可靠性。
2.2Merkle 树结构简化了验证程序
Merkle树是一种哈希二叉树,用它可以快速验证大规模数据的完整性。
Merkle树被用于归纳一个区块中所有交易的信息,最终生成整个区块中所有交易信息的完整的哈希值。
区块中任何一笔交易信息的变动都会使得Merkle树发生变化。
Merkle树是区块链的基本组成部分,叶子节点存储的是数据文件的哈希值,非叶子节点存储的是对其下面所有的叶子节点值的组合结果进行哈希计算后得出的哈希值。
在交易信息的处理、对比及验证过程中,尤其是在分布式环境下进行对比或验证时,Merkle树会大大减少数据的传输量和计算的复杂性。
merkle树结构.png
2.3时间戳
在例子中,岛主要求居民记账时,不仅要记录每一笔交易,并且要求居民将交易发生的时间也一并记录在账本上,这就相当于区块链为每一笔交易在发生时盖上了时间戳。
时间戳的应用,是对每一次交易记录的认证,就像交易合同公证一样,能够显示交易记录的真实性。
时间戳扮演了区块链中公证人的角色。
区块链根据分布式的协议,构建一个分布式的开放结构体系,交换的信息可以通过分布式记账的方式确定信息数据内容,加盖时间戳后生成区块数据,再通过分布式广播发送给各个节点,最终实现分布式存储。
时间戳与哈希算法、Merkle树共同作用,增强了区块链的安全性。
3小结
- 哈希算法的应用使得数据被篡改的难度增加,并实现了数据的可验证性
- Merkles树结构实现了快速验证大规模数据的功能
- 时间戳扮演了区块链的公证人角色
三者相辅相成,共同作用,确保了区块链数据的安全、完整、真实性,使数据被破解、被篡改的成本和难度无限放大。