据报道,全球第26大加密货币BTG(比特币黄金)近期遭51%攻击。一名恶意矿工获得了比特币黄金网络至少51%算力,临时控制了BTG区块链,在向交易所充值后迅速提币,再逆转区块,成功实施双花。攻击者可能从交易所窃取超过388200个BTG,价值高达1860万美元。
啥是“双花攻击”(double spend attack)?又叫“双重消费攻击”,就是一笔资金,因为欺诈手段或者系统bug被花费了两次,并且取得了该笔资金的两次服务。
为了应对双花问题,比特币网络是这样处理的:每笔交易都需要先确认对应比特币之前的状态,如果它之前已经被标记为花掉,那么新的交易会被拒绝。
如果先发起一笔交易,在它被确认前,也就是这个时间段的交易还未被记账成区块block时,进行矛盾的第二笔交易,那么在记账时,这些交易会被拒绝。
如果欺诈者刻意把第一笔交易向一半网络广播,把第二笔交易向另一半网络广播,然后两边网络正好有两个矿工几乎同时取得记账权,把各自记的区块发布给大家的话,区块链网络可能会混乱,为此,区块链的规则是这样的:先选择任意一个账本都可以,这时候原来统一的账本出现了分叉,但是在两个账本中各只有一笔交易,欺诈者也得不到好处。接下来,下一个矿工选择在A基础上继续记账的话,A分支就会比B分支更长,根据区块链的规则,最长的分支会被认可,短的分支会被放弃,账本还是会回归为一个,交易也只有一笔有效。
但是,如果欺诈者这么做:如果是A分支被认可(B也一样),相应交易确认,拿到商品之后,立刻自己变身矿工,争取到连续两次记账权,然后在B分支上连加两个区块,就像这样:于是B分支成为认可的分支,A被舍弃,A分支中的交易不再成立,但他已经拿到商品,欺诈成功。
在B分支落后的情况下要强行让它超过A分支,其实是挺难的,假设欺诈者掌握了全网1%的计算能力,那么他争取到记账权的概率就是1%,两次就是10的4次方分之一。这时,建议大家在一笔交易确认后,也就是一个区块被记下来之后,再等5个区块,也就是等6个区块被确认后再把交易对应的商品交付。这样,欺诈者还能追上的概率就几乎为0。
如果欺诈者掌握了全网50%以上的计算力,那么,即使落后很多,他追上也只是时间问题,这就是比特币的“51%攻击”——这是需要警惕的问题。虽然在比特币网络中,用户已经极多,全网算力总和非常大,如果真掌握50%以上,也不用靠这个高成本手段欺诈了,挖矿的收益更高,何必呢。
但是,在小的区块链网络(节点太少)中就非常危险。而且,即便没有50%以上的算力,还是有机会成功的,只是概率低而已。
也许当比特币也被“双花攻击”的时候,我们一直猜测的“谁是中本聪”就有答案了。
作者:袁晔,水木清华区块链基金执行董事,盗火者区块链应用联盟发起人。