VRF隨機數生成:Alice使用私鑰sk和輸入alpha,呼叫VRF隨機數生成演算法,生成隨機數和證明VRF Proof,並將輸入的alpha和隨機數證明VRF Proof發給Bob。
VRF隨機數驗證:Bob收到Alice發來的資訊後,使用Alice的公鑰,呼叫VRF驗證函式、驗證VRFProof是否有效。若有效,則將VRFProof轉換為隨機數Random,這裡的隨機數Random與Alice計算的隨機數Random一致;若無效,則說明這是一個偽造的VRF證明,Bob不會使用該證明產生隨機數。
VRF演算法的三個特性
VRF演算法具有完全唯一性、完全抗衝突性、完全偽隨機性。
· 完全唯一性(Full Uniqueness): 給定VRF私鑰和輸入,有且僅有一個VRF輸出隨機數可被驗證有效;給定VRF私鑰SK和輸入alpha,攻擊者不可產生不同的{beta1, pi1}和{beta2, pi2},滿足VRFverify(PK, alpha, pi1)和VRFverify(PK, alpha, pi2)均驗證有效。
· 完全抗衝突性(Full collison Resistance) : 即使在攻擊者攻破VRF金鑰SK的情況下,攻擊者也無法找到兩個不同的輸入alpha1和alpha2,使得VRFhash(SK, alpha1) == VRFhash(SK, alpha2)。
· 完全偽隨機性(Full Pseudorandomness) : 攻擊者不持有VRF證明pi的情況下,無法將VRF隨機數與通常的隨機數區分開。
因此,給定輸入和私鑰,使用VRF演算法生成的隨機數是唯一的,驗證者可透過VRF證明推匯出隨機數,並使用VRF證明、VRF隨機數生成者的公鑰驗證VRF證明是否有效。
與簽名演算法相比,VRF隨機數和簽名均可驗證,給定同樣的私鑰和輸入多次生成的簽名不一定相同,但生成的VRF隨機數相同,即簽名演算法不具有唯一性,VRF演算法具有唯一性。
與雜湊演算法相比,雜湊演算法不具有可驗證性,會透過輸入提前預測指定輸入的雜湊;VRF演算法具有可驗證性,在不知道證明或者私鑰的情況下,無法透過提前預測指定輸入對應的VRF隨機數。
基於VRF的rPBFT共識框架
目前rPBFT主要包括兩個系統引數,均可動態調整。
· epoch_sealer_num: 共識委員節點數目,可動態配置。
· epoch_block_num:共識委員節點替換週期,即每出epoch_block_num個區塊後,進行一次共識委員節點的輪換,可動態設定。
下圖是基於VRF的rPBFT共識框架,其核心元件包括VRF隨機數生成器、交易生成器以及內建的共識委員管理合約。
系統初始化時,基於第0塊(創世塊)雜湊和各個節點的節點ID,採用Fisher–Yates shuffle洗牌演算法打亂所有共識順序,從中選出epoch_sealer_num個共識節點作為共識委員節點,其他節點作為驗證節點。
若當前塊高減去上次共識委員輪換時的塊高等於epoch_block_num,Leader會觸法共識委員節點輪換,在共識委員節點輪換。
該過程中,Leader呼叫最高塊雜湊和私鑰作為輸入,獲取VRF證明,並呼叫交易生成器,將獲取到的VRF證明作為引數,產生帶有Leader簽名的共識委員節點輪換交易,該交易作為區塊中的最後一筆交易打包到PBFT Prepare訊息包中,並被Leader廣播到所有共識委員節點。
其他共識委員節點收到Leader廣播的帶有共識委員節點輪換交易的PBFT Prepare訊息包後,驗證並執行該交易,主要驗證流程包括:
· 共識委員節點輪換條件檢查:為防止Leader惡意偽造共識委員輪換交易,其他共識委員節點收到包含共識委員輪換交易的區塊後,根據當前塊高判斷是否需輪換共識委員節點,若判斷當前輪不需要輪換共識委員節點,則會拒絕該區塊。
· 檢查共識委員輪換交易由Leader產生:為防止惡意節點偽造Leader產生共識委員輪換交易,還需進一步驗證共識委員輪換交易是否由Leader產生,並拒絕由非Leader產生的共識委員輪換交易。
以上驗證透過後,共識委員節點呼叫共識委員管理合約執行的帶有共識委員輪換交易的區塊,合約執行過程中根據VRF隨機數,選取1個驗證節點為共識委員節點,並替換1個共識委員節點為驗證節點。
帶有共識委員輪換交易的區塊達成共識落盤後,下一輪共識載入新的共識委員節點參與PBFT共識。
基於VRF的rPBFT核心元件功能
下面詳細介紹基於VRF的rPBFT核心元件VRF隨機數生成器、交易生成器、共識委員節點管理合約的功能。
VRF隨機數生成器
每個共識節點內都會內建一個VRF隨機數生成器,其主要功能包括生成VRF公鑰、生成用於輪換共識委員節點的可驗證隨機數、VRF隨機數驗證、將VRF證明轉換為雜湊,具體如下:
· 生成用於共識委員節點輪換的可驗證隨機數 : 輸入 blockHash 和VRF公鑰 ,輸出可驗證的隨機數證明VRF Proof。
· VRF隨機數驗證:給定VRF證明VRF Proof和生成VRF證明的節點公鑰,驗證VRF證明是否有效。
· 將有效的VRF隨機數證明轉換為雜湊:將驗證透過的VRF隨機數證明轉換為雜湊。
· 生成VRF公鑰:以節點簽名私鑰sk為輸入,生成VRF公鑰pk = g^sk,僅初始化一次。
交易生成器
基於VRF的rPBFT共識演算法透過在共識過程中呼叫共識委員節點管理合約實現共識委員節點輪換功能。
Leader發起共識委員節點輪換時,需呼叫交易生成器構造共識委員輪換交易,交易生成器根據VRF隨機數證明,為Leader生成帶有簽名的共識委員節點輪換交易。
共識委員節點管理合約
共識委員節點管理合約是實現共識委員節點輪換功能的核心元件,合約的輸入引數包括:Leader生成的VRF證明、VRF證明對應的輸入alpha。
共識委員節點管理合約主要功能是驗證共識委員節點輪換交易的合法性,並在共識委員節點輪換交易驗證合法後基於VRF隨機數輪換共識委員節點,具體流程如下:
1、判斷當前區塊高度是否需要輪換共識委員節點
為防止Leader惡意生成並打包共識委員節點輪換交易以從中獲利,各共識委員節點執行共識委員節點管理交易時,首先判斷當前塊高是否滿足共識委員輪換條件:若當前區塊距離上次輪換共識委員節點相差epoch_block_num個區塊,則繼續驗證VRF隨機數,否則說明該筆交易是Leader惡意產生的交易,不做任何共識委員節點輪換操作。
2、驗證合約輸入
為了防止節點做惡,保障節點輪換的安全性,輪換共識委員節點前,需要基於輸入引數VRF證明、VRF證明對應的輸入alpha,進行如下驗證:
· 驗證VRF證明對應的輸入alpha是否等於最高塊的區塊雜湊,若相等,則繼續驗證,否則直接返回,不做共識委員節點輪換操作;
· 用Leader的VRF公鑰、輸入alpha,驗證VRF證明是否有效,若是無效的VRF證明,直接返回,不做共識委員節點輪換操作。
經過以上兩步的驗證,排除了Leader惡意偽造輸入、其他惡意節點故意偽造VRF證明的情況,消除了惡意攻擊的可能性。
3、基於VRF證明產生隨機數,並輪換共識委員節點
輪換共識節點具體如下:
· 基於VRF證明,呼叫VRF生成器產生VRF隨機數random。(注:由於VRF演算法的完全唯一性,所有共識委員節點獲取的VRF隨機數一致)。
· 以產生的VRF隨機數random為輸入,採用Fisher–Yates shuffle洗牌演算法,打亂共識委員節點和驗證節點的順序,並從打亂順序的共識委員節點列表中選取1個節點,將其更新為驗證節點;從打亂順序的驗證節點列表選取1個節點,將其更新為共識委員節點。
小結
綜上,基於VRF的rPBFT共識演算法在保證BFT類演算法效能的同時,具有更好的可擴充套件性和更高的安全性。
可擴充套件性方面,rPBFT共識演算法每輪共識僅選擇epoch_sealer_num個共識委員節點參與共識,因此其網路複雜度固定為O(epoch_sealer_num * epoch_sealer_num),與節點規模無關,可擴充套件性更好。
安全性方面,rPBFT初始化時,採用Fisher–Yates shuffle洗牌演算法打亂了初始節點列表,並從中選取epoch_sealer_num個共識委員節點,保障了初始共識委員節點選取的隨機性;輪換節點時,基於Leader產生的不可篡改的VRF隨機數替換共識委員節點,保障了共識委員節點輪換的隨機性和不可預測性,進一步提升了系統安全。
基於VRF的rPBFT是FISCO BCOS團隊對支援大規模節點共識演算法的進一步探索,FISCO BCOS對共識演算法的最佳化、改進工作仍在持續進行,歡迎大家探討交流。