我們到底需要什麼樣的共識演算法?什麼才是安全的區塊鏈共識演算法?

買賣虛擬貨幣

“我們之所以需要區塊鏈,是因為對於中心化系統最大的擔憂不是作惡代價的大小,而恰恰是作惡成本無法估計、無法量化。作惡的回報並不限於系統內,還可以在系統外。即便是最透明的上市公司,我們也無法獲知股東的所有收益來源,因此,也就無法量化他們能夠透過作惡在系統外獲得多少利益。

無論是POS還是POW,當區塊鏈中「大節點」過於集中的時候,我們將面臨和中心化系統一樣的問題——我們無法量化系統的安全性,於是,只好把安全性寄託於對於節點的信任,而不是可量化的作惡成本上。”

這是任博士關於 POW vs POS 的第三篇,這也將是本系列的最後一篇文章。

本文作者:Maxdeath,任之劼博士,唯鏈區塊鏈高階研究員,主要研究方向包括區塊鏈共識演算法、擴容、應用,曾在國際學術會議上發表多篇區塊鏈論文。

“由於POW和POS(或者其他的什麼演算法)在不同屬性上各有千秋,所以它們各自適用於不同的場景,於是他們會在現實中並存,不同的區塊鏈可以用不同的演算法。”

這似乎是現在更流行的看法,也是個更模稜兩可和左右逢源的看法。但這並不是我的看法。

我的看法其實已經在上兩篇文章裡表達的很明確了,我認為——

在安全性面前,其他的特性都是末節。

同樣的,我認為安全性上遜色的演算法,就是差一些的演算法。

於是,我們又回到了上次我們想要討論、但還沒有討論的問題——

我們究竟需要什麼樣的共識演算法。

其實,以上的論點放在2-3年前可能關注度會更高。在很多人看來,就算我寫擴容、分片或者鏈下技術,都已經是屬於前兩年的、過時了的東西了。更何況是“POW”、“安全性”這種似乎從n年前公鏈專案爆炸的年代就在討論、結果到了大部分公鏈都死了也沒有結果,於是到現在雙方都決定各退一步說:“兩者互有優劣適用場景不同”的話題。

那麼,我為什麼還要寫這個問題呢?為什麼不去寫一些更熱門的話題,例如Defi,例如鏈上治理,例如Staking Economy,例如價值捕獲,例如生態建設等等……

因為在我看來,這個問題並不過時,而且,從未如此重要過。

因為以上的所有問題,在我看來都是安全問題。

因為區塊鏈本身,解決的就是安全問題。

“安全”是指這個系統能夠可靠地按照我們的設想,做它該做的事

那麼,什麼是共識演算法的安全性?

一方面,在之前的兩篇中我們已經介紹了——“所有人都認為的安全”,並不是真正的安全性。同時,“在現實中沒有被攻破”,也並不是安全性的保證。

那麼,理論上的安全呢?有了論文,有了數學證明,總該夠安全了吧。

其實也不盡然。

從理論上,我們可以從分散式系統的方法證明共識演算法是拜占庭容錯的,或者,可以從密碼學的角度證明其中所有采用密碼學的機制都是安全的,我們還可以用Bitcoin backbone protocol裡的模型證明某個演算法適用於區塊鏈共識,因為它擁有和比特幣一樣的特性,然而所有這些關於安全性的證明都是基於某些理論上的模型或者假設,並不代表它們在現實之中就一定是安全的。

例如,BFT裡關於超過2/3誠實節點的假設,對於不同的演算法,這個假設的成立與否是不一定的——如果你要求誠實節點安裝某個客戶端,這個客戶端每十分鐘驗證1MB的交易,那麼多數節點可能可以是誠實的;但如果這個演算法要求誠實節點每秒鐘驗證1M的交易,那麼很多頻寬和計算能力達不到要求的節點顯然是無法完成的,於是,在BFT的模型裡,這些節點就會變成“不誠實”的。而這個時候,如果說每個節點能夠收到相應的激勵的話,他們又會變得誠實起來。於是,一個證明是拜占庭容錯的演算法,未必在現實中是安全的,而一個能容錯1/3的演算法,在現實中,也未必一定比容錯1/5要更安全。

