AIgorand區塊鏈中VRF隨機函數的應用

VRF(Verifiable Random Function)

  • 可驗證隨機函數可以看作是一個隨機預言機,即可以通過任意的一個輸入,獲得一個隨機數輸出:
  • 輸出的結果(Output)是一個隨機數,其數值會均勻分布在值域范圍內
  • 對于相同的Input,輸出的結果Output必須是一致的
  • 可驗證隨機函數比隨機預言機多了一個非交互的零知識證明,可以用零知識證明來驗證該隨機數輸出的正確性,表明這個隨機數的確是由特定的某個人生成的,而不是偽造的。

可驗證隨機函數組成

  • VRF GEN:生成秘鑰,生成一個公私秘鑰對
  • VRF VAL:生成隨機數進行輸出
  • VRF PROVE:計算零知識證明
  • VRF VER:驗證隨機數輸出

生成隨機數和其證明的過程在本機執行,輸入是私鑰和一個值。輸出隨機數以及它的零知識證明。其他節點收到我發出的隨機數和證明之后,結合生成該隨機數的節點的公鑰,即可對該隨機數處進行驗證

簡單的方法:通過VRF生成了這個隨機數value之后,可以通過設置一個全網公認閾值來判斷是否被抽中,比如都認同了一個值100為閾值,假設某輪我隨機到101那么,我就被允許進行下一步的操作

然而這種簡單的方法,沒有辦法防止女巫攻擊,女巫攻擊可以生成很多的賬號,每個賬號都進行隨機,進行干擾。所以現在大部分的VRF抽簽方案都采用基于權益來進行票數分配,也就是每個人都有投票的機會,但是因為個人的權益不同,每個人的票的權重也是不一樣的,然后進行抽簽算法的設計。這樣的話,如果將一個權重很高的賬戶拆分成權重很低的很多個賬戶,每一個的賬戶的投票的權重很低,因此對于系統的進行投票的干擾性很小。

?

無交互抽簽

?

最普遍的一種方案,通過二項分布來進行抽簽結果的計算。

  • 首先通過私鑰生成了value,這個value實際上可以看作是大的正整數,假設是256bit的,那么它的取值范圍應該處于0到2的256次方之間。相應的它與2的256次方相除,可以得到一個0到1之間的值。
  • 將這個值放到二項分布的累積分布中進行比對,可以得到相應的值
  • 如果這個值大于零,就相當于抽到了可以進行下一步的簽。

二項分布

驗證

  • 將這個值和之前VRF生成的和一起,廣播給其他人,其他任何收到的用戶結合廣播者的公鑰以及全網都知道的值,則可以驗證以下兩個條件是否成立:
  • 利用驗證是否正確
  • 利用通過二項分布函數得到j'是否與j相等

假設兩個條件均成立,那么就證明這個抽簽結果是正確的,是可信的。到此為止,從抽簽生成到驗證的過程就完成了。

優點

1、首先它的抽簽過程不需要與其他通信,直接在本機就能夠的到這個抽簽結果,而且這個x輸入是大家公認的,針對同一個x的輸出value是固定的,因此無法通過多次嘗試來改變抽簽結果

2、某個節點收到其他節點的抽簽信息之后,可以用附帶的證明,來證明這個隨機數的正確性,保證它的確是由私鑰的擁有者計算出來的。因此這個抽簽結果是無法被偽造的。

3、VRF主要用來的得出一個偽隨機數,抽簽的部分主要是由一個二項分布函數負責,而通過構建二項分布的參數,我們可以很方便的控制需要被得出的中簽權益的個數,適配不同的需要抽簽的場景。

參考鏈接

  • 區塊鏈中VRF的應用及原理解析

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447115.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AIgorand的相關學習參考鏈接

相關具體的開發者與SDK鏈接如下: GoSDKJavaScript SDK 網頁鏈接 測試網申請鏈接Github存儲庫鏈接開發者網址AIgorand官網Telegram電報群綜合白皮書MediumNaver Blog領英Linkedin區塊鏈瀏覽器INC公示錢包地址基金會公示錢包地址Telegram電報群官方 Github地址 相關…

操作系統 內核棧

視頻哈工大李治軍老師:https://www.bilibili.com/video/BV1d4411v7u7?p12 參考文檔:https://blog.csdn.net/SakuraA6/article/details/108810916 學長在我大一推薦我看,p12和p13的內容真的有那么難嗎,現在已經是我看的第三遍了還…

區塊鏈技術指南 序章理解感悟

