区块链怎么实现防篡改

有些区块链也支持MySQL独立数据库作为数据存储引擎,修改MySQL的数据是很容易的事啊,那区块链是怎么防篡改的呢?

首先,我们知道区块链是分布式、去中心化的,即有多个数据一致的分布式账本。同时,区块链采用密码学技术,提高整体的安全性。按照常识来理解,我如果想篡改数据,是不是要篡改所有的数据账本才行呢?但是我没有其他账本的修改权限,是不是意味着我不可能篡改链数据呢?

答案不尽如此,要篡改数据首先得修改账本,但是修改多少账本呢?全部?一半?三分之一?还是多少呢?公链环境下,说服区块链网络的51%算力节点就能更改信息。显然,这个篡改成本是非常非常高的。

那如果我只修改了自己的算力节点数据,会发生什么呢?当区块链网络发现你的节点数据不一致,就不能共识,你的节点将被排除在网络外,不能执行正常的交易。所以节点的数据是不能随便修改的,否则将不能共识。

在“链村”的故事中,也能很好地说明这个道理。“链村”中,邻居之间有很多交易,最开始只有口头记账,但这很容易出现纠纷。于是,村民们找了村长来负责记账,这样就避免了赖账等纠纷。但这又出现了新的问题,记账负责人可能受贿修改账目,或者账本突然丢失的风险。于是村民头脑风暴,想出了分布式记账。所有村民都有一个账本,这些账本的数据完全相同,当有交易发生时,通知其他村民同步记录。采用分布式记账,账本存放在很多家,想要篡改,就要挨家挨户地去撬门、涂改,难度大大增加。如果你只修改了自己的账本,其他人不会承认的。如果你修改了一半以上的账本,按照少数服从多数,是不是也就修改了区块链的账本数据呢?

而且区块链还有密码学支撑,同时大多区块链的数据存储引擎也不是容易可视化操作的MySQL,修改起来也比较麻烦。

更为重要的是,区块链中的区块是通过哈希串联起来的,生成新区块时,需要根据前一个区块的哈希值、新交易区块和随机数,来计算新区块的哈希值和随机数。也就是说每一个区块都是在前一个区块数据的基础上生成的,该机制保证了区块链数据的唯一性和连续性。同时也增加了篡改的难度和成本,修改一个区块数据,需要连续修改与之相连的后续区块数据。

总之,只要有整个区块链网络51%的算力,就可以实现区块链数据的篡改。不过,这在现实场景中,显然是不可行的,同时,区块链账本的哈希指针修改工作量,也堪比“愚公移山”。这就是区块链的防篡改特性。

那假如我现在已经是共识节点,我直接调用智能合约修改链上数据会怎样呢?而不是通过底层去修改区块链数据。这里假设我已取得某用户私钥或授权。

区块链一般配套有区块链浏览器,区块链的每一笔交易都会被打包到区块,然后哈希连到区块链中。区块链的每一笔交易都会生成一个唯一哈希字符串,且带有时间戳属性。那如果调用智能合约修改了数据,用户又不一定记得上次存储的数据内容,这种,用户会不会发现数据被篡改了呢?你要知道,用户始终持有相关的交易哈希,用户拿着哈希去区块链浏览器查询,会不会发现交易时间戳根本不对呢?再进一步,用户查找出有关这个内容的所有交易记录,会不会发现数据被篡改了呢?

综上,区块链的篡改成本和公开的交易哈希查证,保障了区块链的防篡改。