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

引言

現在工作是越來越繁忙了,聽譯視頻的頻率降得越來越低。為了儘可能跟上最新的研究進展,還是有必要堅持聽譯的。今天為大家帶來的是來自密碼學頂級會議CCS 2016的演講視頻《工作量證明區塊鏈系統的安全性與可用性討論》(On the Security and Performance of Proof ow Work Blockchains)。

如果對比特幣和區塊鏈技術有深入瞭解,就會發現比特幣和區塊鏈技術更多地涉及到了經濟學和博弈論的相關知識。我們來看幾個簡單的例子:

  • 比特幣可以遭受51%算力攻擊(51% Attack)。然而,如果攻擊者真的發起51%攻擊,雖然它可以篡改交易信息、獲得大量的比特幣,但這也要付出大量的算力成本。更重要的是,比特幣賬本的篡改很可能會導致人們對比特幣系統喪失信心,使得比特幣價格大跌,反而讓攻擊者遭受更大的損失。因此,雖然51%攻擊理論上是可行的,但由於比特幣已經牽涉到巨大的算力投入,實施51%攻擊從經濟角度講是一件吃力不討好的事情。
  • 公鏈系統還可以遭受自私挖礦攻擊(Selfish Mining Attack)。這是Eyal和Sirer在密碼學著名會議Financial Cryptography 2014上提出的一種攻擊方法。其基本思想是:攻擊者在成功挖到一個區塊後可以暫時不公開此區塊,而是默默地在這個區塊上挖下一個區塊。當其它誠實節點挖到了這個區塊後,攻擊者再把自己挖到的這個區塊公開出去。這樣做的好處在於,攻擊者由於先挖到了區塊,他可以優先在這個區塊之後繼續挖礦,而誠實節點會把算力浪費在已經有下一個區塊的區塊上。這麼做看似可行,但攻擊者也有很大的風險:如果攻擊者區塊發佈的速度不夠快,全網可能會很快接受誠實節點挖到的區塊,攻擊者就會蒙受巨大的損失,還不如早早公開挖到的區塊為妙。

為此,衡量區塊鏈是否安全,不應該只從密碼學或者協議的角度去分析,更應該把博弈論的思想引入其中,通過衡量攻擊者的行為是否對自己最有利來判斷區塊鏈系統的安全性。而這正是本次視頻的核心思想。在巴比特上我只給出此視頻關鍵性的結論和重要的鏈接。由於巴比特上無法上傳過大的視頻文件,因此本視頻的聽譯版本發佈在我的知乎專欄中(https://zhuanlan.zhihu.com/p/49494558),感興趣的讀者朋友們可以去專欄上觀看。連接打不開的原因是視頻正在知乎審核,相信在11月13日上午就應該可以審核通過。

內容簡介

工作量证明区块链系统的安全性与可用性讨论

要說區塊鏈系統最大的問題就是交易吞吐量不足了。一般用系統所能支持的每秒交易量(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%。

工作量证明区块链系统的安全性与可用性讨论

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

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

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

工作量证明区块链系统的安全性与可用性讨论

本視頻對應的論文的主要貢獻為:

  • 提出了一種量化衡量指標,可以客觀分析工作量證明區塊鏈系統在抵禦雙花攻擊、自私挖礦攻擊方面的能力。
  • 設計並實現了一個區塊鏈仿真器,可以仿真區塊鏈系統的各個參數,得到對應的廢塊率,從而幫助衡量區塊鏈系統的安全性。

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

  1. 可以把比特幣的出塊時間從10分鐘提高到1分鐘,使得比特幣的TPS從6.67提高到66.7,同時不會犧牲比特幣的安全性。
  2. 37個以太坊的區塊確認量等價於6個比特幣的區塊確認量。考慮到以太坊的出塊時間為15秒,而比特幣的出塊時間為10分鐘,因此當交易被以太坊區塊確認後,只需等待大約10分鐘,其交易的安全性就等價於比特幣等待60分鐘的安全性。
  3. 自私挖礦攻擊不一定是一個理智行為。在特定的場景下,與其實施自私挖礦,不如誠實挖礦的收益大。
  4. 區塊挖礦回報率越高(用代幣所具有的實際價格衡量),則區塊鏈系統本身的安全性也會越高。
工作量证明区块链系统的安全性与可用性讨论

系統主要有2部分組成:

  • 區塊鏈仿真器,可以配置相應的參數實現區塊鏈系統的仿真,得到廢塊率。支持設置的參數有:區塊生成時間、各節點算力分佈情況、區塊大小、各節點的地理位置(即節點之間的網絡延時)、節點維護的TCP連接數量(即各節點的網絡吞吐量)、區塊傳播協議等。
  • 安全模型,可以得到相應的安全量化指標。支持設置的參數有:攻擊者所擁有的算力、攻擊者的網絡連接情況、攻擊者分隔全網算力的能力(即日蝕攻擊,參見我之間分享的視頻:比特幣點對點網絡中的日蝕攻擊)、全網默認交易的確認次數。

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

論文作者們將區塊鏈仿真器開源,感興趣的朋友們可以下載下來試一試。


分享到:


相關文章: