📜 [專欄新文章] 區塊鏈權益證明(PoS)的去中心化難題:主觀性與遠程攻擊
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
相較於工作量證明(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
歡迎順手抖內幫補血😢
區塊鏈權益證明(PoS)的去中心化難題:主觀性與遠程攻擊 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
硬筆字產生器 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Ethereum RNG (RANDAO & VDF)
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Ethereum RNG solution(RANDAO & VDF)
RNG是Random Number Generator,也就是亂數產生器
在現實世界中要產生真正的隨機數,其實不容易,各個語言的library所提供的隨機數,都是偽隨機數,是可以預測的,不過在大部分的應用場域,都是可以應付的。區塊鏈的世界,面對的是全世界的人,怎麼產生不可預測的隨機數,就很重要,不然就可以被有心人所操作。例如Ethereum Beacon chain(POS chain)中的validator/attester(產塊跟驗證的角色),若是可以被預測,那大概就沒有人會相信這條鏈了。而這也是Ethereum Serenity(Eth-2.0),所遇到的問題之一。目前隨機數的產生,就由RANDOA + VDF所產生,以下就分別介紹
RANDAO
RANDAO是利用經濟模式(獎勵跟處罰)的方式,促使在公共場域中能產生隨機變數
原理很簡單,想參加的人把拿錢來抵押,需要產生隨機數的人要付錢。所以參加者就可以從中分潤,當然不守規矩抵押的錢也就會被沒收,利用獎勵跟處罰的方式迫使大家都守規矩。詳細步驟如下:
首先,會有個收集seed的時間,例如6個block的時間。接著,想參與的人,投入某個數量的ETH到RANDAO這個smart contract(作質押),然後附上secret(某個只有你知道的值s,然後作sha3)。
等收集時間結束,就是驗證時間。此階段所有參與著需要把s傳入smart contract做驗證,smart contract會把s作sha3,去驗證是不是跟第一階段傳進來的一致。最終會把驗證過的s當作seed去產生隨機數。
最後,就是產生隨機數,然後把隨機數傳給之前有請求過的contract。然後歸還質押的ETH跟利潤分給參與者。
此外有幾個附加條件
第一階段若收集到數筆一樣的secret,只接受第一筆
第一階段會規定基本人數,若結束後未到達人數門檻,則此次的產生就失敗
若第二階段需提供s3.1 若未提供,則質押的ETH會被沒收3.2 若此階段有一個以上參與著未提供s,則此次產生失敗,並且把沒收的 ETH分給有提供s的參與者。且退還請求者所支付的ETH。
VDF
VDF 全名為Verifiable delay functions,從字面上有點難懂在幹嘛,從運作方面做解釋,就是輸入一個值,然後運算一段時間(delay),得出一個結果,最後這個結果是可以被輕易驗證的。如下列算式,
f(x) = g(g(g(g(….g(x)….)))) where g(x) = xor(x^((p+1)/4), 1) mod p 其反函數為h(x) = xor(x, 1)² mod p
上面提到「運算一段時間」的運算,其實是重複做同一種運算,從數學式看就很清楚,把x帶入g(x),然後把算出的結果再帶入g(x)。所以同一段時間,如果能迭代的次數比其他人多,那其他人就猜不到結果,也就沒辦法預測亂數結果。
最後,介紹一下這兩個方法怎麼運用在Ethereum Serenity中
首先,RANDAO會在內建在Beacon chain的邏輯中,而不是一個獨立的smart contract,但RANDAO有個缺點,就是最後一位可以預測/操縱結果。如下圖,因為最後一位可以知道前面的值,所以在最後可以決定要出值或是不出,因此可以操縱結果。(目前epoch是64個slot,而每個slot是6秒,所以epoch約是6.4 minutes)
source : Justin Drake slides on DevCon4
所以設計上除了RANDAO,還多一層VDF。 VDF把RANDAO產生出來的亂數當種子去產生亂數,而且計算時間要夠長(至少要一個epoch,目前規劃是10個epoch,不過相信還會有變動),如下圖
source : Justin Drake slides on DevCon4
實際的lifecycle會像這樣,在VDF計算完後,會有一個epoch的緩衝讓這個亂數可以上鏈,然後接著下一個RANDAO mixing。
source : Justin Drake slides on DevCon4
但問題來了,怎麼確保沒有人算得比你快??
所以Ethereum Foundation計畫做硬體,設計新的ASIC晶片來計算VDF,以確保沒人可以預測最終的亂數。實際設計當然不是Foundation的researcher們,他們找了學界跟產業的IC design專家做設計,因為硬體研發費用龐大,Filecoin也一起支援這項計畫。更多細節的部分,可以參考Minimal VDF randomness beacon
other references :RANDAO中文白皮書Justin Drake explains “Ethereum 2.0 randomness” on Devcon4
Originally published at kimiwublog.blogspot.com.
Ethereum RNG (RANDAO & VDF) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
硬筆字產生器 在 做作的Daphne Facebook 的最佳貼文
初學者學習西洋花體字,搭配格線紙練習的話,不但事半功倍,學習更快,而且可以降低挫折感。
另外硬筆書法用的習字紙、九宮格、稿紙、五線譜、方格紙.......也都有產生器可以用,簡簡單單就能自己印出來當作筆記紙用喔!