以太幣 DAO 事件打破區塊鏈不可逆神話,13 億人都驚呆了(二)

作者 | 發布日期 2017 年 11 月 02 日 13:35 | 分類 Fintech , 數位貨幣 , 網路 follow us in feedly

講到 CASPER 不得不提到 PoS,我們之前花了非常多篇幅介紹 PoW 的原理以及好處,基本上我們看到現在比特幣牢不可破的局面,就應該知道規模到一定程度的 PoW 資料區塊鏈天下無敵,想破解它不如花時間找外星人或神明降駕幫你。那麼為什麼還是有人就是想搞 PoS 呢?背後有許多理由,我們來看看以下幾點。



  1. 不是每個區塊鏈都可以長到像比特幣那麼大,如果政府自營或企業自營的區塊鏈,節點規模一定很有限,如果要和駭客的僵屍大軍比火力一定輸。所以除了資安要做好,我們也希望有一個花費比較小的代價,就可以得到相同安全性的方法來串住區塊鏈。
  2. 比特幣的設計就是無法快速達成交易,如果每交易都要 1 小時的確認時間,這樣子的數位交易或儲存系統一定無法全面普及。
  3. PoW 的共識決議通訊協定有點脆弱,專家想追求更高的安全性。
  4. PoW 非常耗電,為了比特幣我們已經殺死了許多北極熊、麋鹿、企鵝還有哈士奇(誤),因此我們仍然想追求一個省電的方法達到相同的安全性。

以太幣在交易速度上是有名地快,但對某些交易來講,目前仍然要等待非常多個 confirms,有些商家會要求高達十多個,就算每個只花 1 分鐘,都會花掉近 20 分鐘的等待時間。以太幣團隊有野心希望有效取代法定貨幣,因此考量全局後乃決定必需走上 PoS 的路。

Proof of Stake 是什麼?

Proof of Stack 大多基於源自拜占庭容錯法推演出來,在 PoW 中任何一個找到區塊解的人就可以拿到新生貨幣,但是在 PoS 中,只有握有主控權的人才可以獲得新生貨幣。為達成分散式原則,主控權會輪流交到有投票權的節點手上,運作方式就有點像投票表決,有主控權的人驗證並發布新區塊,但是中間會經過大家壓注表決(是押上實際的數位貨幣當成投票),如果亂搞的人基本上得不到多數「投票節點」壓注支持,就會輸掉。

拜占庭容錯法簡介

拜占庭容錯法又稱為拜占庭將軍問題,是由 Leslie Lamport 於 1982 年提出的分散式節點同步容錯模型。他用了一個架空的歷史平台來解釋這個模型,也就是羅馬帝國的首都拜占庭。由於羅馬帝國幅員廣大,因此所有鎮外將軍都離首都非常遠,中間的訊息傳遞無法由中央親自證實,只能靠將軍的通信兵傳送消息。那若外面的將軍叛變了,就會傳來假的軍情,就有可能讓軍隊失去一致性。Leslie Lamport 論文是這樣描述拜占庭將軍問題:

一組拜占庭將軍各率領一支軍隊共同圍困一座城市。為了簡化問題,將各支軍隊的行動策略限定為進攻或撤退兩種。因為部分軍隊進攻、部分軍隊撤退可能會造成災難性後果,因此各位將軍必須透過投票來達成一致策略,即所有軍隊一起進攻或所有軍隊一起撤退。因為各將軍分處城市不同方向,他們只能通過信使互相聯繫。投票過程中每位將軍都將自己投票給進攻或撤退的信息,透過信使分別通知其他將軍,這樣一來,每位將軍根據自己的票和其他將軍送來的信息,就可以知道投票結果而決定行動策略。

系統的問題在於,將軍中可能出現叛徒,不僅可能投給較糟糕的策略,還可能選擇性地發送投票信息。假設有 9 位將軍投票,其中 1 名叛徒。8 名忠誠的將軍有 4 人投進攻,4 人投撤退。這時候叛徒可能故意送信給 4 名投進攻的將領表示自己投給進攻,而送信給 4 名投撤退的將領表示自己投撤退。這樣一來在 4 名進攻的將領看來,投票結果是 5 人投進攻,進而發起進攻;而 4 名投撤退的將軍看來就是 5 人投撤退。這樣各軍隊的一致協同就遭到破壞。

要有多少將軍是良善的,才能確定一個消息的真假?

經由數學證明,假設總將軍數是 N,叛變將軍數是 F,則當 N ≥ 3F + 1 時,我們才有辦法確認一個消息的真假,它的啟動分成四個階段:

請求(request):client 請求階段,皇帝給總司令下命令。

預準備(pre-prepare):主節點向所有 backup 節點發送預準備消息,其中包括當前 view 編號、client 請求及請求摘要、簽名是否一致等。總司令對各位將軍說:現在是我的時代(view),我是總司令,所有人都得聽我的。現在公布皇帝的命令(先說說總統是誰,命令摘要)。

準備(prepare):包括主節點在內的所有副本節點在收到準備訊息之後,對訊息的數位簽章是否正確,view 編號是否一致,以及訊息序號這三個條件進行驗證,如果驗證通過則把這個準備訊息寫入消息日誌。backup 節點核對簽名資訊,比如其他將軍聽到皇帝的名字,說對,皇帝是這個人沒錯,然後核對皇帝曾經任命誰當總司令,如果對,大家就聽他的。

確認(commit):每個副本接受確認訊息的條件是:1. 簽名正確;2. 消息的 view 編號與節點的目前 view 編號一致;3. 訊息的序號 N 夠新。一旦確認消息的接受條件滿足了,則該副本節點將確認消息寫入消息日誌。每個將軍都經過上述核對,確認無誤,就會接受命令執行。

