美文网首页Ulord社区联盟0岁的产品经理区块链研习社
『学概念找员外』双重支付攻击(一)

『学概念找员外』双重支付攻击(一)

作者: 刘员外__ | 来源:发表于2019-03-29 14:13 被阅读1次

    接着上一篇的隐性共识继续讲,其实双重支付攻击也是一种破坏隐性共识的方法。对于双重支付大家肯定都不陌生,就是一份钱同时花两次,在现实生活中是不可能发生的,但是在网络世界里,尤其是本文谈到的比特币的世界里,这是完全有可能发生的,所以就需要一系列的计算机技术来防止这种可能性发生。

    攻击过程

    现在假设员外看到天宇家里有几个特别精致的手办,但是价格又特别贵,所以就想通过发起一个双重支付攻击来骗取到这几个手办。在谈好价格后,员外在自己的比特币钱包中给天宇的比特币地址上发起了一笔比特币交易,并向整个网络广播这笔交易。我们假设这笔交易由某个诚实节点来制造下一个区块,并把这笔交易放进了这个区块中。现在就有了一个由诚实节点发起,包括代表员外向天宇支付这笔交易在内的区块了。

    回顾一下之前讲过的,一笔交易就是一个数据结构,里面有员外的数字签名,一个付给天宇的钱包地址的指令和一个哈希值。这个哈希值代表了一个哈希指针,指向上一笔交易的输出,就是员外之前收到并在现在消费的比特币。这个指针必须指向一个已被所有区块认可的交易。

    好我们接着说这个双重支付攻击,由于最新的一个区块由一个诚实节点产生,其中包含员外向天宇支付比特币的交易记录。当天宇看到这笔交易被放入区块中后,就会认为员外已经向他付款,然后把手办给了员外。假设在下一个回合中被随机选中的节点恰巧被员外给控制了,那么员外就可以提议在下一个区块中,忽略自己之前那个包含支付给天宇比特币的那笔交易的区块,然后重新生产一个包含指向之前区块指针的区块。同时在这个区块中,员外还可以再放入一笔交易,把之前转给天宇的比特币转到自己的另一个账户中。至此,一个完美的双重支付攻击到此结束。

    因为这两笔交易用的都是同一笔比特币,最后注定只能有一笔交易被记录到区块链上,所以最后员外付给天宇的那笔比特币将会失效,天宇被双花了。

    识别攻击是否成功

    在员外侥幸发起这次双重支付攻击后,心里最想及时知道的必然是这次的攻击成功没。理论上来说,能否成功取决于最后哪个区块会被纳入长期的共识链,是员外转给天宇的那个区块?还是员外转给自己另一个账户所在的区块。那这两个区块到底哪个会被纳入取决于什么呢?在这个区块后面,诚实节点会选择在哪个区块后面继续延展自己的分支呢?

    对于这个问题并没有明确的答案。目前来看这两条分支长度一样,他们的区别仅是在于最后那个区块,并且这两个区块都是有效的。选择下一个区块的节点可以决定建立在其中一个区块上面,这个选择就决定了双重支付攻击的成功与否。

    微妙之处在于:从道德角度考虑,这两个分支截然不同,一个是包含付给天宇交易的区块,一个是包含员外把这些币双重支付给他自己地址交易的区块。但这个区别仅仅建立在我们知道员外先支付给天宇再试图双重支付这个故事的基础上。但从技术角度来看,这两笔交易完全一致,且都有效。节点没有办法分辨出哪一个是道义上合理合法的交易。

    相关文章

      网友评论

        本文标题:『学概念找员外』双重支付攻击(一)

        本文链接:https://www.haomeiwen.com/subject/oafnrqtx.html