分佈式驗證者(Distributed Validators, DV) 是一種將一個以太坊驗證者的工作分配給一組分散節點的技術,以提高與在一個單一機器上運行一個驗證者客戶端相比的韌性(安全性、活性,或兩者兼有)。
引介
動因
傳統的驗證者客戶端設置
以太坊驗證者通過用他們的質押私鑰對消息簽名(例如區塊或證明) 來參與權益證明(PoS) 協議。質押私鑰只能通過客戶端軟件來訪問,客戶端根據分配給驗證者的職責安排消息的創建和簽名。傳統的驗證者客戶端設置會有一些風險:
-
質押私鑰存在一個地方。如果一個攻擊者獲得了這個密鑰,它可以創建衝突的消息,從而導致驗證存款被罰沒。
不運行自己的驗證者的質押者需要把他們的質押私鑰交給運營商。為了保證他們質押私鑰的安全,他們必須信任該運營商。
-
如果驗證者客戶端軟件不能創建及時的消息以履行驗證者職責,該驗證者會遭受怠工懲罰(inactivity),餘額會減少。
這可能是由於軟件崩潰、斷網、硬件故障等原因造成的。
-
如果驗證者客戶端連接的信標節點出現故障,驗證者可能跟在一個少數節點所在的分叉上,導致在PoS 協議的其他部分顯示是離線狀態。
分佈式驗證者協議
分佈式驗證者協議提供了一個解決方案,以減輕與傳統的單個驗證者設置相關的風險與擔憂。此外,該協議還可以用來實現先進的質押設置,例如去中心化的質押池。
基本概念
請注意:請參考詞彙表,了解分佈式驗證者規範中引入的新術語的解釋。 (譯者註:見文末)
分佈式驗證者背後的兩個基本概念是:
-
共識:單個驗證者的職責被分給幾個共同驗證者(co-validator) ,他們必須協作,在對任何消息簽名之前就如何投票達成一致。
-
M-of-N 門限簽名(threshold signatures):驗證者的質押私鑰被分割為N 個部分,每個共同驗證者持有一個share 。當至少有M 個共同驗證者對如何投票達成共識時,他們分別用各自的share 來對消息簽名,一個組合簽名可以由這些share 重構出來。
PoS 以太坊使用的是BLS 簽名方案,其中私鑰可以使用M-of-N 秘密共享技術(使用Shamir’s Secret Sharing 方案),以實現M-of-N 門限簽名。
(譯者註:Shamir’s Secret Sharing 被用於以分佈式的方式來保護秘密。秘密被分割為多個部分,這些部分被稱為share, 這些share 可以用來重構原來的秘密。而通過Shamir’s Secret Sharing 解密需要一個最低數量的share,被稱為門限。)
通過把一個合適的(偏重於安全性的) 共識算法和一個M-of-N 門限簽名方案組合起來,這個DV 協議確保共識是得到密碼學保證的,且至少有M 個共同驗證者對任何決定達成一致。
資源
實現
以下是分佈式驗證者技術的現有實現(但不一定是本規範的實現)。
-
python-ssv:Python 中分佈式驗證者協議實現的概念證明,與以太坊客戶端Prysm 交互。
-
ssv:分佈式驗證者協議的Go 實現,與以太坊客戶端Prysm 交互。
文檔
-
分佈式驗證者架構視頻介紹
總體架構
本規範提出一種實現分佈式驗證者客戶端(Distributed Validator Client, DVC) 軟件的方法,作為信標節點和一個遠程簽名者(Remote Signer, RS) 之間的中間件:
-
信標節點和遠程簽名者之間的所有通信都由DVC 管理,以便它能提供額外的分佈式驗證者功能。
-
信標節點和遠程簽名者不知道DVC 的存在,也就是說,它們以為彼此像往常一樣相互連接。
假設
-
我們假設總共有N 個節點,以及一個M-of-N 門限簽名方案。
為了與拜占庭容錯共識協議兼容,我們假設M = ceil(2 * N / 3)。
-
本規範假設某種基於領袖的、偏重安全性的共識協議,讓共同驗證者選定相同的證明/區塊進行簽名。我們假設共識協議在M 個正確節點下成功運行,且在N 個總節點中不超過F = (N-1)/3 個拜占庭節點和不超過N – M – F 防失敗節點(fail-stop node)。 (譯者註:拜占庭節點指的是在網絡裡故意撒謊或誤導其他節點的背叛節點。)
-
我們假設驗證者客戶端安全運行的通常前提條件包括最新的抗罰沒數據庫、正確的系統時鐘等。
-
我們暫時不考慮對“正確”以太坊分叉的投票——這個功能將在未來的更新里加上。
理想的保證
-
安全性(防止密鑰被盜):
除非N 個共同驗證者中有多於M 個驗證者的安全受到影響,否則質押者私鑰是安全的。
-
安全性(防止罰沒):
在異步網絡的假設下,除非多於三分之一的共同驗證者成了背叛者,否則驗證者永遠不會被罰沒。
在同步網絡的假設下,除非多於三分之二的共同驗證者成了背叛者,否則驗證者永遠不會被罰沒。
-
活性:在部分同步的網絡裡,除非多於三分之一的共同驗證者成了叛徒,否則協議最終都會產生一個新的證明/區塊。
規範
關於規範的技術細節描述在 src/dvspec/ : https://github.com/ethereum/distributed-validator-specs/blob/dev/src/dvspec。
詞彙表
以太坊概念
-
驗證者:參與權益證明以太坊驗證的公鑰。在階段0,驗證者預期會為信標鏈區塊履行證明和區塊提議的職責。
-
驗證者客戶端(Validator Client, VC):履行驗證者職責的軟件。 VC 能訪問驗證者的私鑰。
-
遠程簽名者(RS):負責以太坊私鑰管理的軟件,特別是用於對以太坊消息(例如區塊、證明等) 的簽名。 RS 運行一個服務器,用於接受傳入的對該類消息簽名的請求。
密碼學概念
-
私鑰分片(Key Share):作為門限簽名方案一部分的單個密鑰。
-
簽名分片(Signature Share):對來自單個私鑰share 的一些數據的簽名。多個這樣的簽名share 需要組合起來生成一個完整的簽名。
分佈式驗證者概念
-
分佈式驗證者(DV):一組參與者共同履行一個驗證者的職責。驗證者的私鑰在多個參與者中是秘密共享的,因此在沒有參與者的一定多數門限下,一個完整的簽名是無法形成的。
-
共同驗證者(Co-Validator) :參與DV 協議成為一個特定驗證者的BLS 公鑰門限驗證者。
-
分佈式驗證者客戶端(DVC):通過運行DV 協議(或者,作為多個共同驗證者來參與,每個共同驗證者身份與不同的驗證者相關聯)參與成為一個共同驗證者的軟件。 DVC 能訪問共同驗證者的私鑰,即所對應的驗證者的秘密共享門限私鑰。
實例
使用上述術語的實例說明:
-
公鑰為0xa5c91… 的以太坊驗證者作為一個分佈式驗證者在運行。
-
有4 個共同驗證者參與到驗證者0xa5c91… 的分佈式驗證者中。
-
與0xa5c91… 相關聯的私鑰在4 個共同驗證者中使用3-of-4 的秘密共享方案來拆分,這樣就建立了一個3-of-4 的門限簽名方案。
更簡單地說,0xa5c91… 的私鑰被拆分為4 份,每一份由共同驗證者中一名來託管,這樣必須至少有共同驗證者中的三名合作才能從0xa5c91… 產生一個簽名。
每個共同驗證者都在運行分佈式驗證者客戶端軟件來參與分佈式驗證者。
原文鏈接:https://github.com/ethereum/distributed-validator-specs
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。
來源| github.com/ethereum
作者| Aditya Asgaonkar