回覆(reply):結果回饋。

實際做法

Ethereum 的開發社群基於拜占庭容錯模型設計出 CASPER 的 PoS 方法,每次會有一群節點成為投票者,中間會有一位總司令,而每輪成立時第一件事就是選出下輪總司令和監督的將軍。每次針對一個新區塊的內容,都經由總司令整理完後公告,當然這中間也包括該節點視角下的主鏈及支鏈(uncle chain),而各將軍實際上押注以太幣在他們認為正確的區塊。以太鏈的設計有一個特別之處,他們為了防止有些節點亂押注,正確的也押,不正確的也押(基本上他們也未必知道這個區塊可能是不正確的),所以若押在不正確的區塊而被大家投票否決時,這些押錯的節點會被罰款;若某個節點非常堅持發布有問題的區塊,這個節點甚至會被大家踼出表決者名單(將軍被革職)。產生新區塊時的所得就由總司令分派給投注者。

這點聽起來很不錯,不過大大違背了比特幣的開發宗旨:人人都可以經營,人人都有機會挖礦的大政治原則。因此一旦 PoS 上線,以太幣將成為只有手上有一堆以太幣的人才能挖礦的富者愈富網路。金錢的信用力絕對基於政治,因此在政治面來看,如此方法將造成不小危機。以太幣最近會有一個硬分叉,也就是俗稱的拜占庭分叉,為了讓衝擊減小,同時驗證 PoS 是否可撐過真實世界的考驗,只有百分之一區塊會用 PoS 驗證(希望這些區塊不會成為鏈上的弱點)。

而 PoS 技術的區塊鏈也未必真的比較安全,因為用戶本身如果不能確定區塊真實性,那麼就只能依靠向每個節點詢問並選擇最多的結果(當然 PoS 區塊鏈也可加入 PoW 的驗證 hash,但強度大多很差,否則就會回到拚計算力的老路了)。不像 PoW,如果一個 PoW 區塊鏈用戶覺得結果怪怪的,只要自己在電腦上驗算一下就百分之百知道他的結果有沒有被改過(前提是得多等幾個 confirms)。因此若是某一輪 PoS 投票節點不小心被駭客大舉進攻成功,甚至只要某個用戶受到 Man-in-Middle 攻擊,那麼區塊鏈也就完了。這個機率又牽涉到參與節點的總量(別忘了至少要有三分之二節點沒問題,才能保證 PoS 網路的同步性)。而 PoS 的好處是在共識決部分速度較好,不用等太多 confirms 也不怕同步速度太慢,要等一段時間才能產生新區塊。目前實做上在私有區塊鏈,PoS 已可達每秒處理千筆以上交易。

以太坊宣稱 PoS 的好處

  1. 快速收斂:可加快交易速度,同時等待的 confirms 數量不用這麼多。而且就算區塊鏈網路因通訊問題分裂成兩個,也可在短時間內收斂回來。
  2. 避免大山頭破壞去中心化:PoW 網路中,如果出現有人持有大量計算力,那麼該人就有足夠成功率修改區塊鏈。
  3. 省電能:不再需要大量運算力做 hash。

不過基於 FLP Impossibility 原理,PoS 同樣無法保證區塊鏈在每種攻擊或通訊問題下都有正確共識產生。而資料本身不具備自我驗證性則是致命之處。

另一個安全性問題:系統

比特幣的挖礦專家都知道,用 GPU 或 CPU 來挖根本就沒什麼利益了,因為特製的 ASIC 可用更少電能達到萬倍速度提升。聽起來是件有利個人的好事,但同樣會在人人可經營的理念上違反大原則。一旦出現這種事,就讓少數 ASIC 系統占去大半計算力,那麼駭客就只要專心找出這一、二家系統的弱點,比特幣就完了。如果比特幣的算力無論用 CPU、GPU、ASIC 都一樣快的時候,駭客要對付的系類型就多如牛毛了,成本必然大幅拉升。因此演算法是否 GPU 或 CPU 適用,就成了安全性的重要議題。目前新的數位貨幣都是使用記憶體速度相關的演算法。

後記:私有區塊鏈的發展

過去兩年我們可看到許多人開始討論私有區塊鏈的價值和應用,然而私有區塊鏈本身就無法具備公有區塊鏈的許多強大特性,好比資料透通性、節點數量、計算能力等等,私有區塊鏈的電腦數量必然相當有限,因此參與決策的節點計算力必需達到一定水準才能用 PoW 達成安全性,就連使用 PoS 也是一樣。所以私有區塊鏈一直沒什麼好應用出現,它全然違背區塊鏈發展歷史。同時,區塊鏈資料只有流水帳可以用對帳方式得到正確結果,如果只是資訊儲存,那產生共識時出了任何錯也沒人能確定該筆資訊的正確性,好比若有一個區塊產生節點宣稱:A 願意以 100 萬元賣車給 B;但是另一個節點卻同時宣告:A 願意以 100 萬元賣車給 C,如果簽名驗證都正確,這下子就沒有任何方法在系統裡得到真實情況了。

如果私有區塊鏈要得到良好安全性,就必需使用各種 firewall 等資安技術隔離,那麼和傳統資料庫又有什麼差異?因此目前各行業對私有區塊鏈的看法是連適用場景都找不到,也想不出有什麼適合的資料存在上面是有好處的。倒是公有區塊鏈出現百家爭嗚的情況,或許區塊鏈的宿命就是只能建構公眾型服務吧!

(首圖來源:shutterstock)

延伸閱讀: