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

分類:OK區塊鏈60講/2020-03-19/小螞蟻/閱讀:

OK區塊鏈60講第20集:什么是雙花問題文字版:

之前的課程,我們已經講過了區塊鏈的四大核心技術都有哪些,它們共同決定了區塊鏈的整個基礎框架。可是在區塊鏈網絡中,還有一些問題是四大核心技術也沒有辦法完全解決的,比如網絡擁堵問題、效率問題等等。而今天,我們要說的就是其中的一種,也就是雙花問題。

所謂雙花問題,顧名思義,就是一筆錢被重復花了兩次。比如,我們微信錢包里有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君賣個關子,我們下節課再說~

注:這些例子數據都是為了簡便給的估值,真實的攻擊成本收益分析非常復雜。

比特幣家園
微博二維碼掃一掃關注
官方微博號
CopyRight ? 比特幣家園 www.dljett.com 蘇ICP備18045312號
二維碼
投稿
一日本道在线不卡视频