一文理解“側鏈”
編者按:本文來自以太坊愛好者(ID:ethfans)編者按:本文來自
以太坊愛好者(ID:ethfans)
以太坊愛好者(ID:ethfans)
引言
以太坊愛好者(ID:ethfans)
以太坊愛好者(ID:ethfans)
引言
,作者:barryWhiteHat,翻譯:阿劍,Odaily經授權轉載。
引言
聲明:此處表達的看法僅僅是我的個人意見,並不代表我的雇主或者其他人也是一樣的看法。
感謝Albert Ni 的閱讀和評論。
引言
Layer-2 對以太坊的重要性與日俱增,而且已成共識。
但是,“Layer-2” 是個不精確的標籤。有些人說起“Layer-2” 時,僅僅指的是“不在以太坊Layer-1(上的東西)”。但實際上,方案到底怎麼跟以太坊Layer-1 交互,是非常重要的。同屬“Layer-2” 名目下的不同方案,特性可以有天壤之別。可以爭議“Layer-2” 應該專指具備特定屬性的某些東西(例如,我們大概都同意,部署在AWS 上的東西不是Layer-2,但也有一些項目,安全性保證差不多,但也被認為是Layer-2)。不過,這不是我這裡要講的主題。
我在這裡要討論的是側鏈(sidechains)的屬性。
側鏈在以太坊生態中也扮演著重要的角色。在研究人員還未開發出更好的方案之前,它們是可擴展性和可用性的臨時解決方案。像xDai 這樣的產品,也點出了大家對更好的用戶體驗的需求,並使之擴散了開來。
但是,側鏈並不具備廣大的以太坊社區所期待的安全性。這不是說永遠不該使用側鏈這種方案。如果人們完全知情,但是願意用,那是他們自己的選擇,也可能是值得的。但如果人們是不知情的,那就危險了。本文是希望提供一些信息。如果每個人都已經完全知曉了這些特性,那我這再寫一篇也無傷大雅。但如果這文章能幫助大家意識到自己的誤解,那就算做了好事了。
那麼側鏈到底缺少了哪些安全特性?幾乎所有的側鏈,都不能夠提供:
審查抗性
終局性
資金所有權保證
如果這些特性你全都要,那你可能得另找方案來代替側鏈了。當然,也有可能在維持側鏈核心架構的前提下改進具體方案在這些維度上的表現。
我覺得開放性的討論對大家都有好處。
審查抗性
顯然,側鏈的審查抗性比(設計優良的)區塊鏈要弱。不然,那也根本不需要區塊鏈了。但這裡我們挖得再深一些。
如果某條側鏈有N 個驗證者,而只要有M 個驗證者一致同意就可以審查任意一筆交易,那麼只需要(NM) 個驗證者聯合起來,就可以審查一個區塊。這就導致了一個有趣的兩難:要讓審查交易變得更難,就會讓審查區塊變得更簡單。因為審查交易和審查區塊都是糟糕的事情,所以側鏈就在根本上不能獲得強健的審查抗性(譯者註:這裡的邏輯如下,如果只要M 個驗證者都不同意出某個塊,系統就不能出塊,那麼自然,只需要M 個驗證者就可以通過拒絕出塊來審查某一筆交易;但是,這也意味著,只要NM 個驗證者同意,他們可以任意出塊,總是出包含了別的內容的區塊而不出某個區塊,甚至集體玩消失)。
這種擔憂在使用PoS 時也依然存在,甚至按權益來計算出塊權重會讓它變得更糟糕,因為達成閾值的獨立實體數量可能會更低(即使在最理想的情況下,權益是充分均勻分佈的,那也只不過跟不使用PoS 的情形一樣,不會變得更好)。
數據可得性保證
假設只要(NM) 個驗證者就可以創建一個區塊。再假設所有其他驗證者需要擁有整個狀態的數據才能夠驗證新狀態。那麼,只要(NM) 個驗證者是惡意的,他們可以:
state1 => state2 => state3
創建一個新區塊
拒絕與誠實驗證者共享區塊數據
本質上就是將N-(NM) = M 名誠實驗證者移出了共識過程,因此完全掌控了整個系統
state1 => state2 => state1
這種情況發生的可能性有多大呢?顯然需要更具體的細節才能下結論,但我們可以這樣開始思考:一個理性的驗證者,要跟其他人共享數據的激勵在哪裡呢?在傳統的權威證明機制中,不這樣做可能對聲譽有損。但是,其實聲譽機制也很難起作用,因為實際上並沒有辦法證明數據被扣起來了,除非其他人把所有數據都放到了鏈上。覺得這個解決方案聽起來像是optimistic rollup?沒錯,就是如此。這也意味著,帶有更好安全性的側鏈,本質上就“退化” 成了optimistic rollup。
在大多數側鏈方案中,驗證者可以因為自己的工作而獲得某種形式的支付。對於誠實的驗證者,獎勵會在N 個驗證者之間共享。對於不誠實的驗證者,同樣多的獎勵只會在N-(NM)=M 個驗證者之間共享,所以驗證者完全有激勵不跟其他人分享更新後的狀態(譯者註:此處的計算疑有誤)。
在這裡,有一個根本性的難題:很難辨別數據可得性(data availibility)攻擊。對於誠實驗證者來說,很難分辨出,到底是有人發動了攻擊,還是自己遇到的同步問題。
終局性
假設狀態轉換的流程如下:
而每一次的轉換都需要一些交易在已有的狀態上生效從而改變狀態。而終局性就是說,交易一旦生效,就不能撤銷。
側鏈的檢查點,經過側鏈驗證者的共識之後發送到以太坊區塊鏈上,並根據以太坊的共識機制被固化下來。有些人可能因此就認為,側鏈的終局性等同於以太坊的終局性;要回滾側鏈的區塊,你也需要回滾以太坊的區塊。但這完全搞錯了。
因為終局性是說不能回滾交易,不是說不能用新狀態來替代舊狀態。只要(NM) 個驗證者同意,他們可以執行如下的狀態轉換:
(使用state1 來替代state3,就等於是回滾了大家默認已經終局的state2,但這完全不需要以太坊主鏈也回滾。)
側鏈資金所有權保證
假設現在的state1={Alice:1000,Bob:0}。即Alice 有1000 塊,而Bob 啥也沒有。那如果Bob 是惡意的,而且控制著(或者可以高效地腐化) POA 驗證者中的絕大多數,他可以怎麼做?
他可以執行一個狀態轉換,state1 => state2,而state2={Alice:0,Bob:1000}。也就是偷走Alice 所有的錢並交給Bob。
這已經是眾所周知的事(至少我是這麼相信的),但我認為還是有必要提醒大家。你對一條側鏈的信心,只能是相信驗證者中的大多數不會幹這樣的事情。對側鏈的大部分安全分析都應該關注這一點。
結語
可能還是有某些人你可以在某種程度上信任他們。就像我們中的許多人都(出於許多理由而信任)中心化的服務提供商。有時候這種犧牲是值得的。重要的是,你得清楚這是一種權衡。
有一種說法是:”我們可以使用治理程序來解決上面提到的所有問題“。這種方法是有缺陷的,因為整個系統會退化為一個治理流程。這種說法格外使我擔心的一個理由是,它意味著側鏈的其他屬性是劇院(什麼時候,我們因為什麼理由需要這樣的屬性呢?)。舉個例子,如果治理流程才是防範上述問題的最終手段,那也就意味著,什麼PoS、PoA,統統都不重要。系統的治理流程才是真正的PoA。而且,很明顯,對系統的治理流程,同樣可以發動一模一樣的攻擊。
結語
除了側鏈的一些附加屬性,比如更快的區塊時間(因此有更好的用戶體驗),確實有一些場合,是側鏈的特點可以大放異彩的。比如:
結語
你就是想要NM 個驗證者就能執行任意狀態轉換。希望有一個高級控制權限的企業應用就是一個例子。
M=0,且N 個驗證者可以執行任意狀態轉換的情況。例如,一個四方參與的遊戲。不過問題是,1個驗證者就可以關停這條鏈。


