双重支付问题是指同一单位货币被同时多次消费的现象。这会导致支出记录与可用货币金额之间出现差异。双重支付最常与 比特币 联系在一起,因为熟悉区块链协议运作方式的熟练程序员可以更轻松地操纵或复制数字信息。比特币 也是窃贼进行双重支付的目标,因为 比特币 是一种点对点的交换媒介,不经过任何中间机构或机构。[1]
例如,如果有人走进一家只有 10 件衬衫的服装店,在已经向收银员支付了 10 件衬衫的费用后,又试图购买另外 10 件。虽然使用实物货币很难做到这一点,部分原因是最近的交易和当前所有者可以轻松地进行实时验证,但在数字货币中,这种操作的可能性更大。比特币的完全数字货币网络是去中心化的,这意味着它没有中央机构、监管者或管理团体来监管窃贼和黑客。虽然传统的安全实体不监控 比特币 网络是否存在双重支出,但已实施了其他网络防御措施来对抗那些可能威胁网络共识机制和交易账本的攻击,从而为 比特币 投资者提供信心。
从根本上说,双重支付(双花)是指恶意行为者发送一笔交易的副本,使该副本看起来合法,同时保留原始资金,或者完全抹除第一笔交易。对于比特币或任何数字货币来说,这都是可能且危险的,因为数字信息更容易被复制。在某些特定情况下,犯罪分子会尝试对比特币进行双重支付。
攻击者会同时将相同的比特币发送到两个(或更多)不同的地址。这种类型的攻击试图利用比特币网络较慢的10分钟出块时间,在此期间,交易被发送到网络并排队等待矿工确认和验证,以便添加到区块链中。通过在区块链上偷偷插入一笔额外的交易,窃贼可以制造出原始比特币金额尚未被消费的假象,或者操纵现有的区块链并费力地重新挖掘具有虚假交易历史的区块,以支持预期的未来双重支付。
攻击者向网络发送多个数据包(数据单元)以撤销交易,从而制造交易从未发生过的假象。通过这种方式,攻击者在收到交易对手的资产或服务后,试图通过撤销交易来进行比特币双重支出,从而同时保留收到的商品和已发送的比特币。
当一组矿工控制了网络 50% 以上的哈希率(算力)时,他们就会对加密货币区块链发起 51% 攻击。控制网络 51% 的节点使管理方能够更改区块链。如果攻击者能够阻止新交易获得确认,那么部分或所有用户之间的支付可能会停止。他们同样有能力撤销在他们掌权期间所做的决定。工作量证明(PoW)等共识机制旨在避免的问题之一就是通过撤销交易,用户可能会进行“双重支付”。对于参与率较高的代币,51% 攻击是一项极其艰巨且困难的任务。在大多数情况下,攻击者群体必须能够掌握所需的 51% 算力,并准备好在时机成熟时注入备用区块链。随后,他们必须在算力上超过主网络。进行 51% 攻击的最大障碍之一是其成本。例如,比特大陆 S19 XP Hydro 是目前最先进的专用集成电路(ASIC)矿机,它拥有 255 TH/s(每秒万亿次哈希)的哈希率,售价超过 19,800 美元。FoundryUSA 拥有 54.42 EH/s(每秒百亿亿次哈希)的算力,占整个比特币网络哈希率的 23.75%,紧随其后的是 AntPool(41.49 EH/s,占比 18.12%)和币安矿池(34.48 EH/s,占比 15.06%)。[2]
Finney 攻击以 Hal Finney 的名字命名,他恰好是 比特币 交易的第一位接收者,也是第一个对比特币源代码发布发表评论的人。这是一种具有以下特征的双重支付攻击:
其过程如下:
如果从找到区块到攻击者发送付款且商家接受付款的时间为“t”,而找到区块的平均时间为“T”,则在此期间网络上找到另一个区块的概率为 t/T。在这种情况下,攻击将失败,并且攻击者将损失区块奖励 B。这意味着尝试攻击的平均成本约为 (t/T) * B。根据经验,商家应至少等待 t=V*T/B(V 是交易价值)的时间,以确保针对他进行此类攻击是无利可图的。但这可能还不够,因为敏捷的攻击者可以使用同一个区块进行多次攻击,从而可能获得其总价值。攻击者的哈希率越低,他/她实施攻击的机会就越少。如果攻击是为了获取某些流动性差的商品,很难让对该商品的需求与找到区块的时机重合。如果攻击是为了获取流动性强的资产(例如将比特币兑换成其他货币),机会虽然一直存在,但商家很可能会要求多次确认。这使得该攻击在实践中难以实施。[4]
竞争攻击是一种特定形式的双重支出(Double-Spending)尝试,这是一种恶意活动,即同时创建两笔交易,使用同一笔资金进行两次支付。这种攻击要求收款方在交易未确认的情况下接受付款。攻击者向受害者发送一笔未确认的交易。与此同时,他们向网络广播一笔冲突的交易。由于受害者首先观察到了发给自己的交易,他们认为自己将会收到款项。然而,由于网络其余部分先看到了那笔双重支出交易,受害者很可能最终无法收到钱。当攻击者与受害者的节点有直接连接,并将冲突交易直接提交给矿工时,此类攻击的实施难度会显著降低。[6]
中本聪的白皮书中建议使用时间戳服务器作为双重支出问题的解决方案。该服务器对一组交易区块进行哈希处理,然后将哈希值广播到比特币网络中的每个节点。此时间戳证明了哈希中的任何信息都不可能在哈希发布之后生成。由于每个时间戳在其哈希中都包含前一个时间戳,这创建了一个不可篡改(不可更改)的交易发生顺序日志。每个时间戳都建立在之前的时间戳之上。总之,区块链通过向比特币网络中的所有节点广播交易组并为其添加时间戳来防止双重支出。由于交易在区块链上被记录了时间戳,并且在数量上与之前的交易相关联,因此它们是不可逆且难以篡改的。[2]
自2009年第一个比特币客户端发布以来,比特币的区块链保存了所有已执行交易的详尽记录,以便正确理解区块链如何避免双重支出。由于每笔交易都通过加密哈希与前一个区块相连,因此无人可以篡改记录。该数据库被称为区块链,是因为每隔十分钟就会有一批新的交易(称为区块)被添加到其中。
避免双重支出意味着停止两次使用相同的金额。如果随机数(Nonce)被设置为相同,则只有其中一笔交易会被挖掘,且大多数情况下是具有更高 Gas 价格的那一笔,但无论哪种情况,最终都只会发生一笔交易,因此不会发生双重支出。\[3\]在以太坊中使用了两种类型的随机数(Nonce):
2019年12月,一段病毒式传播的视频展示了比特币在接受比特币支付的场所被“双重支出”的过程。这些攻击是通过使用“替代费用”(Replace-By-Fee,简称 RBF)实现的,这是对 比特币 协议的一项略带争议的升级。第一笔交易先发送给商家,随后发送附带更高费用的第二笔交易。这笔 RBF 交易覆盖了第一笔交易,因为更高的费用意味着它将被优先处理,从而实现了双重支出。这些攻击之所以奏效,是因为商家接受了未经确认的交易。
在同年早些时候发生的类似事件中,一些加拿大的 比特币 持有者能够在不实际兑现的情况下“兑现”他们的 比特币。据报道,他们将 比特币 发送到 比特币 ATM 机并提取了现金。在收到现金后,由于交易尚未被“确认”,他们取消了这些交易。[5]
2026年6月2日。15:09 UTC
编辑摘要:
Updated tag id to glossary and removed double-spending overview
