什麼是雙重支出?

雙重支出是數位貨幣系統中的一個潛在問題,即相同的資金同時發送給兩個接收者。如果沒有足夠的對策,不解決問題的協議從根本上註定會失敗。用戶無法驗證他們收到的資金是否已被花在其他地方。

當涉及到數位貨幣時,必須確保特定單位無法複製。如果 Alice 可以收到 10 個單位,複製並貼上 10 次,最後得到 100 個單位,那麼整個系統就會受到損害。同樣,如果這樣的系統可以同時向鮑勃和卡羅爾發送相同的 10 個單位,那麼它就無法運作。為了使數位貨幣發揮作用,必須有適當的機制來防止這種行為。


如何避免雙重支出?

集中式方法

集中式方法比分散式替代方案更容易實施。這通常涉及一名主管來管理系統並控制單位的發行和分配。 David Chaum 的 eCash 是集中解決雙重支出問題的一個很好的例子。

為了向用戶發行類比貨幣的數位資產(可用於匿名的點對點交易),銀行可以使用盲簽名,密碼學家David Chaum 在其1982 年論文《無法追踪的支付的盲簽名》中詳細介紹了這一點。

在這樣的背景下,如果一個用戶(我們暫且稱他為 Dan)想要接收 100 美元的數位貨幣,他必須先通知銀行。如果他們的帳戶中有餘額,他們將產生一個隨機數字(或幾個,對於小面額)。假設他產生了 5 個數字,每個數字的價值都是 20 美元。為了防止銀行發現特定單位,丹透過為每個數字添加致盲因子來打亂隨機數。

然後,他將這些數據提供給銀行,銀行從他的帳戶中扣除 100 美元,並簽署訊息,證明這 5 個硬幣中的每一個都可以兌換 20 美元。丹現在可以使用銀行發放的資金了。他去艾琳的餐廳買了一頓飯,花了 40 美元。

Dan 可以消除致盲因素,以暴露與每個數字貨幣「紙幣」相關的隨機數,該隨機數充當每個單元的唯一識別碼(很像序號)。他向艾琳透露了其中的兩筆,艾琳現在必須立即與銀行兌換,以防止丹在另一家商人處消費。銀行將驗證簽名是否有效,如果一切正常,他們將向 Erin 的帳戶存入 40 美元。

用過的票現在基本上沒有用了,如果艾琳希望以同樣的方式花掉她的新餘額,就必須發行更多票。

Chaumian 的電子現金系統可用於私人轉帳。但它在彈性方面失敗了,因為銀行是失敗的中心點。發行的紙幣本身沒有任何價值,因為它的價值完全來自於銀行將其兌換成美元的意願。客戶受銀行擺佈,必須依靠銀行的善意才能讓金錢發揮作用。這正是加密貨幣想要解決的問題。


去中心化的方法

在沒有監督者的生態系統中,更難以確保資金不會重複使用。同樣強大的參與者必須圍繞一套規則進行協調,以防止詐欺並激勵所有用戶誠實行事。

比特幣白皮書中提出的最大創新是雙重支出問題的解決方案。儘管沒有提及,中本聰提出了現在稱為區塊鏈的資料結構。

區塊鏈實際上只是一個具有某些獨特屬性的資料庫。網路參與者(稱為節點)運行專門的軟體,這使他們能夠與同行同步資料庫副本。結果是整個網路都可以檢查交易歷史並將其追溯到創世塊。由於區塊鏈是公開可用的,因此很容易檢測和防止詐欺活動,例如試圖雙花的交易。

當用戶廣播交易時,它不會立即添加到區塊鏈中,必須先透過挖礦將其包含在區塊中。因此,接收者只有在其區塊被添加到鏈上後才應認為交易有效。否則,他們將面臨失去資金的風險,因為發送者可能會在其他地方花費相同的單位。

一旦交易被確認,單位就不能被花費兩次,因為所有權被分配給新用戶,整個網路都可以驗證這一點。正是出於這個原因,許多人建議等待幾次確認後再考慮付款是否有效。每個後續區塊都會顯著增加修改或重寫字串所需的工作量(這可能發生在 51% 攻擊中)。

讓我們回到餐廳場景。丹回到餐廳,這次,窗戶上貼著一張接受比特幣的貼紙。他很享受上次吃的飯菜,所以又點了一份。他花了 0.005 BTC。

艾琳向他展示了一個公共地址,他應該將資金發送到該地址。 Dan 廣播了該交易,這本質上是一條簽名訊息,表明 Dan 擁有的 0.005 BTC 現在是 Erin 的。無需太多細節,任何持有丹簽名交易的人都可以證實他確實擁有這些資金,因此有權發送這些資金。

然而,如上所述,交易只有包含在已確認的區塊中才有效。接受未經確認的交易有點像接受前面示例中的 40 美元電子現金,但不立即從銀行兌現,這允許發送者同時在其他地方花費它。因此,建議 Erin 至少等待 6 個區塊確認(大約一個小時),然後再接受 Dan 的付款。


雙重支出和比特幣

比特幣經過精心設計,可以防止雙重支出攻擊,至少在按預期使用協議時是如此。也就是說,如果人們正在等待區塊中的交易得到確認,那麼發送者就沒有簡單的方法來取消它們。為此,他們必須「反轉」區塊鏈,這需要不切實際的哈希能力。

然而,少數雙花攻擊針對的是接受未經確認交易的各方。例如,對於低價值的購買,交易者可能不想等待交易被包含在區塊中。繁忙的快餐店可能無法等待網路處理每筆購買。因此,如果一家企業允許「即時」付款,它就會面臨雙重支出。有人可以訂購漢堡,付款,然後立即將相同的資金發送到自己的地址。由於費用較高,這項新交易有可能首先被確認,從而使前一筆交易失效。

雙重支出有三種流行的方法:

  • 51% 攻擊:當單一實體或組織獲得超過 50% 的雜湊率控制權時,使其可以排除或更改交易順序。這種攻擊在比特幣上不太可能發生,但在其他網路上卻發生過。

  • 競爭攻擊:使用相同的資金連續廣播兩筆衝突的交易,但只有一筆交易被確認。攻擊者的目標是透過僅驗證對他們有利的交易(例如,將相同的資金發送到他們控制的地址)來使付款無效。競爭攻擊迫使接收者接受未經確認的交易作為付款。

  • 芬尼攻擊:攻擊者在區塊中預挖交易,而不立即將其廣播到網路。相反,他在另一筆交易中花費了相同的代幣,並僅廣播他之前開采的區塊,這可能會使付款無效。芬尼攻擊需要特定的事件序列,也取決於接收者接受未經確認的交易。

正如我們所看到的,等待區塊確認的商家將大大降低成為雙重支出受害者的機會。


總結一下

雙重支出允許用戶出於自己的目的操縱電子貨幣系統,並多次使用相同的資金。傳統上,缺乏適當的問題解決方案阻礙了進一步的進展。

然而幸運的是,盲簽名的使用為中心化金融系統提供了一個有吸引力的解決方案。後來,工作量證明機制和區塊鏈技術的創建催生了比特幣,這是一種去中心化貨幣,反過來又激發了數千個其他加密貨幣項目。