區(qū)塊鏈系統(tǒng)的安全性與可用性討論
現(xiàn)在工作是越來越繁忙了,聽譯視頻的頻率降得越來越低。為了盡可能跟上最新的研究進(jìn)展,還是有必要堅(jiān)持聽譯的。今天為大家?guī)淼氖莵碜悦艽a學(xué)頂級會議CCS 2016的演講視頻《工作量證明區(qū)塊鏈系統(tǒng)的安全性與可用性討論》(On the Security and Performance of Proof ow Work Blockchains)。
如果對比特幣和區(qū)塊鏈技術(shù)有深入了解,就會發(fā)現(xiàn)比特幣和區(qū)塊鏈技術(shù)更多地涉及到了經(jīng)濟(jì)學(xué)和博弈論的相關(guān)知識。我們來看幾個(gè)簡單的例子:
· 比特幣可以遭受51%算力攻擊(51% Attack)。然而,如果攻擊者真的發(fā)起51%攻擊,雖然它可以篡改交易信息、獲得大量的比特幣,但這也要付出大量的算力成本。更重要的是,比特幣賬本的篡改很可能會導(dǎo)致人們對比特幣系統(tǒng)喪失信心,使得比特幣價(jià)格大跌,反而讓攻擊者遭受更大的損失。因此,雖然51%攻擊理論上是可行的,但由于比特幣已經(jīng)牽涉到巨大的算力投入,實(shí)施51%攻擊從經(jīng)濟(jì)角度講是一件吃力不討好的事情。
· 公鏈系統(tǒng)還可以遭受自私挖礦攻擊(Selfish Mining Attack)。這是Eyal和Sirer在密碼學(xué)著名會議Financial Cryptography 2014上提出的一種攻擊方法。其基本思想是:攻擊者在成功挖到一個(gè)區(qū)塊后可以暫時(shí)不公開此區(qū)塊,而是默默地在這個(gè)區(qū)塊上挖下一個(gè)區(qū)塊。當(dāng)其它誠實(shí)節(jié)點(diǎn)挖到了這個(gè)區(qū)塊后,攻擊者再把自己挖到的這個(gè)區(qū)塊公開出去。這樣做的好處在于,攻擊者由于先挖到了區(qū)塊,他可以優(yōu)先在這個(gè)區(qū)塊之后繼續(xù)挖礦,而誠實(shí)節(jié)點(diǎn)會把算力浪費(fèi)在已經(jīng)有下一個(gè)區(qū)塊的區(qū)塊上。這么做看似可行,但攻擊者也有很大的風(fēng)險(xiǎn):如果攻擊者區(qū)塊發(fā)布的速度不夠快,全網(wǎng)可能會很快接受誠實(shí)節(jié)點(diǎn)挖到的區(qū)塊,攻擊者就會蒙受巨大的損失,還不如早早公開挖到的區(qū)塊為妙。
為此,衡量區(qū)塊鏈?zhǔn)欠癜踩?,不?yīng)該只從密碼學(xué)或者協(xié)議的角度去分析,更應(yīng)該把博弈論的思想引入其中,通過衡量攻擊者的行為是否對自己最有利來判斷區(qū)塊鏈系統(tǒng)的安全性。而這正是本次視頻的核心思想。在巴比特上我只給出此視頻關(guān)鍵性的結(jié)論和重要的鏈接。由于巴比特上無法上傳過大的視頻文件,因此本視頻的聽譯版本發(fā)布在我的知乎專欄中(https://zhuanlan.zhihu.com/p/49494558),感興趣的讀者朋友們可以去專欄上觀看。連接打不開的原因是視頻正在知乎審核,相信在11月13日上午就應(yīng)該可以審核通過。
內(nèi)容簡介
要說區(qū)塊鏈系統(tǒng)最大的問題就是交易吞吐量不足了。一般用系統(tǒng)所能支持的每秒交易量(Transactions per Second,TPS)衡量交易吞吐量。而影響交易吞吐量的核心參數(shù)有兩個(gè):(1)區(qū)塊生成時(shí)間(Block GeneraTIon TIme),即平均每隔多長時(shí)間可以生成一個(gè)區(qū)塊;(2)區(qū)塊大?。˙lock Size),側(cè)面表示每隔區(qū)塊所能容納的交易數(shù)量。例如,比特幣的區(qū)塊生成時(shí)間為10分鐘,區(qū)塊大小為1MB,而比特幣的每個(gè)交易所需要消耗的存儲量大約為0.25KB,因此比特幣的TPS為1000KB/0.25KB/60s=6.67。以太坊的區(qū)塊生成時(shí)間大約為15秒,雖然以太坊沒有規(guī)定每個(gè)區(qū)塊的大小限制,但是由于區(qū)塊越大,區(qū)塊在網(wǎng)絡(luò)中的傳播速度越慢,因此以太坊實(shí)際的TPS約為20。從定性角度講,我們可以很直觀地得到下面的結(jié)論:
· 區(qū)塊生成時(shí)間越短,出塊速度越快,交易速度也就越快
· 區(qū)塊大小越大,每個(gè)區(qū)塊所能容納的交易量越大,交易速度也會變快
如果區(qū)塊鏈系統(tǒng)的點(diǎn)對點(diǎn)(Peer-to-Peer,P2P)網(wǎng)絡(luò)沒有網(wǎng)絡(luò)延遲,所有區(qū)塊都可以瞬間同步給全網(wǎng)所有節(jié)點(diǎn),我們就可以把區(qū)塊生成時(shí)間設(shè)置得足夠小,區(qū)塊大小設(shè)置得足夠大,使得區(qū)塊鏈系統(tǒng)支持任意高的交易吞吐量。但是,由于網(wǎng)絡(luò)延遲的存在,全網(wǎng)所有節(jié)點(diǎn)并不總能很快地獲得最新的區(qū)塊信息,這就會導(dǎo)致競爭區(qū)塊的出現(xiàn)。當(dāng)全網(wǎng)挖出了兩個(gè)區(qū)塊時(shí),兩個(gè)區(qū)塊就需要根據(jù)規(guī)則進(jìn)行競爭,最終只有一個(gè)區(qū)塊會勝出,而另一個(gè)區(qū)塊將被廢棄,成為廢區(qū)塊(Stale Block)此區(qū)塊關(guān)聯(lián)的算力也就被浪費(fèi)了。
不僅是算力浪費(fèi)的問題,競爭區(qū)塊是區(qū)塊鏈出現(xiàn)各種共識協(xié)議攻擊的核心原因。正是由于競爭區(qū)塊的存在,只要攻擊者可以在篡改交易時(shí)確保被篡改交易所關(guān)聯(lián)的區(qū)塊可以競爭成為合法區(qū)塊,攻擊就可以成功。這就引入了區(qū)塊鏈中針對共識協(xié)議的經(jīng)典攻擊:自私挖礦攻擊,雙花攻擊(Double Spending Attack)。
直觀來看,區(qū)塊成為廢區(qū)塊的比率,即廢塊率(Stale Block Rate)越高,區(qū)塊鏈遭受攻擊的概率也就越高。實(shí)際測試表明,比特幣的廢塊率約為0.4%(感謝比特幣極慢的出塊時(shí)間和嚴(yán)格的區(qū)塊大小限制);以太坊的廢塊率約為6.8%(但由于以太坊中有叔區(qū)塊的概念,因此雖然區(qū)塊率被廢棄,但關(guān)聯(lián)的算力仍然起作用);狗幣的廢塊率是0.6%,萊特幣的廢塊率是0.3%。
有了這樣的結(jié)論,區(qū)塊鏈系統(tǒng)設(shè)計(jì)者們就要做出權(quán)衡了:
· 提高區(qū)塊生成時(shí)間、增加區(qū)塊大小,則交易吞吐量會顯著提高,但區(qū)塊鏈的安全性就會降低。
· 反之,降低區(qū)塊生成時(shí)間、減小區(qū)塊大小,交易吞吐量就會降低,但區(qū)塊鏈安全性會提高。
我們要解決的問題是:不同的區(qū)塊鏈系統(tǒng)會設(shè)置不同的參數(shù),參與節(jié)點(diǎn)數(shù)量、算力分布、出塊時(shí)間、區(qū)塊大小、乃至攻擊者所擁有的算力都不一樣,如何橫向?qū)Ρ雀鱾€(gè)區(qū)塊鏈系統(tǒng)的安全性,從而選擇最優(yōu)的參數(shù)呢?
本視頻對應(yīng)的論文的主要貢獻(xiàn)為:
· 提出了一種量化衡量指標(biāo),可以客觀分析工作量證明區(qū)塊鏈系統(tǒng)在抵御雙花攻擊、自私挖礦攻擊方面的能力。
· 設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)區(qū)塊鏈仿真器,可以仿真區(qū)塊鏈系統(tǒng)的各個(gè)參數(shù),得到對應(yīng)的廢塊率,從而幫助衡量區(qū)塊鏈系統(tǒng)的安全性。
這一工作可以得到很多有意思的結(jié)果,例如:
1. 可以把比特幣的出塊時(shí)間從10分鐘提高到1分鐘,使得比特幣的TPS從6.67提高到66.7,同時(shí)不會犧牲比特幣的安全性。
2. 37個(gè)以太坊的區(qū)塊確認(rèn)量等價(jià)于6個(gè)比特幣的區(qū)塊確認(rèn)量??紤]到以太坊的出塊時(shí)間為15秒,而比特幣的出塊時(shí)間為10分鐘,因此當(dāng)交易被以太坊區(qū)塊確認(rèn)后,只需等待大約10分鐘,其交易的安全性就等價(jià)于比特幣等待60分鐘的安全性。
3. 自私挖礦攻擊不一定是一個(gè)理智行為。在特定的場景下,與其實(shí)施自私挖礦,不如誠實(shí)挖礦的收益大。
4. 區(qū)塊挖礦回報(bào)率越高(用代幣所具有的實(shí)際價(jià)格衡量),則區(qū)塊鏈系統(tǒng)本身的安全性也會越高。
系統(tǒng)主要有2部分組成:
· 區(qū)塊鏈仿真器,可以配置相應(yīng)的參數(shù)實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)的仿真,得到廢塊率。支持設(shè)置的參數(shù)有:區(qū)塊生成時(shí)間、各節(jié)點(diǎn)算力分布情況、區(qū)塊大小、各節(jié)點(diǎn)的地理位置(即節(jié)點(diǎn)之間的網(wǎng)絡(luò)延時(shí))、節(jié)點(diǎn)維護(hù)的TCP連接數(shù)量(即各節(jié)點(diǎn)的網(wǎng)絡(luò)吞吐量)、區(qū)塊傳播協(xié)議等。
· 安全模型,可以得到相應(yīng)的安全量化指標(biāo)。支持設(shè)置的參數(shù)有:攻擊者所擁有的算力、攻擊者的網(wǎng)絡(luò)連接情況、攻擊者分隔全網(wǎng)算力的能力(即日蝕攻擊,參見我之間分享的視頻:比特幣點(diǎn)對點(diǎn)網(wǎng)絡(luò)中的日蝕攻擊)、全網(wǎng)默認(rèn)交易的確認(rèn)次數(shù)。
通過對比量化指標(biāo),我們就能橫向?qū)Ρ雀鱾€(gè)區(qū)塊鏈系統(tǒng)的安全性了。