當前位置:
首頁 > 最新 > 如何解決「雙花攻擊」:比特幣的SPV機制

如何解決「雙花攻擊」:比特幣的SPV機制

歡迎關注【簡億區塊鏈@簡書】

專欄地址:https://www.jianshu.com/u/6dce6d0c99dc


提到比特幣等數字加密貨幣,很容易聯想到交易安全問題。首先想到的就是「雙花問題」和「拜占庭將軍問題」。那麼,什麼是「雙花問題」和「拜占庭將軍問題」呢?

「拜占庭將軍問題」以及比特幣如何完美解決該問題,本專欄其他文章(如何解決「拜占庭將軍」問題:比特幣的POW共識機制)中會做詳細介紹,敬請期待(預計2018年3月12日20:00發布)~

「雙花攻擊」(double spend attack)又叫「雙重消費攻擊」。

通俗的理解,就是一筆資金,通過某種方式(有可能是欺騙的手段或者支付系統bug問題)被花費了兩次,取得了超過該筆資金的服務。

下面舉一個極端的例子:

個體戶TT銀行有存款100萬,向商戶A購買了一匹鋼材,價值100萬;商戶A支持通過支票支付的方式。

那麼商戶A是如何確認這張支票不是「空頭」的呢?

他會向對應的銀行(中心化的有認證資質的機構)去查詢這張支票的擁有者是否賬戶上有足夠100萬的餘額可供提取。商戶A查詢的即時結果是:足額。所以商戶A就(基於某種信任)向個體戶TT發貨。

然後,個體戶TT 又到了商戶B去購買了價值100萬的實木傢具,同樣是採用支票支付方式。過程同上。

上述過程中,個體戶TT通過欺詐的手段(藉助於可信任的中心化認證機構),將銀行中的100萬資產消費了兩次,獲取到了兩次的收益,這就是「雙花攻擊」。

說到「雙花攻擊」,大部分都發生在「數字貨幣」領域,因為數字貨幣,因為數據安全性的問題,很容易被「偽造」「複製」「篡改」。

而物理貨幣(特指可見的物理貨幣:比如紙幣,硬幣,黃金等)就極少存在「雙花攻擊」問題。因為,物理貨幣很難被複制篡改,因為交易的參與者會很容易而且很快的驗證交易中的物理貨幣的真偽。

像比特幣,萊特幣,EOS幣等虛擬數字加密貨幣,由於其「去中心化」的屬性,導致沒有一個中心化的機構能夠對虛擬貨幣進行認證「該貨幣只被消費一次」,所以比特幣等都是把如何解決「雙花攻擊」問題放在最高優先順序。

---轉譯自investopedia(投資百科) 《Double-Spending》

比特幣等虛擬加密貨幣確確實實完美解決了「雙花攻擊」問題,雖然無需任何中心化的機構背書,那麼,究竟是如何解決該問題的呢?


可以簡單的理解為,比特幣採用的是一種基於交易日誌記錄跟蹤的機制,來驗證每一筆交易的真實性,以此來避免「雙花攻擊」;

比特幣系統要求所有的交易毫無例外的都要被記錄在一個公開的,可分享的,去中心化的「賬本」上(這個「賬本」,其實指的就是區塊鏈)。

我們在什麼是UTXO?淺談比特幣「賬戶」模型一文中,初步介紹了下,比特幣交易底層原理。

我們知道,每一個區塊中的每一筆交易都是「鏈條」式的前後相連(通過唯一的交易ID和hash值)。

也就是說,原則上最安全最可靠的驗證方式是:驗證當前筆交易所位於的「鏈」上的所有交易詳情(包括交易的鑒權,交易的凈UTXO,交易的可消費證明等等),類似於所有相關聯的交易日誌追蹤,就可以保證交易的可靠安全性,杜絕重複消費問題。

但是,如果這麼做的話,成本有多高呢?

1)容量限制

需要同步所有的區塊信息(包含區塊大小數據,區塊頭數據,交易大小數據,區塊體數據等),雖然每一個區塊大小被嚴格限制在1MB內,但所有區塊的總需要同步大小上百G。在比特幣網路中,不是每個節點都有能力儲存完整的區塊鏈數據。大多數是普通用戶(俗稱「韭菜」,即只有基本的比特幣投資及消費支付需要的用戶),他們可能沒有礦機,甚至連高端配置的電腦都沒有,那麼他們是否也要運行一個全節點程序呢?。

PS :在升級到Bitcoin Core 0.13版本之後,增加隔離見證技術(Segregated Witness),每個區塊大小理論上被「軟擴容」到4MB。

2)網路壓力

毋庸置疑,超大數據量的同步,對比特幣網路的擁堵會造成很大的壓力。

3)比特幣節點的CPU壓力

所以,中本聰是怎麼解決這個問題呢?

SPV(Simplified payment verification)機制

SPV:簡單支付認證

先一句話介紹下,比特幣區塊的打包機制:比特幣的每一個區塊在打包的時候,會將該區塊包含的所有交易(一般是2000筆以內)進行簡單的支付認證,認證的方式就是,通過某種機制來驗證,每一筆交易都曾經出現在主「鏈」上,也就意味著曾經被驗證過。

那採用什麼方式去驗證呢?

基於各種顧慮,比如上文說的上百G容量限制。Satoshi(中本聰)在論文中提出了:「節點無需下載所有的區塊數據,而只需要載入所有區塊頭數據(block header的大小為80B),即可驗證這筆交易是否曾經被比特幣網路認證過。」

---摘自BitcoinWiki《Scalability#Simplified payment verification》

用戶雖然不能自己驗證交易(因為沒有完全的交易信息詳情),但如果能夠從區塊鏈的某處找到相符的交易(區塊頭中包含的Merkle Tree 的hash值,就可以鏈式最終定位到該筆交易是否曾經出現過),他就可以知道網路已經認可了這筆交易,而且得到了網路的多個確認。

截止2018年3月8號上午10點10分,最新區塊高度為:512563。也就是說,就算一個普通節點進行SPV認證需要下載所有的區塊頭數據,那麼總容量也只有40MB。(連諾基亞板磚都能運行了吧?)

PS :關於比特幣「區塊」數據結構詳細解析,將在本專欄比特幣的「區塊」中到底藏著什麼?Block Structure解析?文章中詳細介紹,敬請期待(預計2018年3月14日20:00發布)。

PS: 在比特幣區塊瀏覽器:https://blockchain.info/zh-cn/可查詢所有區塊播報詳情。

高度512563的比特幣最新區塊播報詳情信息

3.SPV認證,需要下載所有的區塊頭信息嗎?

---完美的「布隆過濾器」!

什麼是「布隆過濾器」?

可以把「布隆過濾器」理解為:水管與水管連接處的「濾網」,符合「濾網」過濾規則(濾網眼的大小)的水流才會通過。

類比"布隆過濾器"的濾網

上文算過,就算全部區塊的header信息均被下載,也才40MB,但是真的有必要嗎?

這裡面設計到了中本聰在比特幣系統中增加的一個功能:布隆過濾器(Bloom Filter);節點會在通信鏈路上建立一個布隆過濾器,過濾掉那些不包含有目標地址的交易信息,這一步能避免掉大量不相關的數據下載。

基於SPV機制和布隆過濾器功能,市面上出現了很多「輕錢包」,使得「輕錢包」在手機上就能運行,比如:ImToken,火幣錢包等等。

以上內容,如有不當之處,歡迎Diss指正~

【簡億區塊鏈時間】本期到此結束!

另附預告:

1)預計發布日期:2018年3月12日 20:00

如何解決「拜占庭將軍」問題:比特幣的POW共識機制

2)預計發布日期:2018年3月14日 20:00

比特幣的「區塊」中到底藏著什麼?Block Structure解析


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

關於烘焙的一些想法
穿越俄羅斯西伯利亞鐵路 領略神秘異國風情

TAG:全球大搜羅 |