區塊鏈權益證明(PoS)的去中心化難題:主觀性與遠程攻擊

相較於工作量證明(PoW)的客觀、直覺、易於驗證,權益證明因為仰賴過去的狀態做為共識基礎,存在「正確性」環環相扣的問題。

工作量證明 vs 權益證明

工作量證明做為比特幣發明之初就存在的共識機制,最大的優點就是簡單:礦工需要算一百兆次,驗證只需要驗算正確的那一次,易守難攻,但缺點也很明顯,挖礦的無意義運算很浪費資源。

權益證明捨棄低效率的挖礦猜數字遊戲,改用投票表決的方式產生共識,任何持幣超過一定數量的人都可以參與投票,票多者勝。

易驗證的安全性沈澱

相較於權益證明,驗證需要有「過去每個人的持幣量」的先備知識,工作量證明簡單粗暴,你不需要知道幣的分佈、全局狀態、過去的任何一筆交易,只要看區塊頭就知道合法,所以如果你有天不小心在路邊撿到兩條鏈,沒什麼好猶豫的,更長、累積工作量更多的鏈就是對。

基於物理法則,工作量證明區塊鏈上的交易,在被礦工打包後,不只安全,隨著未來有更多區塊接在後面,這個區塊被回溯的機率就越來越低,也就是交易「沈澱」到更深、更安全的地方。所以我們常看到交易所和商家會有「n 個區塊」的確認等待設計,就是要等款項變得更像是不會跑掉。

區塊鏈的最終性

權益證明區塊鏈不存在安全沈澱的效應,因為「區塊 X 的正確性」仰賴「區塊 X-1 的正確性」,又仰賴 X-2, X-3, …,所以如果你對整條區塊鏈的狀態(誰有多少幣)一無所知,那往前給你再多證據也未必能說服你,畢竟偽造區塊,也就是狀態轉移,的成本非常非常低。

然而,權益證明的支持者會告訴你,我們有最終性(finality)這個工作量證明沒有的超讚的東西。也就是說,如果你確信區塊 X-1 是對的,那當區塊 X 產生的瞬間,它對你而言就永遠是對的,根本不需要等什麼沈澱。

理由很簡單,因為工作量證明的潛在礦工是未知、是無限多的,很難知道現在世界上有多少能挖礦的設備,這甚至超越時間跨度,也就是未來的算力也可能回來挖現在的區塊,所以僅管越來越安全,卻永遠不可能確信 100% 不被反轉。如果有外星人掏出一台異次元電腦,瞬間做了超越全地球電腦運算力的工作量,那區塊鏈上的任何交易,都是有可能被逆轉的。

這時候,權益證明的有限礦工就顯得很重要了。對於「區塊 X 是否正確」問題,有投票權的母體僅是「所有在區塊 X-1 有持幣的人」,而當這群人當中的 2/3 已經投票(且保證不會跑票),那區塊 X 就永遠地敲定了。

主觀性

回到「你有天不小心在路邊撿到兩條鏈」的情境,這對專業節點/礦工來說當然不是問題,他們隨時都在同步新區塊,總是能根據共識規則選邊站。但業餘使用者難免會離線一段很長的時間再回來。有天當你連上網,卻發現有兩組人傳給你兩條完全不同的鏈,在權益證明的情境下,你是沒辦法馬上知道該選哪一邊的,甚至可以說,即便你補足了離線期間的每個區塊,這兩條鏈誰好誰壞仍然是憑感覺,看你相信誰,也就是「主觀」的。

要克服主觀性對業餘節點近用區塊鏈的威脅,唯一的辦法是每個區塊產出時都立刻達到最終性(不可分叉),但這等同於要求「每一個礦工」都「永遠活躍在線上」且「知道狀態和每一筆交易」並「隨時投票表態」,這樣的標準太嚴苛,很容易讓新區塊難產,甚至整個鏈停滯,實務上不可行。

遠程攻擊

共識演算法的設計中,最重要的指標就是「抗惡意行為」的程度。工作量證明的術語「51% 攻擊」指的是:這個區塊鏈能容忍一些壞人存在,只要他們掌握的算力不超過整個系統的一半就沒關係。

對於攻擊發起者,我們只能假設他不要太強;對於其他誠實中立(共識系統中不存在善良的概念)的參與者,我們則希望透過經濟機制的設計,引導他們做出促進共識收斂的行為。

在工作量證明系統分叉時,礦工選擇在較短鏈上挖礦是不划算的,因為挖礦獎勵可能會消失,平白浪費算力。而權益證明的礦工因為不用真的用設備耗很多電做運算,同時在兩個分叉上押寶理論上是可行的,但如果每個礦工都這樣做,分叉就永遠不會收斂。為了強迫礦工選擇,我們會懲罰在同個區塊高度的不同區塊都投票的人,減少挖礦獎勵,甚至沒收資金。

