科普學習——雙花問題詳解

科普學習——雙花問題詳解

什麼是雙花問題

雙花問題是數位現金系統中的潛在問題,指的是同一筆資金被同時支付給兩位收款方。如果沒有適當的對策,僅靠協議無法徹底解決此問題,因為用戶無法驗證自己收到的資金是否已經支付給了其他人。

在數位現金領域,必須確保特定的貨幣單位不可複製。如果Alice可以接收10個貨幣單位,然後複製粘貼10次,那麼她就擁有了100個貨幣單位,這樣整個系統將會崩潰。同樣,如果她能夠將同一筆10個貨幣單位同時發給Bob和Carol,那麼系統也無法運行。因此,必須有適合的機制來防止這種情況的發生,以確保數位貨幣的正常運作。

如何防止雙花問題?

中心化方式

中心化方式比去中心化方案更容易實施,通常需要設立一名監督者來管理系統並控制貨幣單位的發行和發放。大衛·喬姆(David Chaum)的eCash就是通過中心化方式來解決雙花問題的。

銀行可以使用盲簽名方式向用戶發行仿現金數位資產(可匿名點對點交易)。密碼學家大衛·喬姆於1982年發表的論文《不可追蹤支付的盲簽名技術》對此進行了詳述。

在這種情況下,如果用戶Dan希望收款100美元的數位現金,必須先通知銀行。如果他賬戶有餘額,則會生成一個隨機數(面額較小則生成多個)。假設生成了五個隨機數,每個數的價值為20美元。為防止銀行追蹤到特定的貨幣單位,Dan通過為每個隨機數增加盲因子來混淆視聽。

然後,他將這些數據交給銀行,銀行從他的賬戶中扣除100美元餘額,並對消息進行簽名,證明五條信息各自可兌換20美元。此時,Dan就能使用銀行發行的數位現金了。他去到Erin的餐廳用餐,花費40美元。

Dan可以消除盲因子,公開與每個數位現金「鈔票」相關的隨機數,該隨機數即為每個貨幣單位的唯一標識符(大致等同於序列號)。他向Erin公開其中兩個隨機數,Erin須立即向銀行兌換這筆資金,以防Dan支付給其他商戶。銀行會核實簽名是否有效,如果核對無誤,就向Erin的賬戶存入40美元。

用過的「鈔票」隨即銷毀,如Erin希望以同樣的方式使用賬戶餘額,則需發行更多鈔票。

Chaumian eCash機制對私人轉賬極具價值。但是,eCash機制自身無抵禦能力,由於銀行是中心化節點,一旦系統出錯就一損俱損。銀行發行的鈔票本身沒有價值,價值完全源自銀行願意把鈔票兌換成美元。客戶受制於銀行,必須依靠銀行的信譽才能運作資金。這正是加密貨幣旨在解決的問題。

去中心化方式

在沒有監督機制的生態系統中避免雙花問題的發生,更具挑戰性。權利相當的參與者必須按照同一套規則相互協調,以預防欺詐並激勵所有用戶誠信行事。

比特幣白皮書呈現的最大創新就是雙花問題的解決方案。中本聰提出了一種史無前例的數據結構,即現在廣為人知的區塊鏈。

區塊鏈實際上只是具有某些獨特屬性的資料庫。網絡參與者(稱為節點)運行專門的軟體,讓節點之間相互同步自己的資料庫副本。這樣一來,全網都能審計可追溯到創世區塊的交易歷史記錄。由於區塊鏈可公開查看,發現並防止欺詐行為就會變得更輕鬆,例如識別出嘗試雙花的交易。

用戶發布交易時,不會立即添加到區塊鏈中,必須先通過挖礦才能裝入區塊。因此,只有區塊入鏈,收款方才可確認交易有效。否則,如果發送者把同一筆代幣支付到其他地方,收款方將面臨損失資金的風險。

交易一經確認,代幣所有權便會分配給新用戶,並獲得整個網絡的驗證,因此代幣不得再雙花。出於這個原因,許多人建議在接受有效付款之前先等待多次確認。每個後續區塊都會大大增加修改或重寫鏈的工作量(例如發生51%攻擊的情況)。

讓我們回到餐廳的情境。Dan回到餐廳,這次注意到了窗口「本店支持比特幣支付」的貼紙。他對上次的用餐念念不忘,又點了同樣的食物,花費0.005枚比特幣。

Erin向Dan展示公共地址,即轉帳地址。Dan發布該筆交易,本質上就是一條署名消息,宣告自己擁有的0.005枚比特幣現已歸Erin所有。無需過多細節,任何人看到Dan的簽名交易都可證實代幣確實歸他所有,因此Dan有權發送。

然而如前所述,該交易只有裝入區塊獲得確認後才有效。接收未確認的交易就像此前接收40美元的eCash一樣,如果不立即通過銀行兌現,發送方可以將該筆資金花費到其他地方。因此,Erin應該至少等待6個區塊確認(大約一小時)之後,再接受Dan的付款。

比特幣的雙花問題

比特幣經過精心設計,可防止雙花攻擊,至少在協議使用符合預期的情況下確實如此。也就是說,如果有人正在等待某筆交易獲得區塊確認,則發送者將無法輕易撤銷該筆交易。只有「反轉」區塊鏈,才能撤銷交易,這需要無比龐大的哈希算力。

然而,有些雙花攻擊專門針對接受未確認交易的用戶。諸如小額購買,商戶就不想等到交易裝入區塊。忙得團團轉的快餐店可能等不了網絡處理每筆交易所需的那麼長時間。因此,如果商家啟用了「即時」付款,就有可能面臨雙花問題。有人可以在點了漢堡付完款後,立即又將同一筆資金發回自己的地址。只要後面那筆交易的手續費更高,就有可能先被確認,繼而導致先前的交易失效。

目前有三種普遍的雙花攻擊:

  • 51%攻擊:單個實體或組織設法控制超過50%的哈希率,以此刪除或修改交易順序。這種攻擊在比特幣網絡發生的機率微乎其微,但在其他網絡中發生過。
  • 競爭攻擊(Race attack):使用同一筆資金連續發布兩筆有衝突的交易,但僅一筆交易得到確認。攻擊者的目標是通過驗證對自己有利的交易讓另一筆支付失效。例如,將資金發送到他自己控制的地址。競爭攻擊一般會讓接收方接受一筆未確認的交易作為付款。
  • 芬尼攻擊(Finney attacks):攻擊者預先挖礦一筆交易放入區塊,但並不立即發布到網絡中。相反,他將同一筆代幣支付到另一筆交易中,然後才發布之前已挖出的區塊,從而使支付無效。

本內容來自區塊鏈科普 投稿,不代表本網站觀點與立場。转载,请注明出处:https://news.kejixun.com/22220.html

讚! (0)
區塊鏈科普的頭像區塊鏈科普投稿者
Previous 2024 年 9 月 8 日
Next 2024 年 9 月 8 日

相关推荐

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

SHARE
TOP