來源:巴比特 作者:灑脫喜
以太坊協議研究者Vlad Zamfir聯合其他作者于近期發布的《“最小CBC Casper協議”共識協議家族》論文,引來了Blockstack項目團隊的關注,其首席執行官Muneeb Ali寫下一篇《關于CBC Casper的同行評議》文章,批判以太坊CBC Casper協議從設計上就是錯誤的,而這篇文章也被MIT規劃中的密碼貨币學術期刊收錄為第一篇同行評議文章,可見其内容還是得到學術屆承認的。
在這篇評議文章發布之後,CBC Casper的作者Vlad Zamfir連續發布了數條回應推文,顯然他也非常在意這篇評議文章。
而他給出的回應是:
“他們真正想要表達的是,我們沒有在規範的現階段展現出活性,這是我們一直要去實現的。 Muneeb和他的同事試圖批判這篇論文,但是沒有發現任何錯誤的地方,因此他們把注意力放到了論文中明顯缺失的部分上。 論文的目的,歸根結底,主要是分享安全性定義 :)”那麼,這篇評議文章到底說了些啥,以至于怼怒了Vlad Zamfir了呢?
請看以下譯文:
長話短說:活性(Liveness)和安全性(safety)是共識協議不可分割的兩大屬性。活性對于協議而言是一種保證,即使在協議遭遇失敗時,其也會做一些有用的事情。 CBC Casper是一個共識協議家族,而它們在分析中遺漏了活性。丢棄掉兩者之一,并不會使得協議的完成度達到50%,這隻會讓你幾乎什麼都得不到。
密碼貨币生态正在快速發展,其緻力于為基礎計算機科學問題提供創新的技術解決方案。這些問題涉及了分布式系統、應用密碼學和博弈論等。這些科學領域中的每一個,都有豐富的文獻、同行評議過程,以及可用于加密協議的既定概念和術語。但到目前為止,由于各種原因,我們還沒有看到密碼貨币行業出現健康的同行評議生态系統。
該行業的情況是,工程師為他們的項目發布獨立(非同行評議)的白皮書,并且沒有固定的渠道來獲得關于技術工作的反饋。我們堅信,同行評議過程對生态系統是積極的,它能夠提高技術工作的質量和準确性。我們的區塊鍊工作已經得到了分布式系統社區的同行評議,并最終在USENIX'16上發表了一篇文章。雖然中本聰在發布比特币白皮書時可能沒有收到同行評議,但對于過去幾年出現的無數白皮書來說,沒有同行評議的做法顯然是錯誤的。一個誠實、有建設性的對話,在理論和實踐上健全的研究建議,可以提高工作的質量和準确性,并幫助這個行業達到成熟。
明智的是,我們都應該共同努力,尋找解決根本問題的辦法,這些問題阻礙我們廣泛采用去中心化系統。
以太坊在建立開發者社區方面做得很好。以下是我們以公開審查的形式,對CBC Casper提出的建設性反饋。我們贊揚Vitalik和Vlad歡迎公衆評議,他們和我們讨論協議細節,并就此評議的早期草稿提供反饋。我們希望他們也能夠從我們的評議内容中得到有用的東西。
評議概述:
以太坊研究組織(Ethereum Research)最近發表了一篇題為《“最小CBC Casper協議”共識協議家族》的論文。以太坊網絡在2017年遭遇了嚴重的可擴展性問題,從那以後,可擴展性研究成為了以太坊的一個重要課題。這是由以太坊本身的基本設計問題造成的(正如我在2016年預測的那樣)。
仔細研究CBC Casper的論文後,我們可以發現一個主要的缺點,這不免讓人懷疑該論文是否對共識協議和可擴展性努力作出了實質性貢獻。
活性和安全性是密不可分的。
具體而言,這篇論文試圖在不考慮活性的情況下,試圖提供拜占庭安全性。然而,為了達成共識,活性和安全性是拜占庭容錯協議不可分割的特性。正因為如此,我們認為,這篇論文所提出的方法基本是錯誤的共識協議設計。
正确性是一種保證,一旦一個決定達成,它将繼續保持這種狀态。而活性則保證協議即使在遭遇失敗時,它也能夠處理一些有用的交易。而沒有活性保證,用戶實際上無法使用協議做有用的事情,因為他們不知道何時可以考慮交易已經成功處理。例如,在比特币當中,用戶需要知道何時他們能夠認為一筆交易是被确認了。
而這篇論文試圖在不考慮活性的情況下證明正确性,這是一個問題,因為沒有活性來證明正确性,實際上并不實用,并且當你考慮活性的情況下,大多數困難的問題才會顯現出來。而丢棄掉兩者之一,并不會使得協議的完成度達到50%,這隻會讓你幾乎什麼都得不到。
此外,未能解決活性問題,也會導緻實現拜占庭容錯性的其他問題:
a) CBC Casper 隻處理了拜占庭故障的一個子集,任何區塊鍊網絡都需要是拜占庭容錯的,因為它是由相互不信任的節點組成的。節點可能由于任意原因而失敗,包括來自節點方的惡意。而這篇論文僅讨論了其中一種失效類型:當節點“模棱兩可”(equivocate)時發生的失敗:即發送自相沖突的消息。然而,這樣的故障隻是錯誤行為的一個子集,還有其他故障會更難處理,這是這篇論文中沒法解決的。例如存在惡意節點,其試圖故意阻止共識(但并不是模棱兩可的)。
b) CBC Casper沒有具體說明其決策機制。論文中的示例協議依賴于一個“估計函數”,該函數在協議中的後果并不明确,并且在證明中沒有被考慮。雖然我們從他們的例子中懷疑,該“估計函數”是用于為決策機制提供信息,但該論文并未讨論其後果,也沒有考慮它們的正确性證明。因而,安全性證明不具備信息性,它在推理有用協議方面沒有取得重大進展。大多數重要元素沒有得到證實。
c)CBC Casper沒有考慮其他與區塊鍊共識相關的、難以解決的問題。示例包括協調區塊鍊分叉、選擇哪些分叉是有效的、如何檢測和處理重組、從意外的分叉中恢複等等。這種遺漏是有問題的,因為确切地說,這些正是CBC Casper協議需要去解決的問題。對于如何解決這些問題,安全性證明不會提供幫助,因為這些本質上是活性屬性,這些屬性被遺漏在證明之外了。
論文中的證明,對于空屬性集的情況下是有用的,一個空屬性集可能是“安全”的,但對于實用協議而言這是無用的。
論文将拜占庭容錯定義為“沒有活性情況下的BFT安全,且隻針對模棱兩可的故障”,這是非常規的,并且我們認為,這樣的共識協議設計從根本上就是錯誤的。
以下是更詳細的技術評議工作:
完整的技術審查
這篇論文旨在為整個最小CBC Casper共識協議提供拜占庭容錯共識安全性的證明。值得注意的是,論文試圖在不考慮活性保證的情況下提供共識安全性證明。這是一個不尋常的目标,并且使得很難在所描述的協議家族中推斷協議的正确性和有效性。這是因為,正如我們将要讨論的,活性是BFT協議的一個基本屬性。一個具有小于某個故障節點阈值t的安全拜占庭容錯協議,同時提供了正确性和活性,這意味着,論證其中的一項,而不管另一項,這是一種錯誤的方法。重要的是,協議提供活性的方式,會影響實現安全性的方法。在不考慮活性的情況下定義安全性,會使安全性在理論上更容易達成,但在實踐中卻不太适用。活性是一個必要的條件。
作為第一步,我們将簡要描述什麼是活性,以及它為什麼是重要的。粗略地說,活性是指網絡在某些部分沒有出現故障時,那麼就可以保證網絡能夠繼續發展。在協議上取得進展很重要,因為為了使網絡完成任何事情,它需要取得進展。例如,在比特币網絡中,用戶的交易被接受還是拒絕,這是非常重要的。如果沒有進度保證,用戶實際上不能對網絡做任何有用的事情,因為他們不知道他們的交易是否會被成功處理。保證這種網絡的進展是困難的,而BFT網絡的設計、驗證和正确性證明中的大部分複雜性,恰恰在于保證這種特性。由于Casper論文沒有涉及這一特性,因此它沒有在實用共識協議方面取得重大進展。
CBC Casper 論文實現了哪些,以及為什麼沒有活性,你就無法保證正确性
CBC Casper論文提供了協議家族的定義,其稱為“最小CBC Casper”家族。CBC的意思是指“按結構糾正”(correct-by-construction)。一旦定義了協議家族,作者們就使用這些定義來證明:
這類系統中的節點,将共享共同的未來協議狀态(面對容錯級t);
後續決策将是一緻的(因為它們共享未來的協議狀态);
這會導緻容錯。
論文最後斷言,他們已經“部分地指定了一個共識協議家族,并且表明該家族的每個成員都具有異步的、拜占庭容錯共識安全性” (來自第五節)。
盡管論文作者正确地證明了其描述的協議家族的特性1和特性2,但他們沒有在實踐或理論上證明CBC Casper協議家族是拜占庭容錯的。如上所述,共識安全性與活性是密不可分的。要了解為什麼會出現這種情況,讓我們看一個實現全局鎖(mutex)的共識協議簡單示例。
示例:判定鎖 (Deciding Locks)
在此示例中,參與者隻是嘗試解析鎖的持有者,而第一個聲明鎖的當事人就是所有者。假設參與協議的兩個節點在完全相同的時間接收兩個不同的消息,一個看到Alice在請求鎖,另一個看到Bob在請求鎖。請注意,即使沒有任何模棱兩可,這兩個節點也将具有兩個不同的協議曆史記錄。
現在,我們考慮在論文的安全性證明(第3節)中提到的兩項已證明屬性。首先,定理1表明,任何兩個沒有模棱兩可的協議狀态具有共同的未來。現在,定理3表明,對于在一個協議狀态中決定的任何屬性,其否定不能在沒有任何模棱兩可的情況下,在另一個協議狀态中決定。這些定理對于鎖的情況怎可能會成立?根據定理1,兩個節點都沒有模棱兩可,因此它們必須共享未來。每個節點的協議狀态都具有由Alice或Bob持有給定鎖的屬性,并且這些屬性不能都是真的。因此,對于被定義為屬性“Alice持有鎖”的p,我們有狀态s_1,其中p被确定,而狀态s_2,其中沒有p是被确定的(即,否定)。
我們怎樣才能将其與論文中的正确性證明相協調?好吧,根據論文中給出的“判定”定義,這兩個屬性實際上都不是确定的。但是,我們如何才能知道某個給定屬性是否已判定呢?這就是關于活性的一個問題,而不是論文中所定義的正确性。但是,任何實用協議的設計都需要回答這樣一個問題:“屬性何時是判定的?”,并且不能依賴于遞歸或崩潰的無限協議狀态,因此,它從根本上影響關于正确性的決策,以及随後的正确性證明。在區塊鍊中,如何回答這個問題,将告知有關沖突解決、分叉重組、鍊選擇、挖礦算力等問題的決策。由于這個原因,同時對待活性和正确性是絕對必要的。
共識協議能夠解決諸如“哪一方持有這個鎖”的基本應用場景。而不能這樣做的協議,實際上是沒有用的。鎖示例與區塊鍊上的 token所有權類似(這些token是屬于Alice還是Bob的?)。
活性具有比安全性更嚴的故障阈值
盡管CBC Casper論文中關于所有估計函數和任何故障阈值的安全性證明是對的,任何提供活性的驗證行為,都必然會在故障阈值t上設置比安全證明所建議的更嚴的實際界限。我們的意思是,雖然驗證者可以對所有估計量和任何t的共識值屬性做出一緻的決策,但它們隻對更受約束的t範圍内的有用屬性這樣做。論文并未對此進行讨論,但演示如下。
在考慮活性時,将應用兩個附加約束,這些約束告訴我們更多關于CBC Casper協議實際可做什麼:
-存在T_s,使得對于0
-存在T_l,使得驗證者不能對0
雖然論文沒有談到這些阈值,但在推理CBC Casper協議在實踐中可做什麼時,它們仍然是很重要的。特别是,在BFT協議的環境中,T_s和T_l嚴格小于sum(W(v)) 。要了解原因,請考慮CBC Casper中經典BFT二元決策問題的表述:
共識值是{0,1}
對于所有v,W(v) = 1;
協議狀态對每個驗證者從彼此驗證者接收的驗證消息序列進行編碼(假設現在我們不能僞造,重放或任意延遲消息);
估計函數查看驗證者的協議狀态,并決定一個共識值是否是由V中的BFT驗證者法定人數一緻同意的(即對于共識值,至少有2f 1的投票同意相同的屬性);
需要活性論證的有用共識值屬性,是“所有正确驗證者決定c”,其中c是一個共識值;
根據安全性證明,我們可以預期,如果我們執行這個協議,那麼在沒有足夠多故障的情況下,要麼“所有正确的驗證者決定0”為真,要麼“所有正确的驗證者決定1”為真,并且無論是哪個,都會在所有正确驗證者在{0,1}上做出的共識決策集中。
然而,安全性證明所無法表明的是,給定這個公式,正确的驗證者将隻有在滿足t的以下附加界限時,才能始終如一地确定此屬性:
t
這些阈值遠低于sum(W(v)),并直接遵循BFT協議上的已知界限。首先,如果超過1/3的副本出現了故障,BFT協議就不能取得進展。在CBC Casper術語中,這意味着,在超過1/3選票出現故障時,驗證者不會一緻地确定有用的屬性。第二,如果一半以上的副本出現了故障,BFT協議不能保證它所做的決策是持久的。在CBC Casper術語中,這意味着從當事人的角度來看,任何先前觀察到的對有用屬性的共識決定,都不能保證在故障率高于1/2選票時保持不變。
這意味着,盡管安全性證明是正确的,但不考慮估計函數以及故障阈值,這就不具有效性。協議故障阈值的界限,是由協議的活性屬性決定的,而不是安全性證明。如果沒有活性證明,讀者就不能從論文的定理中了解CBC Casper協議的實際行為。這使得安全結果變得微不足道。
結論
這篇論文聲稱證明了整個最小CBC Casper協議家族具有拜占庭容錯安全性。然而,論文提供的定義和證明,既沒有在理論上實現健全,也沒有實際有用地處理拜占庭容錯。我們認為,在沒有活性的情況下就考慮正确性,是根本錯誤的做法。重要的是,目前尚不清楚Casper協議家族的定義,是否為區塊鍊提供了任何有意義的安全保證,或者這種方法是否适用于擴容區塊鍊。
鑒于論文所述,我們認為更準确地說法應該是,CBC Casper不具有拜占庭容錯性,并且該論文的目的是為拜占庭安全故障子集提供理論證明。那麼首先讨論這種有限理論證明(不同于拜占庭容錯)是否有用将是有益的。我們認為,這種沒有考慮活性而僅考慮安全性,以及僅讨論有限故障的一般方法是沒有用的。
我們要感謝 Vlad和Vitalik孜孜不倦地回答了我們的問題,并澄清了某些概念,這些工作有助于這次評議。他們參與這次評議,表明他們願意接受批評性反饋,我們對此表示贊賞。如果同行評議過程成為我們行業的規範,那将是一個很好的結果。我們當然願意接受公衆對我們的工作進行評議,并且我們可能偶爾還會對其他協議進行評議。
大家可以共同努力,以使去中心化計算願景成為現實。
— Muneeb Ali, Jude Nelson和Aaron Blankstein
你怎麼看?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!