双重支付的问题:比特币是如何解决的?
数字货币的概念已经存在很长一段时间了,它并不是10年前比特币第一次出现的时候产生的。然而,我们以前所有的尝试都失败了,原因很简单——双重支付。
什么是双重支付?
名称几乎完全说明了这一点,而双重支付则是两次使用相同金钱的行为。这是一个特定于加密的问题,它不会影响传统的物理货币。一旦你花掉了你的钱,它就离开了你的财产,你就不能在其他地方再使用它,因为你没有它。
对于数字货币,情况就不同了,因为它们更容易复制和消费两次。这是任何想创造数字货币的人首先需要解决的问题之一,比特币的创造者Satoshi Nakamoto想出了一个解决方案。
解决双重支付的办法
为了解决这个问题,中本采用了共享公共账簿的概念,我们现在称之为区块链技术。这种想法也已经存在了一段时间,但直到2009年才与比特币本身一起实现。
这个过程相当简单——比特币持有者进行的交易与其他人进行的其他交易是分组的。这个组称为块,为了确保商人将得到他的钱,以及不会发生双重支付,需要验证分组在块中的交易。
一个选择这样做是有一个能够集中的第三方进行验证,但如果是这样的话,他们将会是一个责任,任何攻击,设法把服务将对整个加密货币体系产生大影响。
比特币选择采用的另一种选择是,让一大群个人单独参与解决区块(验证交易),以换取回报。这样,即使他们中的一些人成为黑客攻击的受害者,剩下的人仍然可以完成这个过程。在交易被验证之后,它们被存储到区块链中,区块链作为一种确认,即商家确实得到了支付,并且客户的代币确实被花掉了。
如果某人同时进行两个事务怎么办?
这种可能性也存在,如果有人使用相同的资金进行两个交易,那么首先解决并存储的交易将被认为是有效的交易。在此期间,第二个将不会通过,商人将不会收到资金。考虑到这可能会对商家造成损害,建议他们在解决了几个块(每个块在10分钟内创建)之前不要发货。
正因为如此,商家被建议等待大约一个小时,这样6个街区就可以解决。在这一点上,商人将肯定知道他们是否得到支付或被骗,他们可以根据情况继续。同时,客户无法返回和逆转事务,因为这样做将占用大量的资源、知识和对区块链的控制,而这是任何个人都无法做到的。
双重支付还可能吗?
不幸的是,理论上有可能进行双重支消费攻击,并设法将同样的钱花两次。然而,这在理论上是可能的,但实际上是非常困难的,而且目前还没有人成功的已知案例。有几种情况下,这种情况可能会发生,但是,如前所述,这只能在理论上实现。
1. 种族攻击
第一种方法叫做种族攻击,它发生在那些接受比特币和其他货币以换取服务的人身上。然而,为了实现这一点,商家必须立即放弃他们的商品,而不是等待其他确认区块出现在区块链上。骗子可能同时使用两笔交易,如果商家决定不等待确认,则有可能先处理发送给其他人的付款。
2. 芬尼攻击
这种类型的攻击与race攻击非常相似,只是它是由一个决定尝试欺骗一个商人的矿商进行的。例如,如果一个矿商拥有两个地址,其中一个拥有比特币,他们可能会将BTC从一个地址发送到另一个地址。然后,他们对数据块进行挖掘,但不广播结果,因此交易仍处于一种“不确定状态”。“在这一点上,他们可能会欺骗商家,选择不等待额外的区块被解决,并在收到双倍付款后放弃他们的商品和服务。”
这是当矿商广播包含其原始事务(即它们发送给自己的事务)的块时。在这种情况下,发送给商人的交易将由其他人来解决,它将无效,因为相同的钱已经发送到矿商的第二个地址。
3. 51%的攻击
第三种也是最后一种攻击形式是51%的攻击,只有控制了区块链网络一半以上的哈希率的人才能进行这种攻击。这在理论上也是极其困难的,因为没有人有足够的资源和计算能力来与正在工作的大型真实矿商集团竞争。
在这个场景中,他们可能使区块链的一个私有分支看起来像主链,因为由于更高的哈希率会出现更多块,所以它会变得更快。通过这种方式,他们可以欺骗商家,让他们以为他们收到的钱以前没有花过,而实际上,攻击者是在执行双重花费攻击。