双花攻击——共识攻击介绍

双花攻击(Double Spending Attacks)是指同一个数字货币可以花费一次以上。

区块链中,每一笔交易都是一个请求。区块链会验证这个交易的请求,并检査其所使用的资产的有效性、是否使用了己花费的资产来决定是否提交进入共识,并广播成功验证的账本。如果系统对双花攻击没有防范,将会是一件非常可怕的事情。

这也是每一个区块链必须要解决的问题,在不同的共识体系下解决方案也会不同。

(1)PoW共识算法(查看什么是pow

在PoW体系下,系统同时允许存在多条分叉链(什么是区块链分叉),每一条链都可以声称自己是正确的。但是有一个最长有效原理,即不管在什么时候,最长的那条区块链被认为是拥有最多的工作量,称之为主链。当然,如果其他的分支链在接下来获得了更多的工作量,并超越了原先主链的长度,那么主链就会变成这条新链,而之前的主链则会被认为是无效的链,而且在这个分叉上所进行的交易会被认为是无效的,转而以新的主链为主。比特币目前大概需要12个区块的确认时间,才能基本确定某笔交易的不可篡改,因为要超越这一工作量将是非常困难的,并且攻击的代价会随着区块数的增加变得越来越困难。

在这个过程中有一种可能,在比特币的众多分支中,假设在第一条链分支上花费了一笔钱,再假设黑客能操控算力,让第二条链能拥有更多的算力并超越了第一条链的长度,那么第一条链的交易便相当于回滚了,黑客就能重新再拥有第一条链上花费掉的比特币,这个过程就是比特币上的双花。

因此,PoW共识算法要求等待一定的区块确认数,当工作量达到几乎无法超越、回滚的状态时,才可以确认为资产的成功转移。

(2)PoS、DPoS、DBFT共识算法

此类算法是确定性的,交易一旦确认就不可逆转,因此没有双花攻击。

双花攻击的特例是重放攻击,即攻击者“重放”他在网络上“窃听”或在区块链中“看到”的消息。由于这样会导致整个验证实体重做计算密集型的动作和/或影响对应的合约状态,同时它在攻击侧又只需要很少的资源,因此重放攻击也是所有区块链必须要解决的一个问题。如果是一笔支付交易,那么问题就更大了,重放可能会导致在不需要付款人的参与下,多于一次的支付。

对于UTXO模型,要防止重放攻击,共识节点只需要对收到的交易检査其Hash是否在账本中存在,或者检査交易的input是否已经被花费即可。

对于Balance模型,在交易中放置一个nonce值,要防止重放攻击,共识节点只需要对收到的交易检査其Hash是否在账本中存在即可。

其他区块链专业名词:

多重签名——典型的数字签名技术

HMAC——典型的数字签名技术

时间戳服务器

拜占庭将军问题是什么

868区块链学习网为您整理《双花攻击——共识攻击介绍》仅供参考。