區塊鏈60講 | 第20集:什麼是雙花問題?

買賣虛擬貨幣

哈嘍大家好,我是小K君。今天我們要講的內容是:“什麼是雙花問題”?


之前的課程,我們已經講過了區塊鏈的四大核心技術都有哪些,它們共同決定了區塊鏈的整個基礎框架。可是在區塊鏈網路中,還有一些問題是四大核心技術也沒有辦法完全解決的,比如網路擁堵問題、效率問題等等。而今天,我們要說的就是其中的一種,也就是雙花問題。
所謂雙花問題,顧名思義,就是一筆錢被重複花了兩次。比如,我們微信錢包裡有100塊錢,我們先去飯店吃了頓飯,結果微信出了bug,這一筆錢並沒有被銀行同步,還留在錢包裡,於是我們又能拿著同樣的100塊錢去看場電影,這就屬於雙花問題。


一般來說,雙花問題分為兩種情況:一種是記賬前雙花,比如同一筆錢,因為銀行同步延遲的問題,被多次使用,像我們剛才舉的例子就是這種情況;另一種是記賬後的雙花,一筆錢花出去,銀行已經記賬,但如果你攻擊銀行,從銀行賬本上刪除了這筆花費,就可以再花一次了,即雙花。
那在現實生活和區塊鏈中,我們該如何解決雙花問題呢?


在現實生活中,作為收款者來說,比如商店老闆,防範第一種雙花很容易,不以付款者的交易記錄為依據,只有確認自己賬戶上錢到賬才交付商品。比如用微信支付,不僅要看使用者出示的手機支付頁面,也要看自己的手機上是否收到。當然,如果很小額的交易,生意又忙,使用者也是街坊鄰里,只看支付頁面也可以,這個小風險商店可以承擔。
在區塊鏈應用中,防範未記賬前的雙花也與之類似,最好的解決方案也是等記賬後,再完成交易,大額交易一般都是走這種路徑。不過,如果金額很小,人又熟,交易是可以不記入區塊鏈的,即沒有記賬的情況下,也可以完成支付。這叫“零確認支付”,只不過這種方式,收款方是要承擔被雙花的風險。


而防範第二種雙花就比較難了。在生活中,比如微信已經記了賬,但駭客攻擊了微信的伺服器,商戶收款的交易記錄一旦丟失,商戶自然就受到了損失,付款者又可以使用原來的這筆錢。不過,這種情況極少出現,既然要記賬,那一定是非常小心儲存賬本的。


區塊鏈應用也類似,整個區塊鏈技術的核心就是保障賬本的安全,記了賬就不能被雙花。但安全不是絕對的,即使記了賬,仍然有可能被雙花。因為,區塊鏈應用不是依靠中央銀行這樣的機構的權威來保障賬本安全的,而是依靠分佈世界各地的節點都儲存統一份的賬本,並且由全世界的礦工用算力來競爭記賬,產生完全一致的新賬頁的。


當有人掌握了全網51%以上的算力時,就能夠將剛剛記過的賬頁作廢,把裡面的一筆花費恢復成沒被花掉的狀態。這就是記賬後的雙花了,這種攻擊方法叫“51%攻擊”。這種雙花相對於記賬前的雙花比較難實現,因為掌握51%算力需要很多錢。但如果雙花的收益足夠大,攻擊仍然是有可能的。怎麼辦呢?


解決的辦法是,等待更多確認。51%的算力要作廢最新賬頁,其成功概率是51%,但作廢連續兩個新賬頁的概率就是51%*51%=26%,作廢3個的概率是13.3%,作廢6個的概率只有0.46%了。如果攻擊者沒有掌握51%的算力,只掌握20%的算力,那麼攻擊成功的概率就只有0.0064%了。


這樣,問題就簡單了。商戶可以根據交易金額的大小來決定如何防範雙花。


如果交易金額很小,比如賣支鉛筆,完全可以接受零確認,對使用者既省時又貼心。萬一雙花也不在乎。如果交易金額大一些,比如賣件衣服,那建議等待一個確認就可以了。不會有駭客為了你一套衣服動用51%的算力發起攻擊的。如果交易金額很大,比如買鑽石,那就要小心了。要根據全網算力的成本估算一下需要多少個確認,金額越大,需要的確認數就越多。


比如這個區塊鏈是10分鐘確認一次,全網51%的算力每10分鐘的成本是10萬元。你賣的鑽石價值100萬元。那麼你至少要10個確認以上才能交付鑽石。最好是20個以上確認。
總之,預防雙花攻擊,一個基本的原理就是,讓攻擊者賠錢的概率遠遠高於你被雙花的概率。
當然,為了預防雙花問題,區塊鏈本身從技術方面,也在共識機制的基礎上,引入了一些其他技術,比如時間戳和UTXO模型。透過它們,進一步提高區塊鏈的記賬安全性、以及雙花的作惡成本。至於它們具體是如何解決的,容小K君賣個關子,我們下節課再說~
注:這些例子資料都是為了簡便給的估值,真實的攻擊成本收益分析非常複雜。

免責聲明:

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

推荐阅读

;