什麼是雙重支出?

雙重支出是數位貨幣系統中的潛在問題,即相同的資金可以在相同的時間間隔內花費兩次。如果沒有足夠的對策,不解決此問題的協議很容易受到此類活動的影響——用戶根本無法確定他們的資金沒有花在其他地方。

在加密貨幣領域,限制某些單元的重複至關重要。如果 Alice 可以收到 10 個單位,然後複製貼上 10 次以獲得 100 個單位,那麼如果將同樣的 10 個單位同時發送給 Boris 和 Katya,整個系統也會崩潰。因此,為了使數位貨幣發揮作用,必須創建機制來限制這種可能性。


如何防止雙重支出?

集中式方法

與分散式替代方案相比,集中式系統更容易實施。基本上,它涉及一個管理系統並控制新單位的發行和分配的實體或組織的存在。 David Chaum 的 eCash 是集中解決雙重支出問題的一個很好的例子。 

為了向用戶發行模擬現金的數位資產(能夠進行匿名和點對點交換),銀行可能會使用盲簽名,正如密碼學家David Chaum 在其1982 年論文《無法追踪的支付的盲簽名》中所描述的那樣。

例如,如果用戶(我們稱他為丹尼斯)想要接收 100 美元的數位貨幣,他必須先通知銀行。如果帳戶有餘額,它會產生一個隨機數或多個較小面額的數字。假設它產生 5 個數字,每個數字的值都是 20 美元。為了防止銀行追蹤貨幣單位,丹尼斯透過在每個隨機數字中添加致盲因子來隱藏隨機數字。

然後,他將訊息傳輸給銀行,銀行從他的帳戶中扣除 100 美元,然後簽署訊息,確認這 5 條訊息中的每一條都可以兌換 20 美元。現在丹尼斯可以花掉銀行發行的資金了。他去 Irina 的餐廳買了食物,價格為 40 美元。 

丹尼斯可以消除致盲因素,使用與支票上的數字貨幣相關的隨機數,該隨機數將作為每件物品的唯一識別碼(類似於序號)。他向伊琳娜透露了其中兩筆,伊琳娜現在必須立即在銀行啟動它們,以便丹尼斯不能在其他地方花同樣的錢。銀行將檢查簽名,如果一切順利,將向伊琳娜的帳戶存入 40 美元。

一旦激活,用過的支票將被燒毀,如果艾琳想再次花費她的新餘額,她將需要以相同的方式獲得新的支票。

Chaum 的 eCash 對於私人金融交易來說可能很方便,但這種方法不太可靠,因為銀行是一個中心故障點。所簽發的支票本身毫無價值,因為其價值完全取決於銀行將支票兌換成美元的意願。同時,客戶受到銀行的擺佈,必須依賴銀行才能花錢,這正是加密貨幣所要糾正的問題。


分散方式

在沒有第三方監督機構的情況下,確保資金不會在生態系統中重複使用更具挑戰性。在這種情況下,同樣強大的參與者必須就某些規則達成一致,以防止詐欺並激勵所有用戶誠實行事。

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

區塊鏈是一個具有一組獨特屬性的資料庫。網路參與者(稱為節點)使用專門的軟體與其他參與者同步資料庫的副本。因此,所有網路參與者都可以從創世區塊開始檢查每筆交易的歷史記錄。由於區塊鏈的公共性質,可以輕鬆檢測和防止雙花交易等詐欺活動。

當用戶廣播交易時,它不會立即添加到區塊鏈中:首先,它必須透過挖掘包含在區塊中。只有將包含交易的區塊添加到鏈上後,接收方才會認為該轉帳有效。否則,接收者將面臨無法收到承諾資金的風險,因為發送者可能會在其他地方花費相同的代幣。 

一旦交易被確認,硬幣就不能重複使用,因為所有權轉移給新用戶,整個網路都可以驗證這一點。正是出於這個原因,許多人建議您等到收到多次確認後再接受付款。每個後續區塊都會增加更改或重寫鏈所需的工作量(如 51% 攻擊)。

我們再以餐廳為例。丹尼斯回到餐廳,注意到一則廣告,該餐廳接受比特幣服務付款。上次吃的菜他很喜歡,所以又點了一遍。它將花費 0.005 BTC。 

伊琳娜提供了她的公共地址,他應該向該地址匯款。 Denis 廣播該交易,這本質上是一條簽名訊息,表明 Denis 的 0.005 BTC 現在正在轉移給 Irina。任何收到丹尼斯簽名交易的人都可以驗證他們確實是這些硬幣的所有者,因此有權發送這些硬幣。

正如我們已經說過的,交易只有包含在已確認的區塊中才有效。接受未經確認的交易很像在前面的範例中收到 40 美元的電子現金,而沒有及時在銀行兌現支票,從而允許發送者在其他地方花費相同的金額。因此,Irina 應該等待至少 6 個區塊確認(大約一小時)才能接受 Denis 的付款。


比特幣網路上的雙重支出

比特幣的機制可以防止雙重支出攻擊,至少只要協議正常運作。也就是說,如果有人正在等待區塊中的交易被確認,那麼發送者就不容易逆轉它們。為了實現這一點,需要對區塊鏈進行逆轉,但這將需要大量的哈希能力。

然而,有一些針對未經確認的交易的雙重支出攻擊。例如,當以低價購買時,賣方可能不想等待交易被包含在區塊中。訂單過多的快餐店也將無法正常營業,因為每次購買的處理時間都如此長。因此,如果企業依賴即時支付,它就很容易受到雙重支出的影響。有人可以訂購漢堡,付款,然後立即將相同的資金發送到他們的地址。費用較高的新交易很可能會先得到確認,然後中止前一筆交易的驗證。

實現雙花的流行方法有以下三種:

  • 當某個實體或組織設法控制整個網路算力的 50% 以上時,就會發生 51% 攻擊,導致交易被消除或交易順序改變。對於比特幣來說,這種攻擊不太可能發生,但對於其他區塊鏈網路來說,這種攻擊可能會發生。

  • 當兩個衝突的交易使用相同的方式同時廣播,但只有其中一個得到確認時,就會發生競爭攻擊。攻擊者的目標是透過僅確認他想要的交易(例如,將相同的資金發送到他的地址)來使驗證無效。此類攻擊的條件是賣方允許透過未經確認的交易支付貨物費用。

  • 當攻擊者用他的交易預挖一個區塊而不立即將其廣播到網路時,就會發生芬尼攻擊。相反,它會再次花費硬幣,但作為不同交易的一部分,然後才廣播前一個區塊,取消向賣方的轉移。芬尼攻擊需要特定的事件序列,也取決於接收者是否願意接受未經確認的交易。

正如我們所看到的,等待區塊被確認的賣家成為雙重支出受害者的風險顯著降低。


恢復

雙重支出允許您透過多次支出相同金額來使用數位貨幣系統來獲取經濟收益。該問題缺乏適當的解決方案阻礙了該領域的進一步進展。

幸運的是,盲簽名的出現解決了中心化金融體系的許多問題。工作量證明機制和區塊鏈技術的創建催生了比特幣,這是一種強大的去中心化貨幣形式,激發了許多用戶創建數千個其他加密貨幣項目。