以公共区块链分布式账本为基础的加密货币,如比特币、以太币等,需要靠分布在世界各地的矿工(mine)不停地运作来维持系统功能。
所谓矿工,就是运行加密货币软件的计算机节点。
矿工们主要完成两种任务
1、计算和校验交易,并生成账本的区块数据;
2、矿工之间的计算竞赛,以决定谁的区块为“正选”数据。
前者的作用是维护加密货币协议的基本功能,后者对账本数据本身没有意义,但可以激励矿工们继续挖
矿来获取更多的货币收益。
比特币是最早把这两种任务巧妙结合起来的系统,使得挖矿(币)和记账成为不可分割整体,矿工在努力挖矿的同时也完成了账本区块数据的生成工作。
早期的矿工由一些技术爱好者组成,他们提供机器用于分布式记账。到了后期,挖矿已经发展成为一种职业,组成了专门从事挖矿的团队。
由于挖矿得到的货币数量和机器的运算能力大小成正比,因此从概率上看,采用越快速的硬件,在所有矿工中算力的占比越高,就能够获得越多的货币。
矿工们为了获得更高的收益,彼此之间在算力上进行较量,算力低的矿工会因挖不到币而逐渐被淘汰出局。从参与的硬件上看,最开始矿工们采用通用的CPU (中央处理器)来挖矿。后来大家发现GPU (图形处理器)能够提高并行计算能力和吞吐量,效率更高,于是纷纷采用GPU挖矿。再后来,出现了专门为挖矿设计的集成电路(Application Specific Integrated Circuit, ASIC) 芯片,目前已经成为挖矿行业主流的硬件设备。
随着全网算力的不断增加,单打独斗的小矿工已经没有规模优势,挖到加密货币的时间非常不确定,运气不好的话可能要几年才能挖到一个有效区块,有点像买彩票中奖一样。
为了使收人更加平稳,矿工们可以组成矿池(Mining Pool),由矿池管理者统一分派挖矿的计算任务,挖到的币都归矿池管理者所有。
矿池管理者根据各个矿工贡献的算力比例,定期分配挖矿的收入。矿池已经成为加密货币区块链网络算力的主要来源,零散的矿工由于经济上不占优势,基本上已退出了挖矿的行列。
矿池能够给矿工带来相对稳定的收入,但是也带来了新的问题。矿池把原来分散的算力集中起来统一管理, 这违背了区块链的去中心化原则,在矿池规模不断增加的过程中,有的矿池在全网的算力达到了相当大的比例,甚至排前几位的矿池的算力总和可以超过全网的51%。
从理论上说,如果能够控制整个网络达到或超过51%以上的算力,就可以控制区块链的记账权。这样比特币等加密货币依赖的分布式记账方式将被破坏,同一个货币可以多次使用(即重复花费,也叫双花,doublespend),这样,信用体系将不复存在,加密货币体系将被彻底摧毁。
但实际上比特币等加密货币的PoW共识算法,因其具有一定的随机性,有时也称作彩票算法
矿池算力集中产生51%攻击问题,准确来说,应当是50%+问题,从原理上看,只要能控制全网50%以上算力,攻击者将可以修改账本和阻止他人挖矿,从而威胁到整个系统安全。
那么拥有50%以上的算力是怎样劫持区块链的数据的呢?一种方法是通过分叉( forking)的方式。
如图9所示,正常的矿工在区块链上挖矿,攻击者把自己的货币花掉(购买服务商品等),这笔花费会记录在区块链的数据中,假定交易记录在区块4中。攻击者这时暗中伪造另一条区块链的数据,将自己地址上的货币重新转账到其他地址,记录在自己伪造的区块4a中。
由于在算力上的优势,攻击者比网络中其余的矿工计算得更快,从而得到一条更长的区块链数据,如图9中区块4a到区块7a为攻击齐的链,比其余矿工的链(区块4到区块6)更长。
在公共区块链中,最长的链始终代表正确的分支,攻击者只要把自己的较长的区块数据发布到网上,其余矿工就会认同攻击.者的数据,从而接受区块4a到区块7a的数据,而原来区块4中的交易被推翻和抹去,这样就达到了同一货币双重花费的目的。
从上述原理可以看到,攻击者要想更改账不数据,需要有一条比其他人更长的区块链数据。但是要实现这个目的,并不一定要拥有超过50%的算力。如,某个矿工运气特别好,挖到两个连续的区块。他可以先隐藏这两个区块,等到其他矿工挖出一个区块数据后,他再广播自己的两个区块,就可使得他人挖到的区块失效(因为长链占优)。这种做法称为“自私挖矿”(selfish mining),这就白白浪费了其他矿工的算力,而自私者获得了更多的收益。
那么矿工连续挖到两个区块的概率是多少呢?如果某矿工的算力占全网的比例为p,他连续算出n个区块的概率就是p^n。
当p=0.1 (10%)时,连续挖到2个区块的概率为1%;如果p=0.5 ( 50%)时,连续挖到两个区块的概率为25%,这已是较大概率的事件了。
从比特币的历史上看,确实发生过矿池连续挖到多个区块的事情。在比特币系统中,6个区块之前的数据被认为是相对可靠和难以推翻的。可是在2014年,大矿池Chashio挖到6个连续的区块,具备了逆转之前交易的可能,引发了社区对比特币安全性的担忧。该矿池当时的规模在50%上下,算出6个连续区块的概率约为1.5% 。概率虽小,但日积月累不停地挖矿。使得小概率事件也很可能发生。为此,Chsh.io也不得不承诺把规模控制在3.99以下。
发起51%的攻击并不是严格地需要51%的全网算力,实际上只要能够控制的算力接近50%,加上分布式网络的延时和随机数等偶然因素,还是有可能实施成功攻击的。
当然,只拥有50%左右算力时,由于攻击者和其余矿工的算力相差不大,需要较长的时间才能攻击成功。
还有研究表明,如果攻击者控制了33%的算力,再配合前面提到的“自私挖矿”等手段干扰其他矿工正常挖矿,将有能力最终控制整个网络。
比特币等采用公有区块链技术的加密货币,所有发生的交易在理论上都没有“最终性”(Finality),只要有足够的算力,都是可以被推翻的。在实际中,推翻之前的区块数据需要的算力和时间都相当惊人,所需成本可能远远大于收益,还不如按规矩挖矿,因此,即使存在理论上的可能性,也极少有人发动算力攻击。
51%攻击方法不能偷走别人地址里面的货币,却可以实现攻击者的货币多重使用,从而摧毁加密货币的信任体系,使得币价大跌,攻击者或许可以通过做空货币的方式获利。鉴于51%攻击的破坏性强,加密货币的参与者(如开发者、用户、矿工等)都会密切监视可能存在的攻击,并随时进行防备。
[1]邹均.张海宁.唐屹.李磊.区块链技术指南.机械工业出版社