工作量證明區塊鏈系統的安全性與可用性討論

2021-09-12 21:48:05 字數 2473 閱讀 6474

鏈客,有問必答!

· 位元幣可以遭受51%算力攻擊(51% attack)。然而,如果攻擊者真的發起51%攻擊,雖然它可以篡改交易資訊、獲得大量的位元幣,但這也要付出大量的算力成本。更重要的是,位元幣賬本的篡改很可能會導致人們對位元幣系統喪失信心,使得位元幣**大跌,反而讓攻擊者遭受更大的損失。因此,雖然51%攻擊理論上是可行的,但由於位元幣已經牽涉到巨大的算力投入,實施51%攻擊從經濟角度講是一件吃力不討好的事情。

· 公鏈系統還可以遭受自私挖礦攻擊(selfish mining attack)。這是eyal和sirer在密碼學著名會議financial cryptography 2014上提出的一種攻擊方法。其基本思想是:攻擊者在成功挖到乙個區塊後可以暫時不公開此區塊,而是默默地在這個區塊上挖下乙個區塊。當其它誠實節點挖到了這個區塊後,攻擊者再把自己挖到的這個區塊公開出去。這樣做的好處在於,攻擊者由於先挖到了區塊,他可以優先在這個區塊之後繼續挖礦,而誠實節點會把算力浪費在已經有下乙個區塊的區塊上。這麼做看似可行,但攻擊者也有很大的風險:如果攻擊者區塊發布的速度不夠快,全網可能會很快接受誠實節點挖到的區塊,攻擊者就會蒙受巨大的損失,還不如早早公開挖到的區塊為妙。

內容簡介

要說區塊鏈系統最大的問題就是交易吞吐量不足了。一般用系統所能支援的每秒交易量(transactions per second,tps)衡量交易吞吐量。而影響交易吞吐量的核心引數有兩個:(1)區塊生成時間(block generation time),即平均每隔多長時間可以生成乙個區塊;(2)區塊大小(block size),側面表示每隔區塊所能容納的交易數量。例如,位元幣的區塊生成時間為10分鐘,區塊大小為1mb,而位元幣的每個交易所需要消耗的儲存量大約為0.25kb,因此位元幣的tps為1000kb/0.25kb/60s=6.67。以太坊的區塊生成時間大約為15秒,雖然以太坊沒有規定每個區塊的大小限制,但是由於區塊越大,區塊在網路中的傳播速度越慢,因此以太坊實際的tps約為20。從定性角度講,我們可以很直觀地得到下面的結論:

· 區塊生成時間越短,出塊速度越快,交易速度也就越快

· 區塊大小越大,每個區塊所能容納的交易量越大,交易速度也會變快

如果區塊鏈系統的點對點(peer-to-peer,p2p)網路沒有網路延遲,所有區塊都可以瞬間同步給全網所有節點,我們就可以把區塊生成時間設定得足夠小,區塊大小設定得足夠大,使得區塊鏈系統支援任意高的交易吞吐量。但是,由於網路延遲的存在,全網所有節點並不總能很快地獲得最新的區塊資訊,這就會導致競爭區塊的出現。當全網挖出了兩個區塊時,兩個區塊就需要根據規則進行競爭,最終只有乙個區塊會勝出,而另乙個區塊將被廢棄,成為廢區塊(stale block)此區塊關聯的算力也就被浪費了。

不僅是算力浪費的問題,競爭區塊是區塊鏈出現各種共識協議攻擊的核心原因。正是由於競爭區塊的存在,只要攻擊者可以在篡改交易時確保被篡改交易所關聯的區塊可以競爭成為合法區塊,攻擊就可以成功。這就引入了區塊鏈中針對共識協議的經典攻擊:自私挖礦攻擊,雙花攻擊(double spending attack)。

直觀來看,區塊成為廢區塊的比率,即廢塊率(stale block rate)越高,區塊鏈遭受攻擊的概率也就越高。實際測試表明,位元幣的廢塊率約為0.4%(感謝位元幣極慢的出塊時間和嚴格的區塊大小限制);以太坊的廢塊率約為6.8%(但由於以太坊中有叔區塊的概念,因此雖然區塊率被廢棄,但關聯的算力仍然起作用);狗幣的廢塊率是0.6%,萊特幣的廢塊率是0.3%。

有了這樣的結論,區塊鏈系統設計者們就要做出權衡了:

· 提高區塊生成時間、增加區塊大小,則交易吞吐量會顯著提高,但區塊鏈的安全性就會降低。

· 反之,降低區塊生成時間、減小區塊大小,交易吞吐量就會降低,但區塊鏈安全性會提高。

我們要解決的問題是:不同的區塊鏈系統會設定不同的引數,參與節點數量、算力分布、出塊時間、區塊大小、乃至攻擊者所擁有的算力都不一樣,如何橫向對比各個區塊鏈系統的安全性,從而選擇最優的引數呢?

· 提出了一種量化衡量指標,可以客觀分析工作量證明區塊鏈系統在抵禦雙花攻擊、自私挖礦攻擊方面的能力。

· 設計並實現了乙個區塊鏈**器,可以**區塊鏈系統的各個引數,得到對應的廢塊率,從而幫助衡量區塊鏈系統的安全性。

這一工作可以得到很多有意思的結果,例如:

可以把位元幣的出塊時間從10分鐘提高到1分鐘,使得位元幣的tps從6.67提高到66.7,同時不會犧牲位元幣的安全性。

37個以太坊的區塊確認量等價於6個位元幣的區塊確認量。考慮到以太坊的出塊時間為15秒,而位元幣的出塊時間為10分鐘,因此當交易被以太坊區塊確認後,只需等待大約10分鐘,其交易的安全性就等價於位元幣等待60分鐘的安全性。

自私挖礦攻擊不一定是乙個理智行為。在特定的場景下,與其實施自私挖礦,不如誠實挖礦的收益大。

區塊挖礦回報率越高(用代幣所具有的實際**衡量),則區塊鏈系統本身的安全性也會越高。

系統主要有2部分組成:

· 區塊鏈**器,可以配置相應的引數實現區塊鏈系統的**,得到廢塊率。支援設定的引數有:區塊生成時間、各節點算力分布情況、區塊大小、各節點的地理位置(即節點之間的網路延時)、節點維護的tcp連線數量(即各節點的網路吞吐量)、區塊傳播協議等。

通過對比量化指標,我們就能橫向對比各個區塊鏈系統的安全性了。

區塊鏈(中心化 工作量證明)

中心化數需要乙個類似銀行的中心機構來驗證交易的。去中心化本質上是讓所有的借點都能驗證交易的真偽,用非對稱加密技術來解決中心化問題,工作量證明機制是位元幣不可篡改的技術 1 工作量證明機制 是一種對在差不多時間內發生的事物的先後順序達成共識的一種演算法。監測工作的整個過程通常是效率非常低的,而通過對工...

區塊鏈初始化與實現POW工作量證明

package blc import time strconv bytes crypto sha256 定義區塊 type block struct 定義區塊生成hash的方法 func block block sethash byte 4.生成hash hash sha256.sum256 blo...

區塊鏈初始化與實現POW工作量證明

package blc import time strconv bytes crypto sha256 定義區塊 type block struct 定義區塊生成hash的方法 func block block sethash byte 4.生成hash hash sha256.sum256 blo...