# 雙花攻擊

> **最後更新：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% 攻擊](/ren-shi-feng-xian-bao-hu-zi-chan/51-attack.md)。

### 確認數的重要性

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

| 確認數    | 意義        | 適用場景      |
| ------ | --------- | --------- |
| 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% 攻擊](/ren-shi-feng-xian-bao-hu-zi-chan/51-attack.md)
* [UTXO](https://github.com/dAAAb/Blockpedia/blob/master/blockchain-dev/utxo.md)
* [共識機制](/qu-kuai-lian-ru-he-da-cheng-gong-shi/consensus.md)
* [區塊確認](/gei-kai-fa-zhe-de-zhi-nan/node/liang.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.0x1.academy/ren-shi-feng-xian-bao-hu-zi-chan/double-spending.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
