首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谁说区块链上数据不可篡改?

版权声明

本文无需授权即可转载,转载时请务必注明作者及来源。

本文为小白学习比特币基本概念系列之五,若有理解不当或者叙述不够简单明了详尽之处,恳请指出、留言讨论。

01. 什么是共识攻击?

众所周知,比特币系统里的交易有一个很大的特点,就是不可篡改性(数据不可篡改)。在比特币网络,每一笔交易,被验证过后就永远的被记录在链里,而且是所有人共同见证。

比特币网络里的节点在验证交易或区块时是遵循一定的规则,这个规则是被绝大多数矿工都接受、认可,大部分人都同意按照这样的规则来出比特币网络里的交易、维护比特币网络运行。被大多数人都认可的一套规则,在比特币系统里(也包括其他区块链)被称为共识(consesnsus)。

共识事关重大,小到情侣处对象,大到星球之间往来,若是无法达成共识,或者说有人故意对已达成的共识进行攻击,想要撕毁“合约”,曾经说过的山盟海誓都不算数——情侣分手;老板许下的江山没你的份——员工离职;说好一起玩耍的欧盟面对“叛徒”——英国脱欧、星球之间种族互相歧视——相互毁灭……后果可想而知。

一套共识被所有人都认可这是最佳理想状况,实际情况是,不会是所有人都认可,而是被大部分人认可。当超过一半以上的人不认可这套共识时或者故意想破坏这套共识时,这个系统就岌岌可危了。

反映在比特币网络中,只要某个矿工团体所拥有的算力在全比特币网络里占比超过50%,那么这个矿工团体就拥有了对比特币网络共识发起攻击、并且会成功的能力,因此也可以把共识攻击称之为51%攻击(51% Attack)。简单来说就是一个团体或人有能力做假账了。

比特币官网上对于51%攻击的定义是:

The ability of someone controlling a majority of network hash rate to revise transaction history and prevent new transactions from confirming. —— 比特币官网

一个人(团体)有能力控制大部分的比特币网络哈希算力,这样他就可以修改交易历史,以及禁止新的交易被确认。这种行为就是意图篡改区块链上的数据。打个比方,比如现在在全球范围内有100台计算机在参与比特币网络的记账,以及维护比特币系统的正常运行。而其中有51台计算机是属于某个人的,那么只要这个人愿意,他就可以调配这51台计算机,协调运作,对比特币网络系统进行攻击——说直白点,就是可以篡改数据、做假账了。如果51台计算机或者更多计算机的账本上都没有某笔交易记录话,那么剩下的计算机会选择相信少数还是多数呢?

在《精通比特币》一书里,提到过矿工在比特币系统中扮演着保护比特币网络、发行比特币的角色,所以比特币系统里的这套共识也有赖于大部分矿工诚实的、并非出自一己之私利的共同维护:

The consensus mechanism depends on having a majority of the miners acting honestly out of self-interest. ——《精通比特币》

在比特币网络里,共识通常会通过以下两种方式来攻击:

双重支付 (Double-spend Attack)

否认服务 (Denial-of-Service) , DoS攻击

02. 双重支付攻击

什么是双重支付攻击呢?双重支付攻击就是攻击者可以通过分叉的方式将之前已被确认过的区块变成无效区块,把它排挤到“备用”链上:

A double-spend attack is where the attacker cause previously confirmed blocks to be invalidated by forking below them and re-converging on an alternate chain. —— From 《精通比特币》

双重支付攻击可以下两种方式发生:

在一笔交易被确认之前发起

或者依靠自己的算力“撤销”那些区块,就像word上的撤销动作。

关于双重支付攻击具体是如何运作的,可以看之前的文章一笔钱花两次: 双重支付 | 小白学比特币之四。

03. 否认服务(DoS攻击)

攻击共识的另外一种行为就是,否认服务(Denial-of-Service),DoS:

Sending lots of data to a node may make it so busy it cannot process normal Bitcoin transactions. —— From Denial-of-service attack@Bitcoin wikipedia

给单个节点发送大量数据(小额交易),让这个节点无法瘫痪,暂时无法处理交易,或者处理交易异常缓慢。这个时候攻击者就有机可趁。有点类似于一大群人蜂拥到一个商店,堵在门口,那么其他客户就没有办法进去买东西了。

An attacker with a majority of the mining power can simply ignore specific transactions. If they are included in a block minded b another miner, the attacker can deliberately fork and remine that block, again excluding the specific transactions. —— From 《精通比特币》

拥有大部分算力的矿工节点,能轻易“忽视”特定交易,如果这些交易放在了一个被验证过的区块里,那么攻击者就故意的分叉出一个区块,然后自己重新再挖一次,通过这个动作把之前的交易删掉。这样的行为能导致针对一个或多个地址持续的DoS攻击。

实际上,一个矿工或者矿工团体如果没有51%算力,比如只有30%的算力,也可以对比特币系统进行攻击。只是在攻击成功的概率上有所不同。拥有51%算力,如果发起攻击,则大概率会成功(almost guaranteed to succeed)。

Security research groups have used statistical modeling to claim that various types of consensus attacks are possible with as little as 30% of the hashing power. ——From 《精通比特币》

04. 小结

51%算力攻击可以让算力拥有者排除或者修改交易数据,但是这样的攻击行为也是有限的,矿工能做到的攻击是:

撤销在矿工控制下矿工自己发送的交易(这个可以导致双重交易)

阻止一些或者所有的交易获得确认

阻止一些或者其他所有矿工挖有效区块

攻击者不能做到的是:

在没有和其他矿工合作的前提下,无法撤销其他人的交易

无法完全地阻止交易被发送

无法修改每个区块能够发行的比特币数量

无法凭空造币

无法向自己发送不属于他的币

(以上翻译自Bitcoin Wiki)

总结一下,比特币系统依赖于共识,如果有人出于各种原因想搞破坏,就会对比特币系统发起攻击。当他所拥有的算力超过50%时,他就具备了成功攻击的能力,这个也被称为51%攻击。一般来说,5攻分为两种,一个是双重支付攻击,一种是DOS攻击。

矿工有没有必要这么做呢?这是又涉及到成本的问题,因为拥有了51%以上算力的矿工,必然是投入了大量的金钱,这要看他发起攻击对于他有什么好处?这是另外一个话题了……

作为比特币收发者的个人,注意一笔交易要至少6个确认数才能算是安全(确认数越多,修改难度越大)。共识靠大家,安全你我他

下一篇将会谈到的基本概念是硬分叉和软分叉。

参考文献

[1] Mastering Bitcoin 第二版 https://github.com/bitcoinbook/bitcoinbook

ChangLog

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180421G0U09800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券