# 雙花攻擊

> **最後更新：2026 年 1 月**

## 雙重支付（Double Spending）是數位貨幣的「原罪問題」——同一筆錢被花兩次。比特幣的誕生，就是為了解決這個問題。

想像你有一張 1000 元的鈔票。

你拿去買咖啡，老闆收走，你的手上就沒有這張鈔票了。

**物理世界天生防止雙重支付。**

但如果這 1000 元是一個電腦檔案呢？

你可以複製貼上，同時傳給咖啡店和便利商店。

兩邊都收到「1000 元」，但你只有一筆錢。

這就是**雙重支付問題**。

### 為什麼這是大問題？

在比特幣出現之前，數位貨幣一直無法解決這個問題。

傳統的解決方案是：**找一個中間人來記帳**。

銀行就是這樣運作的：

1. 你的帳戶有 1000 元
2. 你轉帳給 A，銀行記錄「-1000」
3. 你再轉帳給 B？銀行說「餘額不足」

**問題解決了，但代價是什麼？**

* 你必須信任銀行
* 銀行可以凍結你的帳戶
* 銀行可以審查你的交易
* 銀行可能倒閉

中本聰想要的是：**不需要信任任何中間人的數位現金**。

### 比特幣如何解決？

比特幣的答案是：**讓全世界一起記帳**。

每一筆交易都被廣播到整個網路，被打包進區塊，由所有人共同驗證。

```
Alice 有 1 BTC
  │
  ├── 交易1：轉給 Bob （廣播到網路）
  │
  └── 交易2：轉給 Carol （同時廣播）

網路收到兩筆衝突的交易
  │
  └── 只有先被打包進區塊的那筆會被承認
      另一筆被視為「無效」
```

**關鍵機制：**

1. **UTXO 模型**：每筆「幣」都有唯一的來源記錄
2. **時間戳**：區塊有順序，先來先贏
3. **共識機制**：全網同意哪筆交易是「真的」
4. **不可逆**：一旦確認，無法竄改

### 雙重支付攻擊的類型

雖然比特幣解決了基本的雙重支付問題，但攻擊者仍有幾種方式嘗試：

#### 1. 競爭攻擊（Race Attack）

攻擊者同時發送兩筆衝突的交易給不同的節點。

```
攻擊者
    ├─ 交易A → 商家（買咖啡）
    └─ 交易B → 自己的另一個錢包

哪筆先被打包進區塊？不確定。
如果 B 先被確認，商家就被騙了。
```

**防範方式**：不要接受「0 確認」的交易。

#### 2. Finney 攻擊

攻擊者是礦工，預先挖好一個包含「轉給自己」的區塊，但先不廣播。

然後去商家消費，等商家接受 0 確認交易後，立刻廣播預挖的區塊。

**防範方式**：等待多個區塊確認。

#### 3. 51% 攻擊

這是最強大的雙重支付方式。

攻擊者掌控超過 50% 的算力，可以在交易被確認後，重新挖一條更長的鏈把交易「撤銷」。

詳見 [51% 攻擊](https://www.0x1.academy/ren-shi-feng-xian-bao-hu-zi-chan/51-attack)。

### 確認數的重要性

區塊鏈上的「確認數」代表安全程度：

| 確認數    | 意義        | 適用場景      |
| ------ | --------- | --------- |
| 0 確認   | 交易已廣播但未打包 | 極小額、可承受損失 |
| 1 確認   | 進入一個區塊    | 小額交易      |
| 3 確認   | 相對安全      | 中等金額      |
| 6 確認   | 比特幣標準     | 大額交易      |
| 60+ 確認 | 接近不可逆     | 交易所大額提款   |

**為什麼要等？**

因為每多一個確認，要逆轉這筆交易就需要更多算力。

6 個確認（約 1 小時）後，即使攻擊者有 10% 算力，成功機率也只有 0.024%。

### 不同幣種的處理方式

| 區塊鏈    | 出塊時間     | 建議確認數   |
| ------ | -------- | ------- |
| 比特幣    | 約 10 分鐘  | 6 次     |
| 以太坊    | 約 12 秒   | 12-32 次 |
| 萊特幣    | 約 2.5 分鐘 | 12 次    |
| Solana | 約 0.4 秒  | 即時最終性   |

**有些區塊鏈有「最終性」機制**，一旦確認就不可逆轉，不需要等待多個區塊。

### 現實世界的雙重支付

雙重支付不只是理論：

**2018 年 Bitcoin Gold**：攻擊者透過 51% 攻擊，雙重支付了約 1800 萬美元。他們在交易所存入 BTG，換成其他幣提走，然後用算力把存款交易撤銷。

**教訓**：

* 小型幣種更容易被攻擊
* 交易所需要更嚴格的確認數
* 算力集中是危險訊號

### 為什麼這很重要？

理解雙重支付問題，就理解了區塊鏈存在的意義。

在比特幣之前，所有數位貨幣嘗試都失敗了，因為無法解決「複製貼上」的問題。

比特幣用**去中心化的共識機制**，第一次讓「不需要信任中間人的數位現金」成為可能。

這不只是技術突破，更是**對金融體系的根本挑戰**。

{% hint style="info" %}
雙重支付問題的解決，是比特幣最核心的創新。中本聰沒有發明區塊鏈的每個組件——密碼學、點對點網路、時間戳都早已存在。他的天才在於把這些組合起來，第一次解決了「無需信任的數位現金」問題。
{% endhint %}

***

#### 相關條目

* [51% 攻擊](https://www.0x1.academy/ren-shi-feng-xian-bao-hu-zi-chan/51-attack)
* [UTXO](https://github.com/dAAAb/Blockpedia/blob/master/blockchain-dev/utxo.md)
* [共識機制](https://www.0x1.academy/qu-kuai-lian-ru-he-da-cheng-gong-shi/consensus)
* [區塊確認](https://www.0x1.academy/gei-kai-fa-zhe-de-zhi-nan/node/liang)