另一個例子就是,不考慮自私挖礦的話,比特幣從理論上來講是“安全的”,因為我們的假設是“惡意節點無法控制超過50%的算力”。但是我們之前已經說了,這個假設本身並不實際,首先獲得50%算力的難度很低,其次在實際之中一些POW專案50%以上的算力就控制在一個或幾個節點手中。

換句話說,實際上,即便在學術界,目前也沒有一個確切的定義,或者說一個公認的,非常貼合實際的模型來描述現實中對於區塊鏈系統“安全”的標準,於是,我們也無從證明,到底什麼才是“安全”的共識演算法。

一個能夠證明的,安全的共識演算法,只是說明了它在某些假設下和某些模型中的安全性。雖然這總比沒有證明好,但是,在我們還在尋找一個能夠更好地描述區塊鏈的模型時,說這種演算法就是我們在尋找的“安全”的共識演算法,區塊鏈系統用了他們就可以高枕無憂了,還為時過早。

那麼,什麼才是“安全”的區塊鏈共識演算法呢?

這裡我說的安全並不是傳統資訊保安裡面講的安全性。

這裡,“安全”是指這個系統能夠可靠地按照我們的設想,做它該做的事。

這件事,在我看來,凌駕於其他一切屬性之上,是區塊鏈共識演算法的首要責任。

因為,區塊鏈的首要責任,也是安全。

這又是一個相當“非主流”的觀點——我猜很多人會說:“區塊鏈的首要責任不是去中心化嗎?”

當然,我承認,去中心化很重要,去中心化是區塊鏈最大的特點,是區塊鏈與中心化系統最大的不同,如果沒有了“去中心化”,那麼區塊鏈也就不能稱之為區塊鏈了。

但是,別忘了比特幣誕生於整個密碼朋克小組的初衷,我們需要去中心的原因,不還是因為我們不相信中心化系統的安全性和可靠性,也就是說,雖然一箇中心,例如銀行,例如政府,告訴我它會做一些事,告訴我們“這是數字貨幣,這裡面的錢記在我的系統裡是安全的,請放心”,但是,我們其實並不完全相信它會遵守我們的約定,而可靠地做這件事嗎?

所有區塊鏈領域的從業者,都應該記住一件事——

我們需要區塊鏈,但其他人並不在乎,他們需要的是一個更好的系統——無論它是中心化的,還是去中心化的。

所以,我們需要去中心化,但它的目的是,我們需要透過提供一個去中心化的區塊鏈,使得我們能夠更好地量化它的安全性,而不需要依賴於對於某個中心的信任,最終,得到一個比中心化系統更安全的系統。

因此,如果天平的兩邊是去中心化和安全性——那麼無論如何我都會選擇安全;如果天平的兩邊是一個“更去中心化、但不那麼安全的系統”和一個“不那麼去中心化、但更安全的系統”,那麼我無論如何都會選擇後者。

但是,在目前的階段,我們確實需要去探索性地嘗試那些“不那麼安全、但是更去中心化”的方法,但是請一定謹記,如果我們都往這個方向走,並且不回頭地走得太遠,那麼最終被拋棄掉的,將不是一個系統而已,而是整個區塊鏈技術。

因此,在我看來,安全是第一位的。

換言之,我們可以不在乎一個區塊鏈是不是能夠“有效地”做它該做的事,是不是能夠“快速地”做它該做的事,是不是能夠“足夠去中心化地”做它該做的事,甚至,我們可以不在乎它是不是能夠“節能地”做它該做的事,我們更不在乎它做事的方法是不是足夠簡潔,足夠優雅,足夠吸引所有人參加生態建設,或者是不是能夠自行啟動,自行進化,自我治理,自發形成一個健康的生態……

因為除了“可靠”這一點,其他的我們早就在中心化系統裡實現過了。

沒錯,我們也許的確只知道如何在中心化的場景下實現以上的這些,而不知道如何在去中心化的情況下實現這些,而這點的確是目前學術界和工業界研究的重點,也是目前媒體和這個圈子聚光燈下的焦點。

然而,如果沒有安全性,這一切都成了無源之水,無本之木。

