可验证随机函数(Verifiable Random Function, VRF)
論文中的描述
但在這里沒有明白為什么在VRFVERVRF_{VER}VRFVER?環節需要x,y,π\piπ信息。以及message x是什么,如何選取才能取到偽隨機性。
VRF介紹
VRF 這個概念最早由 Micali,Rabin 和 Vadhan 三個人所提出。
一句話描述: 以sk和隨機種子作為輸入,輸出偽隨機數r和對應的證明proof
任何人可以通過sk對應的公鑰vk加上證明proof來驗證偽隨機數r是否有sk持有者生成。
特點:
1)可驗證性:任何人可以通過vk和proof驗證隨機數r是sk和x對應的輸出;
2)唯一性:sk和x不變的情況下,輸出的偽隨機數r是唯一的;
3)隨機性:不給定證明proof的情況下,VRF的輸出的偽隨機數r與其他偽隨機數r’對于敵手來說是不可區分的。
關于第三步:驗證
驗證函數 Verify 輸入驗證密鑰 vk、消息 x 以及偽隨機y和證明π\piπ。輸出結果0/1:只有該函數驗證了證明 π\piπ 是根據 x 生成的,且根據證明π\piπ可以推導出 Y,才會輸出 1,也就是說該函數驗證 X 與 Y 是否存在唯一的對應關系。
為什么VRF驗證需要proof證明?
如果沒有π\piπ,就類似數字簽名,這里只能通過vk證明sk對消息x進行了簽名驗證,但是如果對消息x用了一種算法進行處理后的信息不能驗證,即不能驗證f(x)。
而ZKP零知識證明正好是可以做到在不透露秘密sk的條件下,驗證基于sk提出的承諾statement。(與數字簽名的區別是,數字簽名是不提供sk的情況下證明原本的消息x,而ZKP可以做到不提供sk的條件下對x的推論fsk(x)f_{sk}(x)fsk?(x)的證明)
VRF應用于區塊鏈共識打包區塊權的選擇
區塊打包節點選擇方式:讓各個節點自己抽簽,抽中之后,大家可以很容易地驗證這個結果確實是你生成的。
具體過程有可能是這樣的:假設現在是 round 10(第 10 輪),節點們會輪流抽簽,以節點自己的私鑰 + 一個全網都知道的隨機數(比如是這輪的輪次 10)作為輸入,生成了一個隨機數(假設在0-100);設置一個條件:100 個節點輪流抽簽,誰先抽出來的隨機數大于 10,就是這一輪的打包者。假設 5 號節點抽到了 11,可是只有 5 號知道其他人不知道,因此他在廣播這個隨機的同時還需要廣播一個零知識證明。通過零知識證明,全網只需要通過 5 號的公鑰就可以驗證,接受 5 號為這輪打包者。
可驗證隨機函數一共包含四個函數:1、生成密鑰,生成一個公鑰私鑰對;2、生成隨機數輸出;3、計算零知識證明;4、驗證隨機數輸出。
VRF 的目的就是要生成一個真正隨機而且無法被預測的值。在區塊鏈選出塊節點的過程中,為了保證安全,隨機是一個基本要求。不過,區塊鏈選節點不單純是隨機就 OK 的,還要考慮到攻擊成本等,所以共識機制往往加入算力和持幣權益等影響因素,以增加攻擊者的攻擊成本。如果單純使用隨機算法,就很容易受到女巫攻擊,攻擊者可以廉價找大量的傀儡機(肉雞)來增加自己抽中的概率。
Reference
1.某目前尚未見刊的論文
2.密碼學小知識(8):可驗證隨機函數(Verifiable Random Function, VRF)
3.可驗證隨機函數VRF
4.可驗證隨機函數(VRF)應用于區塊鏈共識的原理和方法
5.區塊鏈知識之 VRF: 可驗證隨機函數
總結
以上是生活随笔為你收集整理的可验证随机函数(Verifiable Random Function, VRF)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 夜雨数竞笔记-极限(11)-欧拉常数
- 下一篇: java使用poi,将xls文件转换为x