“雙花問題”新手入門指南

買賣虛擬貨幣
什麼是雙重支出?雙花問題是數字現金系統中的一個潛在問題,在該系統中,相同的資金同時支付給兩個接收者。如果沒有合適的機制,僅憑藉協議是無法徹底解決雙花問題的,使用者無法驗證是否自己所接收的資金沒有同時在其他地方被支付。在數字現金方面,確保特定的貨幣單元不可重複是至關重要的。如果Alice可以接收10個貨幣單元,並可以將其複製貼上10次,然後發現自己擁有了100個貨幣單元,那麼整個系統將受到破壞。同樣,如果她可以同時將相同的10個貨幣單元同時發給Bob和Carol,則這樣機制將無法正常工作。因此,為了使數字貨幣能夠正常執行,必須有合適的機制來防止這種行為的發生。如何防止雙重支出的發生?中心化方式中心化方式比去中心化方案更容易實施。通常,需要安排一名監督員來管理系統並控制單位的發行和分配。大衛·肖姆(David Chaum)的eCash就是透過中心化方式解決雙花問題的一個有效例子。
要向使用者發行類似於現金的數字資產(具有匿名性和點對點交易屬性),銀行可以使用盲籤方式-密碼學家David Chaum在1982年的論文《不可追溯的盲籤支付方案》中對此進行了詳細說明。在這種情況下,如果某個使用者(Dan)希望在銀行賬戶中支取100美元的數字現金,則必須先通知銀行。如果他的帳戶中有餘額,那麼他將生成一個隨機數(對於較小的面額,則需要生成多個)。假設他生成了五個隨機數,每個數字代表的價值為20美元。為了防止銀行能夠追蹤到特定的貨幣單元,Dan透過為每個隨機單位新增盲因子來混淆隨機數。然後,他將這些資料交給銀行,該銀行從他的帳戶中扣除100美元的餘額,並對訊息進行簽名,證明五條資訊中的每條資訊都可以代表20美元。之後,Dan就可以使用銀行所發行的數字現金了。現在他去Erin的餐廳用餐花費了40美元。Dan可以消除盲因子,以暴露與每個數字現金“賬單”相關的隨機數,該隨機數可以用作每個單元的唯一識別符號(非常類似於序列號)。他向Erin透露了其中的兩個,Erin現在必須立即向銀行申請驗證這筆資金,以防止Dan將其支付給其他人。銀行將檢查簽名是否有效,如果一切正確,它將向Erin的帳戶中存入40美元。現在,上面所有的交易記錄都已經核對無誤,如果Erin希望以同樣的方式使用她的賬戶餘額,則必須在銀行賬戶上執行相同的操作。Chaumian eCash的設定對於私人轉賬十分有價值。但是,由於銀行是中心化節點,可能存在單點故障,因此,某些情況下是無法正常工作的。而某種程度上,銀行所發行的資產可能一文不值,因為其價值完全是按照銀行的願意,然後將其兌換成美元。客戶會受銀行左右,必須依靠銀行的信譽背書才能體現價值。這也正是加密貨幣旨在解決的問題。
去中心化方式在沒有監督機制的生態系統中如何確保不發生“雙花”支付,是相當更具挑戰性的。具有同等能力的參與者必須按照一組規則進行協商,防止欺詐的發生,並激勵所有使用者誠信經營。比特幣白皮書中提出的最大創新是雙花問題的解決方案。中本聰提出了一種資料結構,儘管現在沒有這樣引用,但它現在被廣泛稱為區塊鏈。區塊鏈實際上只是具有某些獨特屬性的資料庫。網路上的參與者(稱為節點)執行專門的軟體,該軟體使節點能夠將其資料庫副本與其他節點進行同步。促使整個網路都可以從創世區塊開始,稽覈和追溯鏈上發生的交易。透過公開檢視區塊鏈,可以很容易地檢測和防止欺詐行為活動,例如識別出進行雙花支出的交易。使用者廣播交易時,不會立即將其新增到區塊鏈中,必須首先透過挖礦將其打包在區塊中。這樣,接收者在確定交易已經新增到區塊鏈之後,才可以認為該交易有效。否則,他們有失去資金的風險,因為傳送方可能在其他地方支付了相同的代幣。 如果交易被區塊鏈正式確認,則代幣就不可能被重複使用,因為所有權已分配給新使用者,並且整個網路都可以對此進行驗證。出於這個原因,許多人建議在接受有效付款之前先等待多次確認。隨後的每個區塊的驗證,都會對修改或重寫區塊鏈,增加極大的工作量(類似於發生51%攻擊)。
讓我們回顧一下剛才餐廳的消費場景。Dan回到餐廳,這次在視窗上看到一個“此處接受比特幣支付”的標籤。他對上一次的用餐非常滿意,所以他再次點了同樣的套餐。花費了他0.005 BTC。Erin向他展示了一個公共地址,他必須將資金髮送到該地址上。Dan支付後,廣播了該交易,這實質上是一個已簽名的訊息,指出Dan擁有的0.005 BTC現在已經在Erin的手中。無需過多透露細節,任何與Dan進行了簽名交易的人都可以驗證他確實擁有這些代幣,因此有權傳送它們。但是,如前所述,該交易僅能夠在被區塊鏈確認後才能有效。如果在沒有區塊鏈確認的情況下就確認接收到該筆資金,就像接上一案例中接收40美元的eCash一樣,如果不立即透過銀行兌現,傳送方可以將該筆資金又在其他地方。因此,我們建議Erin在確認Dan的付款之前至少等待6個區塊確認(大約1個小時)。比特幣雙花問題比特幣透過精心設計,至少現階段按預期使用協議時,可以有效防止雙重支出攻擊。也就是說,如果我們等待區塊中的交易確認,則傳送者沒有簡單的方法可以撤消它。為此,他們將需要“反轉”區塊鏈,這需要非常龐大的雜湊計算資源。但是,針對某些未確認交易,可能出現少數的雙重支出攻擊。例如,對於某些價值較低的消費場景,商家可能不會等待交易被區塊鏈驗證才進行確認。忙碌的快餐店可能無法等待每筆購物交易都在區塊鏈上進行驗證。因此,如果一家企業啟用了“即時”付款,那麼就可能發生雙花支出。有人可能會點一個漢堡,然後進行支付,同時他會立即將相同的資金髮送到他們自己的地址。當後面這筆交易的手續費用較高時,後面的交易很可能會首先被確認,因此將使先前的交易無效。
有兩種雙花攻擊的普遍方式:· 51%攻擊:單個實體或組織設法控制超過50%的雜湊算力,這使他們可以刪除或修改交易的順序。這種攻擊在比特幣網路上發生是極不可能的,但在其他區塊鏈網路中可能發生過。· 競賽攻擊(Race attacks): 使用相同的資金連續廣播兩個衝突的交易,但只有一項交易得到確認。攻擊者的目標是透過驗證對他有利的交易來使另一個支付無效(例如,將相同的資金髮送到他控制的地址)。競賽攻擊一般要求接收者在交易未經確認前,就確認該筆支付已到賬。· 芬妮攻擊(Finney attacks): 攻擊者將一個交易預挖為一個區塊,而沒有立即將其廣播到網路中。相反,他將相同的代幣花費在另一筆交易中,然後才廣播他之前所預挖的區塊,這可能會使支付無效。芬妮攻擊需要發生一系列相關聯的事情,並且還取決於接收者能夠接受未經確認的交易。正如我們所看到的,等待區塊確認能夠大大降低成為雙花受害者的風險。總結
“雙花”問題可能會讓某些使用者在電子現金系統上多次使用同一筆資金,謀取不當的經濟收益。在傳統上,該領域也缺乏相對應的解決方案。但是,好在中心化的金融方案使用了盲籤方式作為解決該問題的一種方式。後來,工作量證明機制和區塊鏈技術的建立催生了比特幣,成為一種強大的去中心化貨幣形式,這種形式能夠有效防範雙重支付的發生,這反過來又激發了成千上萬其他加密貨幣專案。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;