因為我們無法回答的問題是——

即便我們能夠做出一個去中心化的系統,即便我們找出了以上一切的去中心化實現方法,但是,如果實現這些所有功能的系統不可靠,安全性無法量化,甚至說,最終安全性還是主要取決於對於某個中心、某個創始人、某家公司、某些礦工的信任,那麼我們究竟是為什麼要放棄已然成熟的中心化方案,來使用區塊鏈系統?

換句話說,我們之所以推崇區塊鏈,投入這個領域之中,不就是因為我們認為一箇中心化系統不夠“可靠”,因此,我們希望用“演算法”來代替“信任”,用“機器”來取代“人”嗎?

更何況,正如我以上所說——其實,一切我們正在討論的,歸根結底仍舊是安全問題。因為無論是鏈下技術,鏈上治理,激勵機制,生態建設,經濟模型……所有的這些,只要在鏈上實現,就都會迴歸到區塊鏈共識演算法的安全問題——

如果共識演算法不安全,憑什麼相信節點會執行鏈上治理投票決定的決策?

如果共識演算法不安全,憑什麼認為節點會誠實地對於激勵進行分配?

如果共識演算法不安全,憑什麼認為它天然就成了所謂價值網際網路的基礎設施?

如果共識演算法不安全,憑什麼可以將區塊鏈當做一個可信第三方使用,在上面構建側鏈、支鏈,執行Dapp,並且搭建一整個生態?

這也是我之所以認為這篇東西並不過時,而且,恰恰需要在此時出現的原因——

最近以來,關於共識演算法問題的降溫和公鏈的退潮,讓資本和輿論都開始追逐新的話題和專案。於此同時,也帶了了這種盲目樂觀地將共識演算法當做一個成熟的基礎設施的幻覺,而完全忽略了一個事實——

我們最常用的,也是最司空見慣的被認為是絕對安全的POW,實際上遠比我們認為的要不安全得多。以及,我們其實一直在討論的POW vs. POS的問題,始終都沒有一個結果。所有人都在憧憬區塊鏈的未來,設想著怎麼圍繞區塊鏈搭建生態,怎麼利用區塊鏈重塑經濟,怎麼透過區塊鏈改變世界的時候,只有很少的人和很少的聲音在關注究竟這個區塊鏈究竟能不能用,安不安全。

因此,我們始終需要這種迴歸本質的討論和研究——我們,究竟需要怎樣的共識演算法。以及,一個真正安全的區塊鏈,應該是什麼樣的。

我們需要一個衡量區塊鏈安全的標準

這個問題,其實從前面一段的分析中我已經表達了我的看法——一個區塊鏈的共識演算法的第一標準,是能夠可靠地實現它設計的功能。我們必須知道,當我們用演算法來代替“信任”的部分,得出的共識一定是可靠的,而且,它的可靠程度是可以量化的。否則,整個區塊鏈就毫無意義,因為它能做到的一切中心化系統也能做到,甚至做得更快更好,然而,我們並不能確定它比中心化系統更可靠。

這種可量化的安全,僅滿足於“我們覺得是安全的”的層面是不夠的,停留在“從來沒有發生過”的層面也是不夠的,甚至,停留在“我們可以從理論上證明”的層面,在早些年的探索時期也許還勉強夠用,放在巨量資本已經開始在上面搭建生態的現在,也顯得捉襟見肘了。我們需要一種量化的分析方法和模型,來計算一個共識演算法的安全性,更理想的狀況是,我們能夠根據共識演算法的應用場景需求,來具體量化每一個屬性的安全性。

比如,一個安全的雜湊函式,我們可以計算出需要多少計算能力才能“破解”它(找到一個衝突),於是,我們可以根據相應硬體的價格和時間,量化出雜湊函式的攻擊成本。同理,我們也可以算出橢圓曲線加密的攻擊成本。實際上,在資訊保安的領域裡,這樣的分析從理論到實踐上,都是十分常見的。

現在,我認為,是時候將這樣的模型擴充套件至區塊鏈的領域了,儘管我們需要克服許多困難——

最核心的問題就是,我們要怎麼定義安全,以及怎麼定義攻擊,而這點對於區塊鏈而言並非易事。