序二 誤區一: 區塊鏈是一種顛覆性的新技術。區塊鏈不是一個新的技術,而是一個新的技術的組合。其關鍵的技術,包括P2P動態組網、基于密碼學的共享賬本、共識機制(拜占庭將軍問題,分布式場景下的一致性問題&#xff09…

面經:紅黑樹 B樹 B+樹 哈希表

1.對于插入,刪除,查找 以及 輸出有序序列 這幾個操作,紅黑樹也可以完成,時間復雜度 與 用跳表實現是相同的。 但是,對于按照區間查找數據這個操作(比如 [20,300]),紅黑樹的效率沒有跳表高&#…

回溯法和dfs的區別

值得注意,回溯法以深度優先搜索的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索。那為何 回溯算法 深度優先搜索 剪枝函數這一說法沒有錯? 因為樹是特殊的圖。簡單來說,樹是廣義的圖。再簡單來說,樹是圖。…

C++學習筆記 簡單部分

C 數據類型 使用變量來存儲各種信息,變量保留的是它所存儲的值的內存位置。這意味著,當創建一個變量時,就會在內存中保留一些空間。這段內存空間可以用于存儲各種數據類型(比如字符型、寬字符型、整型、浮點型、雙浮點型、布爾型…

Redis kqeue相關源碼

mask 或delmask :添加或者刪除的事件類型,AE_NONE表示沒有任何事件;AE_READABLE表示可讀事件;AE_WRITABLE表示可寫事件; 如aeCreateFileEvent(loop,e->fd,AE_READABLE,redisAeReadEvent,e); static int aeApiAddEv…

C++學習筆記章節中 面向對象詳解

C 類&對象 C類定義 本質上是一個數據類型的藍圖,定義了類的對象包含的信息,以及可以在這個類對象上執行哪些操作。類的定義是以class開頭,后面接類的名稱。類的主體是包含在一個花括號中,類的定義之后,必須跟著一…

Mac 破解軟件打不開沒有權限

Mac 破解軟件打不開沒有權限 sudo codesign -fs - /Applications/CleanMyMac\ X.app文件損壞 xxx sudo xattr -r -d /Applications/MarginNote\ 3.app sudo xattr -r -d com.apple.quarantine xxxx sudo codesign --force --deep --sign - /Applications/MarginNote\ 3\…

條件變量之虛假喚醒

當線程從等待已發出信號的條件變量中醒來,卻發現它等待的條件不滿足時,就會發生虛假喚醒。之所以稱為虛假,是因為該線程似乎無緣無故地被喚醒了。但是虛假喚醒不會無緣無故發生:它們通常是因為在發出條件變量信號和等待線程最終運…

拷貝構造函數和拷貝賦節省代碼最好用一個私有的函數

令 copy assignment操作符調用copy構造函數是不合理的,因為這就像試圖構造一個已經存在的對象。這件事如此荒涔,乃至于根本沒有相關語法。是有一些看似如你所愿的語法,但其實不是;也的確有些語法背后真正做了它,但它們…

解決Dr.com上不了網的問題

如果軟件安裝之后上不了網,會顯示出錯的信息,可以針對所顯示的問題,去定向搜索。 如果是軟件自身的問題,進入終端頁面,可以使用一下這條命令 netsh winsock reset 然后需要重啟電腦

terminate called after throwing an instance of ‘std::logic_error‘ what(): basic_string::_M_constr

terminate called after throwing an instance of ‘std::logic_error’ what(): basic_string::_M_construct null not valid 用0初始化字符串 編譯不報錯

密鑰協商(密鑰交換)機制的講解

國標文件涉及密鑰協商算法的函數 生成密鑰協商參數并輸出計算會話密鑰產生協商數據并且計算會話密鑰 密鑰協商(交換)算法及其原理 密鑰交換/協商目的 “密鑰協商機制”是:(在身份認證的前提下)規避【偷窺】的風險。…

基于ECC算法的秘鑰協商

基于ECC算法的衍生算法 ECDH(ECCDH)RSAECDHE(ECCDHE) ECDH密鑰協商(ECCDH) 橢圓曲線密碼學是屬于非對稱密碼學的,其私鑰的計算公式如下: 私鑰是一個隨機數d,取值范圍在1……n-1,其中n是子群的階公鑰是點HdG&#xff…

C++11 多線程相關知識的學習

C多線程類Thread(C11) C11中std命名空間將Boost庫中的Thread加入,Boost的多線程從準標準變為標準,這里將其用法整理復習,以demo的形式復習,還是喜歡看我自己寫的東西,符合我的個人邏輯頭文件為…

vscode vim 插件自定義配置

{"workbench.colorTheme": "Material Theme","files.defaultLanguage": "markdown", //新建文檔格式為markdown格式"vim.easymotion": true,"vim.leader": " ", // leader鍵"vim.useSystemClipbo…

C++11 explicit關鍵字的作用

explicit 在C中,explicit關鍵字用來修飾類的構造函數,被修飾的構造函數的類,不能發生相應的隱式類型轉換,只能以顯示的方式進行類型轉換。因為無參構造函數和多參構造函數本身就是顯示調用的。再加上explicit關鍵字也沒有什么意義…

c++ 指針的強制類型轉換

#include <iostream> using namespace std; class A { public:int i;int j;A(int n):i(n),j(n) { } }; int F2 (int,char *){return 1; }; int F1 (int){return 2; }; int main() {A a(100);int &r reinterpret_cast<int&>(a); //強行讓 r 引用 ar 200; …

C++11學習 virtual(虛函數)的用法

Virtual虛函數 在面向對象的C語言中&#xff0c;虛函數&#xff08;virtual function&#xff09;是一個非常重要的概念。因為它充分體現了面向對象思想中的繼承和多態性這兩大特性&#xff0c;在C語言里應用極廣。多態性&#xff1a;其含義就是多種形式&#xff1b;將具有繼承…