区块链有没有被篡改的风险?
事实上,仅仅分布式管理本身,是无法做到 “无法篡改” 的 —— 顶多能做到的是 “很难篡改”。假设全网诸多节点中有 51% 的节点联合起来 —— 不管是善意还是恶意,反正都是故意 —— 那么这些节点 “合谋” 的结果就是该数据库不再是 “不可篡改” 的数据库。
以上所描述的情况,就是所谓的 “51 攻击” —— 这并不是技术能够解决的问题。区块链的第一个应用,比特币,解决这个问题的方式,同样不是靠技术,而是靠利益驱动(博弈原理):
若是真的有谁能够操纵 51% 的算力,那么他会发现,对他来说,“贡献” 远比 “攻击” 更有利可图。
现有社会体系下,交易或者合作双方的信用是建立在一个第三方机构的认证上的。换句话说,甲和乙要完后才能一笔交易或者达成一个合作,并且要约束双方按照协议好的去做,就需要有一个权威的第三方去做见证人。但是作为见证人的第三方,掌握大量的交易双方的信息,有一个庞大的数据库,一旦数据库遭到外部攻击或者内部作恶,就会被篡改掉,这会造成很大损失。现在的机构设置那么的中间人的职位就是为了尽可能确保内部篡改不会发生,在安防上面的巨大的投入也是为了防止中心化的数据库被黑客攻击。这也是促使区块链技术诞生的原因。
不可篡改和不被篡改是两码事
我们建立庞大的数据库是希望数据又多又有价值还可信,但中心化的数据库只有这一套完整账本,我们要保护正确的数据库不被篡改,这是一种是外在的人为可控的防御措施;区块链是一套分布式账本,强调的不可篡改是上了链的数据无法修改,不论是主动还是被动,内部还是外部,这是一种内在的不受人控制的底层逻辑决定的。因此中心化数据库的“不被篡改”和分布式数据库的“不可篡改”是两码事。
区块链技术采用了分布式多方记账的方式让数据库分散在每个记账者也就是节点上,每个人都有一个一模一样的账本,那么单独一个人是无法篡改的,节点越多,被篡改的可能性越低。
但是这种机制就好比:你做过的任何事就有记录,不论是对的还是错的,想改是不可能的。作为一个数据库,如果发现记录的数据是错的,不好意思,无法修改,抑或是冗余的占了好多内存,不好意思,删除不了。
不给犯错机会是个很可怕的事情
我们常讲,人非圣贤,孰能无过?错而改之,善莫大焉。但是不可篡改是个很可怕的事情,几乎不给人犯错的机会。
举个例子,转账问题。小A要给小B转账一笔钱,但是不小心输错了公钥地址,转错了,那这笔钱还能找回来吗?找不回来了,因为你输错了地址。虽然区块链的交易信息透明,但是交易者的信息不透明,你很难找到真正接收你这笔钱的人。当然,有人讲,区块链可以追溯,因为有公钥地址,可这就好比大海捞针,你确实掉海里一根针,但是你找得到吗?
再举个例子,版权认证问题。假如区块链技术用到了版权认证上,小A写了一本书,但不小心被小B拿去了,小B二话不说用区块链技术把他确权上链了,这下好了,小A如果想去确权,发现已经被人家小B确权上链了,而且是不可篡改的。这找谁说理去?打官司吗?打赢了说明这个区块链确权并没有卵用,仍然不能百分百可信。打输了,小A这不是吃了哑巴亏?区块链技术保护不了他的利益反倒侵害了他的利益,其他作者看到这个情况,作何感想?这个例子想表达的就是,上链的数据一开始就是错的,我们眼睁睁的看着他错不能改,这就是问题。
错了的怎么改?
理论上讲,区块链不可篡改,那出现以上状况是否真的没有办法了呢?
答案是有,但是改起来是有代价的。
第一种,51%攻击,也就说双重支付,或者双花。某人在区块链上花掉了一笔钱,但是他在这笔交易被广播出去之前又发起一个给自己转账同样一笔钱的交易请求。只要算力占到全网的51%以上,这个操作就有可能实现,从而实现双花。但是这真的是篡改而不是修改,是恶意的。
第二种,改变共识机制,不再用POW机制,改用DPOS机制。比如EOS的21超级节点。这21超级节点都拥有记账权,而且这比区块链1.0时代的千千万万个节点好控制多了,只要21个节点中的15个达成共识就可以回滚之前的交易。然而这解决了改错的问题却也让人觉得区块链的可信度下降了,去中心化变成了弱中心化,人治因素比区块链1.0要大得多。之前有报道称EOS超级节点团队冻结了部分可疑的个人账户,引发了圈内热议,甚至有人说,这样的EOS和区块链没有关系。到底如何,还要让时间来说明一切。
第三种,分叉。不管是比特币还是以太坊,都有过分叉经历,前者的原因主要是扩容之争,到底要不要把1M的区块扩大,扩大到8M还是32M甚至是64M,由此比特币的分叉币是最多的,甚至有消息称,比特币的分叉币BCH内部出现了纷争,面临再一次分叉的可能,分叉将修改其底层逻辑,可以理解为:选择分叉的人认为区块链在底层设计上犯了错误,分叉是要修改这些错误。另外,也不排除为了个人利益而进行分叉。
数据能否删除?
区块链一直以来被认为是价值互联网的底层技术。但是区块链上的数据从创世区块起,新的区块不断增加,数据越来越多,越增加越困难,陈年老节点依然要接受新增的交易广播,这无疑是一种浪费,试想,100年后,若还是这种机制的话,是不是100年以来的所有节点都要接受广播?如此一来,性能该有多低下!这就有一个问题,陈腐区块要不要删除,能不能删除?在处理这个问题上,以太坊没有选择删除数据,而是采用了分片技术,简单来说,就是把一个大数据库打散,交易信息不再需要全网确认,只需要临近的一部分节点确认就可以了。当然,这也是牺牲了去中心化来提升性能的手段。
说完陈腐数据的问题,还有另一个问题,就是错误数据能不能删除,怎么删除?如果可以删除,但成本太高,那这是否说明区块链是功能被阉割的数据库?如果错误数据可以被低成本的删除,那么对于记录区块数据的矿工的奖励是否要收回?如果不收回,又是低成本的,那么这是否变相鼓励矿工做一些假数据?这些问题或许很荒谬,但确实存在。
总的来说,区块链的不可篡改有一种剑走偏锋的感觉,目前如何解决删改问题尚在探索阶段,因此,但从这一方面来看,区块链技术距离应用场景真正落地还有很长的路要走。