以比特幣為例,如果我們以密碼學的標準來評估比特幣的話,它的安全性是漏洞百出的——比如,對於雜湊函式,我們認為只要有比窮舉更好的方案,這個雜湊函式就是不安全的。但是,對於比特幣,且不說最著名的“自私挖礦”的問題,單從比特幣鏈上存在的空塊來看,很顯然礦工有比“誠實”地挖出區塊更有利的方法。

有人可能會說——這並不影響安全性,但其實這影響到了比特幣的活性,就如同“粉塵攻擊”,也是影響活性的攻擊。

而這也是目前對於區塊鏈共識演算法安全性的證明的侷限所在——想要證明演算法的絕對安全,我們就只能在假設的實際性上作出犧牲——例如,我們需要假設50%以上的算力是誠實的,或者2/3以上的節點是誠實的,而無法顧及這種假設背後的現實性,比如,是否有足夠的激勵讓這些節點誠實地去執行演算法中的每一個步驟,或者,在應用的場景下,我們是否能做出這樣的假設。

這種做法的弊端在之前的POW演算法容易被51%攻擊的分析中已經很明顯了——我們當然可以對於所有的資源都做出“大多數人都誠實的假設”,但是,如果這個假設在現實中並不成立,那麼採用這個假設證明了安全性也毫無意義。

另一方面,共識演算法的安全性是與它的應用場景相分離的。對於一個共識演算法是否安全,我們要麼透過BFT證明“它可以達到拜占庭容錯”,能夠對於所有資料達成一致和活性,要麼透過Bitcoin Backbone Protocol的模型證明我們可以得到一個增長的,一致的賬本。

也就是說,前者,我們將區塊鏈視為一個拜占庭容錯的分散式資料庫,後者,我們將區塊鏈視為某種類似比特幣的分散式賬本。然而,在此之上區塊鏈的應用卻已經遠超分散式資料庫和賬本的範疇了。例如,對於分散式賬本,一致性的重要性高於活性(所以可能很多人會認為空塊不算是對於比特幣安全性的破壞)。

因此,比特幣的POW演算法並不保證交易的活性,而僅僅保證能夠被上鍊的交易的活性,同時用交易費的模型鼓勵礦工儘可能地將交易新增上鍊,即保證“交易費給得足夠多”的交易的活性。

然而,當將這種共識演算法用於其他對於交易活性要求高的應用時就可能會出現嚴重的問題——例如FOMO3D實際上就是受到了針對於以太坊交易活性的攻擊,而儘管比特幣以及以太坊的模型不保證交易活性這件事對於業內人士都不是秘密,但是不可否認的是,既然以太坊或者其他的區塊鏈具有這樣的應用,在共識演算法安全性分析的時候把這種情況排除在外,本身也說明了這個模型並不完備。

因此,我們需要一個更實際,從應用出發,面向目標和場景的對於區塊鏈安全性的評價標準,並且:

1、相比於每一個機制的可證明的安全性,我們更關注這個系統是不是能夠達成它應有的功能。

2、相比於在一些條件限定下的絕對安全性,我們更關注在現實語境下的相對安全性。這點和我們之前的分析是一致的,也就是說,我們更關心——想要破壞這個系統,使得它沒法做它該做的事情的代價有多大。

3、然後,對於“應有的功能”相對應的特性,我們應該根據實際情況來分析他們的重要性——例如,對於貨幣,一致性、活性、抗審查、匿名的需求取決於什麼樣的場景。如果黑市是需求,那麼匿名可能需要擺在活性之上,但如果把交易和支付作為場景的話,我們應該參照一個支付平臺的要求去考慮他們之間的權重。

以上的定義並不嚴謹,但是畢竟這只是一個提議,我們不是在寫論文。

從這個角度來講,其實對於數字貨幣的共識演算法而言,我們並不用去考慮51%攻擊,長鏈攻擊,無利益攻擊這些方式和相應的條件,也不用去關心在怎樣的假設下透過什麼樣的演算法可以防止他們的出現。

我們該關心的的問題是——

