双花攻击 #
双花攻击(double spend attack)又叫双重消费攻击。就是一笔资金,攻击者通过不停发起和撤销交易,将一定数额的代币反复在账号之间转账实现获利。
对于双花问题,区块链网络是这么应对的:
1、每笔交易都需要先确认对应比特币之前的状态,如果它之前已经被标记为花掉,那么新的交易会被拒绝。
2、如果先发起一笔交易,在它被确认前,也就是这个时间段的交易还未被记账成区块block时,进行矛盾的第二笔交易,那么在记账时,这些交易会被拒绝。
如果诈骗者可以把第一笔交易向一半网络进行广播,把第二笔交易向另一半网络广播,然后两边正好有两个矿工几乎同时取得记账权,把各自的block发布给大家的话(这个概率很低),网络是不会混乱的。
区块链的规则是这样的:先选择任意一个账本都可以,这时候原来统一的账本出现了分叉:
但是在两个账本中各只有一笔交易,诈骗者不会有好处。接下来,下一个矿工选择在A基础上继续记账的话,A分支就会比B分支更长,根据区块链的规则,最长的分支会被认可,短的分支会被放弃,账本还是会回归为一个,交易也只有一笔有效:
那么这个诈骗犯会这么做:如果是A分支被认可(B也一样),相应交易确认,拿到商品之后,立刻自己变身矿工,争取到连续两次记账权,然后在B分支上连加两个block:
于是B分支成为认可的分支,A被舍弃,A分支中的交易不再成立,但他已经拿到商品,诈骗成功。
在B分支落后的情况下要强行让它超过A分支,其实是挺难的,假设诈骗者掌握了全网1%的计算能力,那么他争取到记账权的概率就是1%,两次就是10的负4次方。但这个概率还没有太低。
如果诈骗者算力占据绝对优势,那么,即使落后很多,他追上也只是时间问题,这就是比特币的“51%攻击”,也就能实现双花攻击了。
区块链网络是一个分布式系统,没有一个绝对的控制中心能够监控整个系统,自然很难发现哪个节点可能会控制超过51%算力。而当某个节点掌控超过51%算力,并且对区块链网络系统进行双花攻击时,人们能够做的仅是让合作的交易所暂时提升交易确认次数。但这并不能从根本上阻止攻击者,只不过提升了其攻击成本。