区块链入门 | 区块链51%算力攻击其实并没有那么可怕
在比特币和加密货币世界中,遇到很多从未见过的概念和表达,并且真正理解其含义的现象并不少见。在本文中,我将试图揭开其中一个概念的神秘面纱,即著名的51%攻击。
51%攻击与其它概念密不可分,例如挖矿、共识机制、孤块和双花问题,如果读者不熟悉这些名词将会很难理解。在这里为不限制我对51%攻击的讨论,我将进行简要讲解。
简介
比特币是基于分布式账本的点对点支付系统,该账本由网络所有参与者共享。分布式账本就是一个记录簿,网络权益持有者之间的所有交易往来都记录在上面。这个账本由一个个区块链接而成,新的交易被记录在新区块上,新区块被不断被添加到现存链上,因此有了区块链这个术语。向现有的链添加新区块(连同其上所载交易)需要高强度的计算工作,我们将这项工作称为挖矿,由比特币网络上被称为“矿工”的指定节点执行。矿工的计算能力被称为哈希率,以每秒哈希数(H/s)或若干倍的哈希数来度量。所有的矿工都在互相竞争,谁赢了谁就可以把新区块加到链上,并得到相应的奖励。哈希率越高赢得比赛的机会就越大。
由于比特币账本是分布式的,例如,网络上的每一个节点都有一份区块链的副本,因此不同的参与者有必要就一套规则达成一致,使整个网络的支付系统可靠且一致。我们将这套规则称为共识协议。
共识协议要解决的问题之一是如何处理不同的节点最终呈现出不同区块链版本的场景。当两个矿工几乎同时各自延长区块链时就会出现这种情况,导致出现两个版本略有不同且相互竞争的账本。这种不一致通过等待下一个矿工将新的区块添加到两条链中的任一条来解决。首先被延伸的链将赢得网络共识,另一条链从而将被丢弃。用一个通用说法来解释就是,最长的链是国王。包含在被丢弃的链上的区块(通常只有一个)被称为孤块。孤块上包含的交易(除非也被添加到最长链)则会被返回内存池,这是一种不确定状态,所有未被确认的交易都等待被选择并打包进一个新区块。
如果一笔交易(无论是否来自孤块)在内存池等待时间过长(几天),该交易都将被取消,资金会被返还到发送者钱包。这将可能导致双花问题,最终用于购买商品或服务的交易会被取消,并且买家在保留原先购买的商品或服务的同时收回其资金。
为了避免双花问题,只有在将一定数量的新区块添加在该笔交易相关的区块之上后,此交易才会被确认。在比特币中,新区块数被设置为6个。
现在我们已经了解所有的概念和术语了,可以来最终讨论51%攻击了。
51%攻击
51%攻击并不是试图破坏或干扰共识协议,相反,它遵循协议规则帮助攻击者更改区块链的内容从而受益。为了解释如何实施51%攻击,我们需要考虑以下情形。一组超过整个比特币网络51%算力的矿工决定将自己从其它部分中分离,同时在自己的部分中保持通信。
描述1:一组超过整个比特币网络51%算力的矿工决定将自己从其它链中分离,同时在自己的链中保持通信。
在切断与其它部分的连接后,该组矿工将照常进行挖矿工作,不同的是,他们将不会与另外一组矿工共享任何进度,也不会收到另一组矿工的进度更新。换句话说,虽然在分离时,两组矿工拥有相同的账本副本,但是在分离后,两组将开始彼此独立延伸其内部共享的副本。现在,哪个区块链版本将更快被延伸?由于分离的组(攻击者)算力已经超过剩余部分,因此,它能比剩余组更快的延伸自己的链副本。给定一定的时间,两个版本的链的长度之差将与两组哈希算力之差在统计上成正比。
描述2:由于分离的组(攻击者)拥有更大算力,因此他们能比剩余部分更快地延伸其版本链。
如果现在分离组的矿工重新加入剩余组,则该链的两个竞争版本将在整个网络中广播,根据共识协议规则,节点将保留较长版本链并删除较短版本。这就意味着,从分离之时到重聚之时,剩余组所挖的较短链上的区块将被孤立,区块上的交易(至少一部分交易)将被返还至内存池。
描述3:如果与网络分离的矿工重新加入剩余组,且他们的区块链版本更长,其将赢得共识。
如果被返还到内存池的交易被用于购买商品,这种情况将打开双花的可能性大门。最重要的是,最初从网络中分离出来的一组矿工可以阻止那些被选择并打包进新区块的交易,因为他们仍然拥有超过全网51%的算力。如果这些交易在内存池中停留时间超过一定时间限制(比特币为72小时),则交易取消,资金会返还给原始接收者(买方钱包)。这时,买方将保留资金并获得用这些资金购买的商品。如果51%攻击是有预谋和协同进行的,攻击者可能会利用这一尚未解决的双花问题,拥有他们最终并没有支付的商品。
作者 | Ettore Murabito 来源 | Medium 翻译 | 头等仓(First.VIP)转载请保留文末信息。 原文:https://medium.com/swlh/the-51-attack-what-is-it-d295e70b9ac4 稿源(译):https://first.vip/shareNews?id=2255&uid=1