在比特币和加密货币世界中,有很多从未接触过的概念和表达方式。本文将尝试揭开其中一个神秘的概念,即著名的51%攻击。
51%攻击与其他概念密不可分,例如挖矿、共识机制、孤块和双花问题。如果读者不熟悉这些名词,将很难理解。在本文中,我们将简要讲解这些概念,以便更深入地理解51%攻击。
比特币是基于分布式账本的点对点支付系统,该账本由网络内所有参与者共享。分布式账本是一个记录簿,网络中的所有交易都被记录在上面。这个账本由一个个区块链接而成,新的交易被记录在新区块上,新区块不断添加到现有链上,因此出现了区块链这个术语。
将新区块添加到现有链上需要高强度的计算工作,我们称之为挖矿。矿工计算能力称为哈希率,以每秒哈希数或若干倍的哈希数来度量。所有的矿工都在互相竞争,谁赢了谁就可以把新区块加到链上,并得到相应的奖励。哈希率越高,赢得比赛的机会就越大。
比特币账本是分布式的,例如,网络上的每一个节点都有一份区块链的副本。因此,不同的参与者需要达成一致的规则,使整个网络的支付系统可靠且一致。我们称这套规则为共识协议。
共识协议需要解决的问题之一是处理不同的节点最终呈现出不同区块链版本的情况。当两个矿工几乎同时分别延长区块链时,就会出现两个版本略有不同且相互竞争的账本。这种不一致通过等待下一个矿工将新的区块添加到两条链中的任一条来解决。首先被延伸的链将赢得网络共识,另一条链将被丢弃。包含在被丢弃的链上的区块被称为孤块。在孤块上的交易(除非它们也被添加到最长链上)将被返回内存池。
如果一笔交易在内存池等待时间过长(几天),该交易将被取消,资金将返回给发送者钱包。这将可能导致双花问题,最终用于购买商品或服务的交易将被取消。为了避免双花问题,只有在一定数量的新区块添加在该笔交易相关的区块之上后,该交易才会被确认。在比特币中,新区块数被设置为6个。
现在我们已经了解了所有的概念和术语,可以开始最终讨论51%攻击了。
51%攻击并不是试图破坏或干扰共识协议,相反,它遵循协议规则帮助攻击者更改区块链的内容并从中受益。
为了实施51%攻击,一组矿工将超过整个比特币网络51%的算力,并将自己从其它部分中分离,同时在自己的部分中保持通信。在切断与其他部分的连接后,该组矿工将进行挖矿工作,但不与另一组矿工共享任何进度,也不会收到另一组矿工的进度更新。因此,虽然在分离时,两组矿工拥有相同的账本副本,但是在分离后,两组将开始彼此独立地延伸其内部共享的副本。
由于分离组的算力已经超过剩余部分,因此分离组能比剩余组更快地延伸自己的链副本。给定一定时间,两个版本的链的长度之差将和两组哈希算力之差在统计上成正比。
如果被分离的矿工重新加入剩余组,则两个竞争版本的链将在整个网络中广播。根据共识协议规则,节点将保留较长的版本链并删除较短的版本。这意味着,从分离时到重聚时,剩余组所挖的较短链上的区块将被孤立,其中的交易(至少一部分交易)将被返还至内存池。
被返还至内存池的交易(如果被用于购买商品)可能会导致双花问题。最初从网络中分离出来的一组矿工可以阻止那些被选择并打包进新区块的交易,因为他们仍然拥有超过全网51%的算力。如果这些交易在内存池中停留时间超过一定时间限制(比特币为72小时),则交易将被取消,资金将返回给原始接收者。这就意味着,攻击者可能会获得他们最终并没有支付的商品。
因此,51%攻击是一个非常危险的攻击方式,攻击者可以在保持共识协议规则的同时更改区块链的内容并从中受益。