1、我們需要付出多大的代價才能破壞一致性,進行一次雙重支付攻擊:於是,我們可以判斷這個系統可以承載多少價值,而一筆交易的數額超過多少的時候,我們就需要考慮雙重支付這種可能,並且相應地提高確認時間,或者,仔細審視各個節點的動態。

2、我們需要付出多大的代價才能破壞活性,每延遲一次出塊或者一分鐘達成共識:於是,我們可以知道需要即時確認的交易中,我們有可能會遭到多大的損失。然後,對於FOMO3D這樣的“遊戲”,我們會知道當一個幣賣到多少錢的時候,就已經可能不安全了。

3、我們還需要知道需要付出多大的代價才能破壞抗審查:於是,我們可以知道,比特幣其實並不是一個完全自由的貨幣,當代價足夠高的時候,我們是可以消滅掉某個地址的活性的。

4、然後,對於匿名貨幣,我們需要知道多大的代價,可以破壞匿名性,於是可以追蹤到一筆錢的來歷,或者是標記一個地址的身份。

以上,是對於“貨幣”這個功能而言的——這是我們的起點。

而之後,最理想的狀態是,我們應該對於區塊鏈所能實現的所有功能,判斷它們所需的性質,然後,量化它們的安全性。

那麼,在這裡,去中心化的位置在哪裡呢?

對於去中心化的要求,已經融入安全性的標準之中了——畢竟,去中心化是手段而不是目的:一個過於去中心化的系統,將面臨著和中心化系統同樣的風險,即作惡的成本不可控。

而同時,一個過於中心化的系統中,共識演算法也將失去意義。

因此,在安全性標準中,我們必須也將它的去中心化程度納入考量。

1、我們需要衡量實際參與共識節點的大節點的數量。

2、我們需要知道這些節點的資訊,來評估他們在鏈外獲益或者合謀的可能性。

3、同時,我們還需要確定,這些節點確實有能力維護這個系統的安全。

正如之前所說,一個理想的,安全的區塊鏈系統,是由足夠多數量的,身份已知的大節點來維護的。

於是,我們需要知道:

1、他們是否有足夠的動力來維護這個系統——他們是否有足夠的收益。

2、這個系統的結構是否穩定——他們是否也能夠決定系統的發展方向。換言之,我們怎麼保證未來整個系統還是有足夠的大節點來維護,而不是共識節點會由於系統未來的發展方向與期待不符而逐漸退出或者分叉,重新導致中心化。因此,我們需要評估的決策機制是否能夠代表共識節點的權益。

3、同時,我們還需要保證,所有在系統中有利益的群體,都應該能夠參與共識。

於是,我們需要激勵機制,鏈上治理等等其他的機制——

一切,歸根結底都是安全問題。

寫在最後

這是我關於POW和POS討論的最後一篇,這三篇的內容和長度都遠遠超出我的預期,可能是進入這個領域以來看到聽到的東西太多,積攢了很多東西不吐不快的緣故。

之前,我寫過專業的在區塊鏈領域的頂會上發表的學術論文,也一直致力於在知乎上寫一些客觀的和中立的科普性文章,我一直致力於避免的,就是在這個本來就混亂的行業中引入新的混亂——因此,我一直只寫一些已經成為這個領域基礎的論文和技術,但不願意寫太多新的、未經證實或者檢驗的結論,儘管有些結論我認為是正確的。甚至於,即便我的文章已經被接受甚至發表,我也不太願意在我的專欄裡介紹它們。

然而這一個系列和之前我寫過的所有文章都不同,這一篇裡更多的是個人的觀點和判斷,其中,我可能提出了不少“政治不正確”的,“大家不喜聞樂見”的,“在業內尚有爭議”的,或者“所有人都知道但是沒有人願意說”的觀點,因此,自從文章發表以來也或多或少引起了一些爭論——而這些都是我原來一直想要避免的。

之所以做出這樣的改變,其實關鍵的原因還是我在文中說的那點——資本和市場追逐新噱頭的腳步是不會停下等技術發展的,於是,當這個領域所有的人似乎都已經開始盲目樂觀地考慮長期發展的時候,我們需要反思一下——我們做的這些東西,真的“夠安全”嗎?

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;