当一个或者一群拥有了整个系统中大量算力的矿工出现之后,他们就可以通过攻击比特币的共识机制来达到破坏比特币网络的安全性和可靠性的目的。
共识攻击的典型场景就是“51%攻击”。也就是,一群矿工控制了整个比特币网络51%的算力,他们联合起来攻击整个比特币系统。由于这群矿工可以生成绝大多数的块,他们就可以通过故意制造块链分叉来实现“双重支付”或者拒绝对某个特定的比特币地址提供服务。
1.故意制造块链分叉实现“双重支付”
这种情况是:攻击者在使旧分叉上的交易记录失效,然后在新分叉上重新生成一个同样金额的交易,从而实现双重支付。举个例子来说明:
攻击者Mallory在Carol的画廊买画,Mallory通过转账价值25万美金的比特币与Carol进行交易。在等到1个而不是6个交易确认后,Carol将画包好交给了Mallory。
这时,Mallory的一个同伙,一个拥有大量算力的矿池的人Paul,在这笔交易写进区块链的时候,开始了51%攻击。首先,Paul利用自己矿池的算力重新计算包含这笔交易的块,并且在新块里将原来的交易替换成了另外一笔交易(比如直接转给了Mallory的另一个钱包而不是Carol的),从而实现了“双重支付”。这笔“双重支付”交易使用了跟原有交易一致的UTXO,但收款人被替换成了Mallory的钱包地址。
然后,Paul利用矿池在伪造的块的基础上,又计算出一个更新的块,这样,包含这笔“双重支付”交易的块链比原有的块链高出了一个块。按照最行链原则,高度更高的分叉区块链取代了原有的区块链,“双重支付”交易取代了原来给Carol的交易,Carol既没有收到价值25万美金的比特币,价值25万美元的画也被Mallory白白拿走了。
为了避免这类攻击,售卖大宗商品的商家应该在交易得到全网的6个确认之后再交付商品。
2.拒绝对某个特定的比特币地址提供服务
一个拥有了51%算力可以轻易地忽略某一笔特定的交易。如果这笔交易存在于另一个矿工所产生的区块中,该攻击者可以故意分叉,然后重新产生这个区块,并且把想忽略的交易从这个区块中移除。这种攻击造成的结果就是,只要这名攻击者拥有系统中的绝大多数算力,那么他就可以持续地干预某一个或某一批特定钱包地址产生的所有交易,从而达到拒绝为这些地址服务的目的。
比特币系统矿工的算力被分成了两组:诚实算力和攻击者算力,两组都在争先恐后地计算块链上的新块,只是攻击者算力算出来的是精心构造的、包含或者剔除了某些交易的块。因此,攻击者拥有的算力越少,在这场决逐中获胜的可能性就越小。相反,一个攻击者拥有的算力越多,其故意创造的分叉块链就可能越长,可能被篡改的最近的块或者受其控制的未来的块就会越多。
网友评论