VRF在區塊鏈中的應用


最近區塊鏈領域流行了一種“怪病”,許多區塊鏈項目或者設計方案都加入了一個叫做VRFs的算法。那么,
(1) 什么是VRFs?
(2) VRFs在區塊鏈中解決了什么問題?
本文旨在介紹VRFs的原理以及在區塊鏈中的用途,不涉及復雜的VRFs的詳細設計實現以及安全性證明。

VRFs介紹

VRFs全稱Verifiable Random Functions,也就是可驗證隨機函數。從名字上可以看出VRFs有三個重要的特點:

  • 可驗證
  • 隨機性
  • 函數組

實際上,VRFs是hash函數構造的公鑰密碼方案,因此VRFs包含了hash函數和公鑰密碼算法兩者的特性和功能(hash函數和公鑰密碼參考wiki,這里不在贅述)。功能上簡單來講,hash函數用來保證信息完整性,公鑰密碼用來進行數據鑒權。
VRFs介紹內容:

  1. 關鍵術語介紹
  2. VRFs之函數組
  3. VRFs之隨機性
  4. VRFs之可驗證
  5. VRFs之確定性

關鍵術語

VRFs涉及的一些關鍵術語:

  • SK, PK: VRF中使用的公私鑰對,SK為私鑰,PK為公鑰。PK默認為公開參數(比如說已經記錄在區塊鏈上)
  • M: 輸入數據
  • R:VRF哈希輸出
  • P:VRF證明
  • Prover:證明者,擁有VRF公私鑰PK和SK的一方
  • Verifier:驗證着,擁有VRF中的公鑰PK

VRFs之函數組

VRFs中涉及到四個重要的函數

這四個函數可以分為兩類,

  • 生成函數:
R=VRF_Hash(SK,M)
P=VRF_Proof(SK,M)
  • 驗證函數:
R=VRF_P2H(P)
VRF_Verify(PK,M,P)

應用上,(1)首先生成一對公私鑰;(2)然后使用生成函數分別生成哈希值R和哈希值的證明P;(3)使用驗證函數分別驗證RP

VRFs之隨機性

像每個密碼算法一樣,首先VRF需要一個密鑰生成算法,用來生成公私鑰對(SK,PK)。這里的SK的產生需要復雜的隨機數產生函數(高端一點的需要特制的硬件隨機數發生源)來保證密鑰的隨機性。
當然,VRFs之隨機性實際上並不是指的上述隨機性,VRFs的隨機性指的是,在不給定證明P的情況下,VRF_Hash的輸出R與隨機數兩者之間是敵手不可區分的,這是比較正式或者說學術上的說法,可以認為VRF_Hash輸出的R就是個隨機數。

VRFs之可驗證

VRF的可驗證性,有兩層意思:
一是PR的驗證;
二是PKP的驗證。
前者是VRF證明對VRF哈希的驗證,后者是公鑰對VRF證明的驗證。有點類似驗證鏈:擁有公鑰PK可以通過VRF_Verify(PK,M,P)驗證證明P的合法性;擁有P可以通過R=VRF_P2H(P)來驗證R的合法性。

VRFs之確定性

VRFs的確定性比較簡單,就是對相同的SKM,多次計算R=VRF_Hash(SK,M),得到的R是相同的。

VRFs在區塊鏈中的應用

區塊鏈技術包含了密碼學、P2P協議以及共識算法等,是多種技術的巧妙組合,同時加入了經濟激勵機制。其中,共識算法可謂是區塊鏈技術的靈魂。區塊鏈技術從2009年至今發展了接近十年的時間,共識算法也一直圍繞着安全性、去中心化以及高效低能者三個要求不斷探索,從中本聰共識(POW類),到POS和DPOS共識,再到各種BFT共識等。

在區塊鏈世界中,礦工的工作是區塊鏈安全運行的基礎,而他們的工作就是 挖礦⚒️ ,礦工挖到礦(區塊)會獲得一筆獎勵金和一部分交易手續費。同一時間會有許多礦工進行挖礦,但最終只會有一個區塊進入到主鏈上。

比特幣如何決定出塊者

