# Double Spending Problem

> 双重支付问题是指同一单位货币被同时多次消费的现象。这会导致支出记录与可用货币金额之间出现差异。

- Canonical URL: https://dev.iq.wiki/zh/wiki/double-spending-problem
- Categories: Glossary
- Created: 2023-01-21T06:30:22.781Z
- Last updated: 2026-06-02T15:09:06.985Z
- Source: IQ.wiki — the world's largest blockchain and crypto encyclopedia (https://iq.wiki)

---

双重支付问题是指同一单位货币被同时多次消费的现象。这会导致支出记录与可用货币金额之间出现差异。双重支付最常与 [比特币](https://iq.wiki/wiki/bitcoin) 联系在一起，因为熟悉区块链协议运作方式的熟练程序员可以更轻松地操纵或复制数字信息。[比特币](https://iq.wiki/wiki/bitcoin) 也是窃贼进行双重支付的目标，因为 [比特币](https://iq.wiki/wiki/bitcoin) 是一种点对点的交换媒介，不经过任何中间机构或机构。[\[1\]](#cite-id-ho6bfzijcvs)​

[YOUTUBE@VID](https://youtube.com/watch?v=phLSjZdDc5A)



## 概览

例如，如果有人走进一家只有 10 件衬衫的服装店，在已经向收银员支付了 10 件衬衫的费用后，又试图购买另外 10 件。虽然使用实物货币很难做到这一点，部分原因是最近的交易和当前所有者可以轻松地进行实时验证，但在数字货币中，这种操作的可能性更大。比特币的完全数字货币网络是去中心化的，这意味着它没有中央机构、监管者或管理团体来监管窃贼和黑客。虽然传统的安全实体不监控 [比特币](https://iq.wiki/wiki/bitcoin) 网络是否存在双重支出，但已实施了其他网络防御措施来对抗那些可能威胁网络共识机制和交易账本的攻击，从而为 [比特币](https://iq.wiki/wiki/bitcoin) 投资者提供信心。

## 比特币双重支付是如何运作的？

从根本上说，双重支付（双花）是指恶意行为者发送一笔交易的副本，使该副本看起来合法，同时保留原始资金，或者完全抹除第一笔交易。对于[比特币](https://iq.wiki/wiki/bitcoin)或任何数字货币来说，这都是可能且危险的，因为数字信息更容易被复制。在某些特定情况下，犯罪分子会尝试对比特币进行双重支付。

## 同时发送两次或多次相同的比特币金额

攻击者会同时将相同的比特币发送到两个（或更多）不同的地址。这种类型的攻击试图利用[比特币](https://iq.wiki/wiki/bitcoin)网络较慢的10分钟出块时间，在此期间，交易被发送到网络并排队等待矿工确认和验证，以便添加到区块链中。通过在[区块链](https://iq.wiki/wiki/blockchain)上偷偷插入一笔额外的交易，窃贼可以制造出原始比特币金额尚未被消费的假象，或者操纵现有的区块链并费力地重新挖掘具有虚假交易历史的区块，以支持预期的未来双重支付。

## 撤销已发送的交易

攻击者向网络发送多个数据包（数据单元）以撤销交易，从而制造交易从未发生过的假象。通过这种方式，攻击者在收到交易对手的资产或服务后，试图通过撤销交易来进行[比特币](https://iq.wiki/wiki/bitcoin)双重支出，从而同时保留收到的商品和已发送的[比特币](https://iq.wiki/wiki/bitcoin)。

## 51% 攻击

当一组矿工控制了网络 50% 以上的哈希率（算力）时，他们就会对[加密货币](https://iq.wiki/wiki/cryptocurrency)[区块链](https://iq.wiki/wiki/blockchain)发起 51% 攻击。控制网络 51% 的节点使管理方能够更改区块链。如果攻击者能够阻止新交易获得确认，那么部分或所有用户之间的支付可能会停止。他们同样有能力撤销在他们掌权期间所做的决定。工作量证明（PoW）等共识机制旨在避免的问题之一就是通过撤销交易，用户可能会进行“双重支付”。对于参与率较高的代币，51% 攻击是一项极其艰巨且困难的任务。在大多数情况下，攻击者群体必须能够掌握所需的 51% 算力，并准备好在时机成熟时注入备用[区块链](https://iq.wiki/wiki/blockchain)。随后，他们必须在算力上超过主网络。进行 51% 攻击的最大障碍之一是其成本。例如，[比特大陆](https://iq.wiki/wiki/bitmain) S19 XP Hydro 是目前最先进的专用集成电路（ASIC）矿机，它拥有 255 TH/s（每秒万亿次哈希）的哈希率，售价超过 19,800 美元。FoundryUSA 拥有 54.42 EH/s（每秒百亿亿次哈希）的算力，占整个[比特币](https://iq.wiki/wiki/bitcoin)网络哈希率的 23.75%，紧随其后的是 AntPool（41.49 EH/s，占比 18.12%）和[币安](https://iq.wiki/wiki/binance)矿池（34.48 EH/s，占比 15.06%）。[\[2\]](#cite-id-p77hfp6pbfj)

#

## Finney 攻击

Finney 攻击以 [Hal Finney](https://iq.wiki/wiki/hal-finney) 的名字命名，他恰好是 [比特币](https://iq.wiki/wiki/bitcoin) 交易的第一位接收者，也是第一个对比特币源代码发布发表评论的人。这是一种具有以下特征的双重支付攻击：

* 它仅在商家接受未确认交易时有效。
* 然而，即使商家等待几秒钟以验证网络中的每个人都同意他已获得付款，该攻击仍然有效。
* 它要求攻击者正在进行挖矿并控制其区块的内容；然而，理论上他可以使用任何哈希率来做到这一点，特别是显著低于网络总哈希率 50% 的情况。

其过程如下：

* 攻击者正常挖掘区块。在他/她试图寻找的区块中，他包含了一笔将他/她的一些代币发回给他/她自己的交易，但不广播这笔交易。
* 当他/她找到一个区块时，他/她不广播它；相反，他/她将相同的代币发送给商家以换取某些商品或服务。
* 在商家接受付款并不可逆转地提供服务后，攻击者广播他/她的区块。包含在该区块中的发送给自己代币的交易将覆盖支付给商家的未确认交易。

如果从找到区块到攻击者发送付款且商家接受付款的时间为“**t**”，而找到区块的平均时间为“**T**”，则在此期间网络上找到另一个区块的概率为 t/T。在这种情况下，攻击将失败，*并且*攻击者将损失区块奖励 B。这意味着尝试攻击的平均成本约为 (t/T) * B。根据经验，商家应至少等待 t=V*T/B（V 是交易价值）的时间，以确保针对他进行此类攻击是无利可图的。但这可能还不够，因为敏捷的攻击者可以使用同一个区块进行多次攻击，从而可能获得其总价值。攻击者的哈希率越低，他/她实施攻击的机会就越少。如果攻击是为了获取某些流动性差的商品，很难让对该商品的需求与找到区块的时机重合。如果攻击是为了获取流动性强的资产（例如将比特币兑换成其他货币），机会虽然一直存在，但商家很可能会要求多次确认。这使得该攻击在实践中难以实施。[\[4\]](#cite-id-ntm3apywq8)​

#

## 竞争攻击 (Race Attack)

竞争攻击是一种特定形式的双重支出（Double-Spending）尝试，这是一种恶意活动，即同时创建两笔交易，使用同一笔资金进行两次支付。这种攻击要求收款方在交易未确认的情况下接受付款。攻击者向受害者发送一笔未确认的交易。[与此同时](https://iq.wiki/wiki/meanwhile)，他们向网络广播一笔冲突的交易。由于受害者首先观察到了发给自己的交易，他们认为自己将会收到款项。然而，由于网络其余部分先看到了那笔双重支出交易，受害者很可能最终无法收到钱。当攻击者与受害者的节点有直接连接，并将冲突交易直接提交给矿工时，此类攻击的实施难度会显著降低。[\[6\]](#cite-id-nazl3npuw2p)

## 如何防止双重支出问题

[中本聪](https://iq.wiki/wiki/satoshi-nakamoto)的白皮书中建议使用时间戳服务器作为双重支出问题的解决方案。该服务器对一组交易区块进行哈希处理，然后将哈希值广播到比特币网络中的每个节点。此时间戳证明了哈希中的任何信息都不可能在哈希发布之后生成。由于每个时间戳在其哈希中都包含前一个时间戳，这创建了一个不可篡改（不可更改）的交易发生顺序日志。每个时间戳都建立在之前的时间戳之上。总之，[区块链](https://iq.wiki/wiki/blockchain)通过向[比特币](https://iq.wiki/wiki/bitcoin)网络中的所有节点广播交易组并为其添加时间戳来防止双重支出。由于交易在区块链上被记录了时间戳，并且在数量上与之前的交易相关联，因此它们是不可逆且难以篡改的。[\[2\]](#cite-id-p77hfp6pbfj)

#

## 比特币

自2009年第一个比特币客户端发布以来，[比特币](https://iq.wiki/wiki/bitcoin)的[区块链](https://iq.wiki/wiki/blockchain)保存了所有已执行交易的详尽记录，以便正确理解区块链如何避免双重支出。由于每笔交易都通过加密哈希与前一个区块相连，因此无人可以篡改记录。该数据库被称为区块链，是因为每隔十分钟就会有一批新的交易（称为区块）被添加到其中。

## 以太坊

避免双重支出意味着停止两次使用相同的金额。如果随机数（Nonce）被设置为相同，则只有其中一笔交易会被挖掘，且大多数情况下是具有更高 Gas 价格的那一笔，但无论哪种情况，最终都只会发生一笔交易，因此不会发生双重支出。[\\[3\\]](#cite-id-0f3pxatmcew)在[以太坊](https://iq.wiki/wiki/ethereum)中使用了两种类型的随机数（Nonce）：

* **账户随机数 (Account nonce)**：它仅仅是一个账户的交易计数。这可以防止重放攻击，例如，B 可以一遍又一遍地重放 A 向 B 发送 20 个代币的交易，从而不断耗尽 A 的余额。
* **工作量证明随机数 (Proof of work nonce)**：区块中的随机值，用于满足工作量证明条件（取决于当时的难度）。工作量证明随机数是区块中一个无意义的值，可以通过调整它来尝试满足工作量证明条件。

## 案例

2019年12月，一段病毒式传播的视频展示了比特币在接受比特币支付的场所被“双重支出”的过程。这些攻击是通过使用“替代费用”（Replace-By-Fee，简称 RBF）实现的，这是对 [比特币](https://iq.wiki/wiki/bitcoin) 协议的一项略带争议的升级。第一笔交易先发送给商家，随后发送附带更高费用的第二笔交易。这笔 RBF 交易覆盖了第一笔交易，因为更高的费用意味着它将被优先处理，从而实现了双重支出。这些攻击之所以奏效，是因为商家接受了未经确认的交易。

在同年早些时候发生的类似事件中，一些加拿大的 [比特币](https://iq.wiki/wiki/bitcoin) 持有者能够在不实际兑现的情况下“兑现”他们的 [比特币](https://iq.wiki/wiki/bitcoin)。据报道，他们将 [比特币](https://iq.wiki/wiki/bitcoin) 发送到 [比特币](https://iq.wiki/wiki/bitcoin) ATM 机并提取了现金。在收到现金后，由于交易尚未被“确认”，他们取消了这些交易。[\[5\]](#cite-id-pkypi77zcbd)
