雙花攻擊

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

最後更新:2026 年 1 月

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

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

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

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

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

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

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

這就是雙重支付問題

為什麼這是大問題?

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

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

銀行就是這樣運作的:

  1. 你的帳戶有 1000 元

  2. 你轉帳給 A,銀行記錄「-1000」

  3. 你再轉帳給 B?銀行說「餘額不足」

問題解決了,但代價是什麼?

  • 你必須信任銀行

  • 銀行可以凍結你的帳戶

  • 銀行可以審查你的交易

  • 銀行可能倒閉

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

比特幣如何解決?

比特幣的答案是:讓全世界一起記帳

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

關鍵機制:

  1. UTXO 模型:每筆「幣」都有唯一的來源記錄

  2. 時間戳:區塊有順序,先來先贏

  3. 共識機制:全網同意哪筆交易是「真的」

  4. 不可逆:一旦確認,無法竄改

雙重支付攻擊的類型

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

1. 競爭攻擊(Race Attack)

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

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

2. Finney 攻擊

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

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

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

3. 51% 攻擊

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

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

詳見 51% 攻擊

確認數的重要性

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

確認數
意義
適用場景

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,換成其他幣提走,然後用算力把存款交易撤銷。

教訓

  • 小型幣種更容易被攻擊

  • 交易所需要更嚴格的確認數

  • 算力集中是危險訊號

為什麼這很重要?

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

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

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

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

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


相關條目

Last updated