POW挖礦算法Hash(Hash(block, nonce)) < D
礦工挖礦的過程就是為了找到一個以上條件的nonce,誰先算出來誰就是本輪的獲勝者。根據Hash算法的特點,其他礦工可以很容易驗證上面不等式的有效性。
注:如果同時有兩個人計算出符合條件的區塊,那么需要根據公認的最長鏈原則來決定最終的區塊。
眾所周知這類算法:實現簡單,易於理解,但低效高能。
為了解決POW共識低效高能的缺點,出現了POS類共識,而這類共識首先要解決的問題就是 誰來出塊 的問題,VRFs最初被引入區塊鏈就是為了解決這個問題。

VRFs如何決定出塊者

VRFs算法R = VRF_Hash(SK,block) ,其中SK代表節點私鑰
理論上講,VRFs單獨工作是不能確定誰是出塊者的,但像POW機制和最長鏈原則一樣,結合VRFs選出出塊者也有類似的兩個原則:

  1. 節點廣播R,加入候選者列表
  2. 根據最優原則,決定出塊者
    注:這里的最優原則,可以是候選者列表中權益最大節點賬戶,或者長得最帥的那個😄~
    然后,節點可以很快的驗證自己是否能成為下一輪的出塊者,不需要進行大量的Hash計算,只需要比對一下在候選列表中自己是不是最優秀的。

這類算法特點:離線驗證,高效,但實現復雜

VRFs的十萬個為什么

(1)不過聰明的人可能一下就能看出其中的問題:SK是礦工私鑰不會公開,其他礦工如何證明R不是隨便選取的小於D的數。

因此需要有個對於R有效性的證明,也就是上文中的PP=VRF_Proof(SK,M),然后通過R'=VRF_P2H(P),從P中恢復出一個R',只要 R == R',就可以證明R的有效性。然后用公鑰PK通過VRF_Verify(PK,M,P)來對P進行公開驗證。

(2)當然聰明的你可能又問了:看了半天,我感覺直接用簽名算法不就可以了,干嘛整的這么復雜,比如說礦工直接對block簽名,如果Sign(SK, block) < D,那么礦工就有出塊的權利。

在密碼學簽名算法中,大都會引入隨機性,也就是對相同信息的多次簽名會得到不同的簽名值,因此礦工可以不斷對相同的輸入SKblock,計算簽名,以滿足結果小於D。那么理論上任何人都會成為出塊者,只要計算足夠多次的簽名。

(3)可是,對於RSA簽名方案每次得到的簽名不就都是確定值么!

對。其實不管使用確定性簽名還是隨機性簽名,都存在個安全隱患。就是一旦將自己的出塊憑證公布,任何人都可以公開驗證,包括攻擊者。那么攻擊者可以對出塊節點進行攻擊,使其不能出塊。
使用VRFs的方式,礦工只需要公布自己的R表明自己的出塊權,當出完塊的時候再公布P,那么攻擊者就無法在出塊之前知道誰具有出塊權,因此也就無法實施針對性的攻擊。
當然在這種異步公布RP的情況下,R存在作假的可能。POS共識研究中有個比較有名的問題:"Nothing At Risk",翻譯過來叫無利害關系。之所以存在這種攻擊,是因為出塊者可以無代價的惡意出塊,進行雙花。對於這類攻擊的解決方法,一般都會使用 "保證金+懲罰機制" 的方式。


以上的公式都為簡化形式,實際應用中會有差別。比如VRFs挖礦算法的輸入參數等…

個人思考

  1. 共識不是一個簡單的算法問題,更像一個社會治理問題。
  2. 共識算法的設計需要關注性能和安全性,以達到性能和安全性的平衡。
  3. 區塊鏈技術”不可能三角問題“中的 去中心化,個人認為應該叫做 公平性,因為去中心化不是區塊鏈的目的,優秀的區塊鏈應該是高性能,高安全性,參與者相對平等。而去中心化只是實現上的效果。公平性不單指的是公平的出塊權,未來也可能代表公平的獲取信息的權利(當然可能只是借助了區塊鏈技術的創新項目)。
  4. VRFs可以用來選出塊者,也可以用來分組,通過分組,提高交易並行處理性能。

------------------------------------------------完美的分割線-------------------------------------------------------

個人思考,有感而發,歡迎批評指正~~

Cryptoeconomics isn't magic – it's just interdisciplinary.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM