区块链-共识攻击

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html算法

比特币的共识机制指的是,被矿工(或矿池)试图使用本身的算力实行欺骗或破坏的难度很大,至少理论上是这样。比特币的共识机制依赖于这样一个前提,那就是绝大多数的矿工,出于本身利益最大化的考虑,都会经过诚实地挖矿来维持整个比特币系统。然而,当一个或者一群拥有了整个系统中大量算力的矿工出现以后,他们就能够经过攻击比特币的共识机制来达到破坏比特币网络的安全性和可靠性的目的。安全

共识攻击只能影响整个区块链将来的共识,或者说,最多能影响不久的过去几个区块的共识(最多影响过去10个块)。并且随着时间的推移, 整个比特币块链被篡改的可能性愈来愈低。网络

理论上,一个区块链分叉能够变得很长,但实际上,要想实现一个很是长的区块链分叉须要的算力很是很是大,随着整个比特币区块链逐渐增加,过去的区块基本能够认为是没法被分叉篡改的。同时,共识攻击也不会影响用户的私钥以及加密算法(ECDSA)。区块链

共识攻击也不能从其余的钱包那里偷到比特币、不签名地支付比特币、从新分配比特币、改变过去的交易或者改变比特币持有纪 录。加密

共识攻击可以形成的惟一影响是影响最近的区块(最多10个)而且经过拒绝服务来影响将来区块的生成。 共识攻击的一个典型场景就是“51%攻击”。想象这么一个场景,一群矿工控制了整个比特币网络51%的算力,他们联合起来打算攻击整个比特币系统。因为这群矿工能够生成绝大多数的块,他们就能够经过故意制造块链分叉来实现“双重支付”或者经过拒绝服务的方式来阻止特定的交易或者攻击特定的钱包地址。.net

区块链分叉/双重支付攻击指的是攻击者经过不认可最近的某个交易,并在这个交易以前重构新的块,从而生成新的分叉,继而实现双重支付。有了充足算力的保证,一个攻击者能够一次性篡改最近的6个或者更多的区块,从而使得这些区块包含的本应没法篡改的交易消失。blog

值得注意的是,双重支付只能在攻击者拥有的钱包所发生的交易上进行,由于只有钱包的拥有者才能生成一个合法的签名 用于双重支付交易。攻击者在本身的交易上进行双重支付攻击,若是能够经过使 交易无效而实现对于不可逆转的购买行为不予付款, 这种攻击就是有利可图的。事件

举个例子:攻击者A在C的画廊买了描绘伟大的中本聪的三联组画 (TheGreatFire),攻击者A经过转帐价值25万美金的比特币与C进行交易。 在等到一个而不是六个交易确认以后,C放心地将这幅组画包好,交给了攻击者A。这时,攻击者A的一个同伙,一个拥有大量算力的矿池的人攻击者B,在这笔交易写进区块链的时候,开始了51%攻击。get

首先,攻击者B利用本身矿池的算力从新计算包含这笔交易的块,而且在新块里将原来的交易替换成了另一笔交易(好比直接转给了攻击者A的另外一个钱包而不是C的),从而实现了“双重支付”。这笔“双重支付”交易使用了跟原有交易一致 的UTXO,但收款人被替换成了攻击者A的钱包地址。社区

而后,攻击者B利用矿池在伪造的块的基础上,又计算出一个更新的块,这样,包含这 笔“双重支付”交易的块链比原有的块链高出了一个块。到此,高度更高的分叉区块链取代了原有的区块链,“双重支付”交易取代了原来给C的交易,C既没有收到价值25万美金的比特币,本来拥有的三幅价值连城的画也被攻击者A白白拿走了。

在整个过程当中,攻击者B矿池里的其余矿工可能自始至终都没有觉察到这笔“双重支付”交易有什么异样,由于挖矿程序都是自动在运行,而且不会时时监控每个区块中的每一笔交易。

为了不这类攻击,售卖大宗商品的商家应该在交易获得全网的6个确认以后再交付商品。或者,商家应该使用第三方的多方签名的帐户进行交易,而且也要等到交易帐户得到全网多个确认以后再交付商品。一条交易的确认数越多,越难被攻击者经过 51%攻击篡改。

共识攻击中除了“双重支付” 攻击,还有一种攻击场景就是拒绝对某个特定的比特币地址提供服务。一个拥有了系统中绝大多数算力的攻击者,能够轻易地忽略某一笔特定的交易。若是这笔交易存在于另外一个矿工所产生的区块中,该攻击者能够故意分叉,而后从新产生这个区块,而且把想忽略的交易从这个区块中移除。

这种攻击形成的结果就是, 只要这名攻击者拥有系统中的绝大多数算力,那么他就能够持续地干预某一个或某一批特定钱包地址产生的全部交易,从而达到拒绝为这些地址服务的目的。

须要注意的是,51%攻击并非像它的命名里说的那样,攻击者须要至少51%的算力才能发起,实际上,即便其拥有不到 51%的系统算力,依然能够尝试发起这种攻击。之因此命名为51%攻击,只是由于在攻击者的算力达到51%这个阈值的时候,其发起的攻击尝试几乎确定会成功。

本质上来看,共识攻击,就像是系统中全部矿工的算力被分红了两组,一组为诚实算力,一组为攻击者算力,两组人都在争先恐后地计算块链上的新块,只是攻击者算力算出来的是精心构造的、包含或者剔除了某些交易的块。所以,攻击者拥有的算力越少,在这场决逐中获胜的可能性就越小。

从另外一个角度讲,一个攻击者拥有的算力越多,其故意创造的分叉块链就可能越长,可能被篡改的最近的块或者或者受其控制的将来的块就会越多。一些安全研究组织利用统计模型得出的结论是,算力达到全网的30%就足以发动51%攻击了。 全网算力的急剧增加已经使得比特币系统再也不可能被某一个矿工攻击,由于一个矿工已经不可能占据全网哪怕的1%算 力。

可是中心化控制的矿池则引入了矿池操做者出于利益而施行攻击的风险。矿池操做者控制了候选块的生成,同时也控制哪些交易会被放到新生成的块中。这样一来,矿池操做者就拥有了剔除特定交易或者双重支付的权力。若是这种权利被矿池操做者以微妙而有节制的方式滥用的话,那么矿池操做者就能够在鲜为人知的状况下发动共识攻击并获益。可是,并非全部的攻击者都是为了利益。

一个可能的场景就是,攻击者仅仅是为了破坏整个比特币系统而发动攻击, 而不是为了利益。这种意在破坏比特币系统的攻击者须要巨大的投入和精心的计划, 所以能够想象,这种攻击颇有可能来自政府资助的组织。一样的,这类攻击者或许也会购买矿机,运营矿池,经过滥用矿池操做者的上述权力来施行拒绝服务等共识攻击。可是,随着比特币网络的算力呈几何级数快速增加,上述这些理论上可行的攻击场景,实际操做起来已经愈来愈困难。

近期比特币系统的一些升级,好比旨在进一步将挖矿控制去中心化的P2Pool 挖矿协议,也都正在让这些理论上可行的攻击变得愈来愈困难。毫无疑问,一次严重的共识攻击事件势必会下降人们对比特币系统的信心,进而可能致使比特币价格的跳水。然而,比特币系统和相关软件也一直在持续改进,因此比特币社区也势必会对任何一次共识攻击快速作出响应,以使整个比特币系统比以往更加稳健和可靠。