可以說,權益證明在處理分叉上更強而有力。工作量證明的礦工如果兩邊挖礦,頂多沒賺到錢;權益證明礦工兩邊挖的話非但不會賺,甚至會損失本金,嚇阻力顯然大上許多。但是當攻擊目標是遙遠的過去時,權益證明卻比工作量證明脆弱,甚至可以說是束手無策。

如前所述,工作量證明的區塊鏈擁有不斷沈澱的安全性,惡意攻擊最近的區塊或許可行,但要惡意攻擊一年前的區塊,必須要重做一年份的工作量,成本超級高,也很容易被發現。相較之下,權益證明區塊鏈的記帳不需要物理性的消耗設備和電力,攻擊一分鐘的區塊和一年前的區塊的成本相差無幾。

想像某人在一年前秘密地掌握了大多數的幣(投票權),並且在一年間表現正常,從不作惡,然後慢慢的賣幣退場。但就在完全脫手後,他忽然從一年前那個他佔有過半投票權的時間點,瞬間偽造了整年份的歷史,一個完全由他一手偽造的分叉鏈。對不知情的節點而言,這條鏈完全合法,對其他節點而言,就算想懲罰他(他確實有重複投票),他在主鏈上也已經沒有幣可以被罰了,這就是所謂的遠程攻擊(long range attack)。

看啊,是ICBM! Photo by Maciej Ruminkiewicz on Unsplash

緩解主觀性與遠程攻擊的方案

對工作量證明鏈而言,礦工和持幣者是脫鉤的,權益證明則否。權益證明的問題,基本上就是共識機制和區塊鏈狀態高度耦合的後遺症,衍生出的包括共識有效性、活性、輕節點實作等等的問題得靠額外的機制處理。

鏈外共識

一種簡單有效的方法是定期發布區塊鏈的里程碑(milestone),這種方法對工作量證明和權益證明都適用。比方說,聖人明君,偉大全能的以太坊創辦人 Vitalik,可以固定在他的 Twitter 上發布整數區塊的 block hash,告訴大家第九百萬塊就是 0x388f34dd9....d8e142960e3不會錯,甚至直接更新節點實作,把里程碑寫死在程式碼裡面,就可以有效引導新加入的節點不會走到壞人的鏈上,可以稱作 PoS + PoR (reputation) 的共識機制。

合併工作量證明

另一種方法是合併使用兩種共識機制,比方說原本 2018 要上線但忽然被整組砍掉的 Casper FFG,就計畫要在原有的 ETH 1.0 鏈上疊加一層由智慧合約實作的權益證明。也就是出塊仍然由原本的礦工負責,再讓持幣者投票做雙重驗證,礦工不再只跟隨最長鏈,而是要同時考慮這個鏈是否違反投票結果。既可以享有最終性,也能累積工作量避免遠程攻擊。

不過後來以太坊開發者的大頭們決定放棄上這版,改直接推出一步到位的 PoS + sharding 的真・ETH 2.0。在這個版本中預計也有合併工作量證明,但不是本來的雙軌制,而是用一種叫 VDF 的特殊演算法 + 專用硬體,同時提供工作量和重要的鏈上隨機數產生器(RNG)。

VDF (verifiable delay function) 和本來的挖礦有些許不同,它雖然也有計算困難驗證容易的特性,但並不能靠堆疊礦機來平行加速,而是要用由某幾家硬體廠商聯合開發的可信機器,保證計算的耗時總是在某個範圍內,從而提供近似工作量證明的客觀性和安全沈澱。

中心化

這題會考,旁邊畫五顆星星

回到權益證明高度耦合區塊鏈狀態的問題,這本質上是「自己證明自己對」的困境。實務上為了能運作,為了避免來自一年前礦工的超時空打擊,勢必得比工作量證明多出更多需要信任的環節:要相信節點實作給的信任根(像是 genesis block)、要相信別的節點提供的狀態、要相信驗證者和出塊礦工不會作惡或聯合審查。

實務上,為了確保可用性和活性,接受一些程度不一的中心化妥協方案在所難免,差別只在於你更願意相信社群大神的信譽還是硬體廠商不會偷做改良設備的職業操守。但話說回來,工作量證明也有自己的中心化議題,大礦池、ASIC 廠商壟斷等等,不會有系統能保證完全的去中心化,只能在已知可用的幾個方案裡面,盡量挑選比較好的,穩定中求進步了。

最近大手筆用了好多錢註冊更短的 ENS

ping.eth

歡迎順手抖內幫補血😢

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store