中国区块链商学院:区块链技术是如何保证数据不可篡改的

区块链技术是如何保证数据不可篡改的

区块链网络中应用了各种技术来保障交易在传输、存储等各个环节的可靠性(可信任,不可变更等),本篇文章将会从不同方面去介绍相关技术,主要包括非对称加密技术、数字签名技术、区块链的存储结构设计以及工作量证明等。

1、以签名验证交易的有效性

如何保证交易在传输过程中不能被修改呢?对密码学有过了解的可能都知道数字签名的技术,这是一项非常成熟的技术,其基础是非对称加密技术。

非对称加密技术指的是加密和解密过程使用不同密钥的加密技术,每个用户有公钥和私钥一组对应的密钥,使用公钥加密后的数据需要使用相对应的私钥进行解密,反过来使用私钥加密后的数据需要通过公钥进行解密。一般每个人的公钥是公开的,而私钥是保密的,具体应用的过程可以参考下图。

中国区块链商学院:区块链技术是如何保证数据不可篡改的

 

数字签名技术是对非对称加密技术和数字摘要技术的综合应用,其解决的问题就是当Alice发送了一份数据之后,如何认定该数据是Alice发出的而且中途没有被人篡改过。其基本原理可以理解为先使用数字摘要技术(Hash等)将数据缩短到某个固定长度,然后使用发送者(假设为Alice)的私钥对数据摘要进行加密,这样就得到了一份数字签名,任何人都可以通过Alice的公钥来解密数据以验证数据是否为Alice发出(如果解密失败则不是),同时可以验证解密后的数字摘要和收到的数据的数字摘要是否匹配来验证数据是否被篡改过。

也就是通过数字签名技术,可以保证数据在传输过程中无法被篡改,实际区块链网络中会在记录数据时通过数字签名验证交易的有效性,只会将验证通过的交易打包到区块中,并且每个客户端在接收到一个新的区块时也会做这个验证。

中国区块链商学院:区块链技术是如何保证数据不可篡改的

 

2、以公开记录对抗欺骗

很多时候我们之所以无法验证事情的真实性,仅仅是因为我们能够得到的信息不够!举个例子,我们要判断饭店里的一盘菜是否干净卫生,大多数时候只能通过店面是否正规等判断,假如我们能了解到饭店里用的蔬菜、肉等材料从生产、加工、运输一直到进入饭店厨房,甚至厨房如何保存和清洗,厨师如何加工,服务员如何端过来等所有信息,再来判断这盘菜是否干净就可以很简单,而且很有说服力了,这其实就是区块链可以解决的其中一种案例。

上一节我们已经了解到,通过数字签名对交易进行验证,但是对于数字货币来说,还需要解决的是重复支付的问题,也就是签名都是有效的,但是我手中的数字货币(对于各种虚拟资产都适用)其实已经用过一次了,在没有一个公正的机构下如何验证这枚数字货币我有没有使用过呢?有,那就是公开所有交易记录,每个人都可以获取整个网络中的所有交易记录,从而验证该枚数字货币是否被使用过。为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。

技术上,中本村设计了首尾互联的区块结构来解决该问题。首先为每一笔交易进行排序,我们先来看一下这个区块链的逻辑结构图,这是一个简化的结构图,保留了必要的字段方便说明。我们假设每一个区块只存储了一条交易记录,每一条交易记录中除了存储交易本身,还存储了上一条交易的hash值,将这二者放在一起进行hash,得到一个值,作为该区块的hash值,这样所有的交易就通过区块串成了一条链。这样不但能验证数字货币是否被使用,当有人想要修改其中某个交易的信息时还会发现,从被修改的那个区块开始往后所有的区块都需要被修改,这几乎是不可能的,就算是修改了,其他客户端也不会接受其修改。

中国区块链商学院:区块链技术是如何保证数据不可篡改的

 

【以下两段非技术人员建议跳过】上述方式虽然可以保障已经存储的交易记录不被修改,但是一条一条交易前后串联将会导致系统不能支持并发,也就严重限制了系统的吞吐量!为了解决这个问题可以让一个区块存储多条交易,将每条交易记录的hash值合并在一起,然后再取hash值,作为本区块中交易记录的总的hash,这样当区块中任意一条交易被篡改,则整个区块的hash值就会发生变更,从而很容易被识别出。在实际应用中,对于一个区块中所有交易记录的hash采用了Merkle 树的形式组织,区块头中存储了Merkle Root,这种组织形式可以精确定位到发生变更的那一条交易,有兴趣的同学可以参考下图了解一下。

中国区块链商学院:区块链技术是如何保证数据不可篡改的

 

在合并记录之后,将每一个区块的关键信息提取到了区块头中,这样也能在不读取实际内容的情况下快速校验整条链是否有效(未被篡改),并有效回收硬盘空间(不需要所有人都保留完整的记录),于是形成了下图所示的区块链的基本结构(阴影部分为区块头)。之后以太坊和超级账本等项目根据各自项目的需要对区块链的基本结构进行了扩充,但总体的思想还是没变。

中国区块链商学院:区块链技术是如何保证数据不可篡改的

 

3、随机序列的引入增加了攻击难度

大家看到上面区块链的Header中,还有一个Nonce,Nonce表示一个随机数,每个Block的Nonce都是随机生成的,之所以引入Nonce一方面是通过工作量证明,公平的分配记账权(即打包区块的权利,一般每次可获取一定数额的系统奖励,另外可以拿到所打包区块中所有交易的手续费),另外还可以大幅增加攻击者篡改的难度。

工作量证明指的是节点想要获取记账权,需要证明自己付出了一定的工作,怎么证明呢?就是要找到一个随机数,将这个随机数和区块头中的数据放到一起获取的散列值符合一定的条件(比如散列值中需要包含18个0,难度情况不同,网络有不同的控制方案,这个过程就是俗称的挖矿)。这个过程简单可以理解为两个人一起摇20个骰子,如果有18个以上的骰子是六,则成功,获得一次记账权。这个难度会设置的非常高,拿比特币网络举例,其难度控制在全比特币网络中所有争夺记账权的计算机一起算10分钟,才能成功一次!

ok,上述过程对于数据的保护有什么价值呢?大家可以想想,如果有人修改了某条交易数据(理论上可以修改知道私钥的账号发出的交易),则会导致该交易所在区块的Merkle Root发生变化,则原来经过全网十分钟时间才计算出的Nonce值将不再适用,需要重新计算,这需要巨大的运算量,而且后面的每一个节点的Nonce值都需要重新计算!这就导致除非控制了全网一半以上的节点,否则几乎是不可能。反过来如果控制了全网一半以上的节点,他还会去篡改数据把该区块链网络推向毁灭吗?这就像掌握了一个公司50%以上股份的董事长是否会故意毁掉公司一样。

4、以付出和回报反馈进行正向引导

以上,一直讨论的是技术,但也不能忽视了人的重要性。

区块链有一个共识就是只有最长的链才会被认可,其他由于各种原因生成的分支需要到最后重新记账,而在该分支上原先通过获取记账权打包区块获得收益的矿工的收益会被回收,就如同从未存在过!所以矿工为了自身利益(获得一次记账权非常难,但是收益很多)考虑在获得记账权后,为了避免所得收益被收回,都只会将区块打包附加到最长的链后面。

这就避免了可能发生的某些节点篡改中间某个区块数据后,其他矿工在该篡改区块后面打包新区块的可能性,前提依然是被控制的恶意节点不超过总节点数量的一半。