1. 程式人生 > >什麼是可驗證隨機函式VRF

什麼是可驗證隨機函式VRF

因為可驗證隨機函VRF對設計區塊鏈共識演算法有很大幫助,最近就研究了一下VRF,本文隨時更新,以分享我對VRF和共識演算法的最新理解。

要理解VRF的工作原理,首先要理解雜湊函式,這是基礎知識,比如SHA256,SHA3等等,不必詳細討論。先理解一下這裡說的“隨機”是什麼意思:一個理想的雜湊函式,其值域應該是離散的、均勻分佈的,給定不同的輸入值,其輸出值應該沒有規律,隨機的灑落、分佈在值域區間內。

再看一個簡單的雜湊函式變種,即結合了金鑰secret的雜湊函式,比如result = SHA256(secret,info),那麼要得到結果result,僅僅擁有info是不夠的,必須要知道secret才能計算出來,或者說我們已經擁有了結果result和info,但是必須知道secret才能驗證info和result是否是對應匹配的,這就是帶金鑰的雜湊函式。然而這裡引申出了一個問題:有沒有可能在不出示金鑰secret的情況下,驗證result和info是對應匹配的?於是就有了可驗證隨機函式Verifiable Random Function(VRF)。簡單來說,也就是結合了非對稱金鑰技術的雜湊函式,比如result = VRF_Hash(SK,info),SK是私鑰,不公開,祕密儲存,和SK配對的PK是公鑰,需公開給驗證者。

具體的操作流程如下:

1、證明者生成一對金鑰,PK、SK;

2、證明者計算result = VRF_Hash(SK,info);

3、證明者計算proof = VRF_Proof(SK,info);

4、證明者把result和proof遞交給驗證者;

5、 驗證者計算result = VRF_P2H(proof)是否成立,若成立,繼續下面的步驟,否則中止;

6、 證明者把PK,info遞交給驗證者;

7、 驗證者計算True/False = VRF_Verify(PK, info, proof) ,True表示驗證通過,False表示驗證未通過。

所謂的驗證通過,就是指proof是否是通過info生成的,通過proof是否可以計算出result,從而推匯出info和result是否對應匹配,證明者給出的材料是否有問題。在整個操作流程中,證明者始終沒有出示自己的私鑰SK,驗證者卻可以推匯出info和result是否對應匹配,這就是VRF的妙用。

也可以從雜湊函式的演化角度做個總結:

原始的雜湊函式:info–>result

帶金鑰的雜湊函式:info, secret–>result

公鑰版本的雜湊函式(即VRF):info,SK–>proof,PK–>result

相關推薦

什麼是驗證隨機函式VRF

因為可驗證隨機函VRF對設計區塊鏈共識演算法有很大幫助,最近就研究了一下VRF,本文隨時更新,以分享我對VRF和共識演算法的最新理解。 要理解VRF的工作原理,首先要理解雜湊函式,這是基礎知識,比如SHA256,SHA3等等,不必詳細討論。先理解一下這裡說的“

VRF驗證隨機函式)快速理解

理解VRF之前,需要先理解帶祕鑰的雜湊函式,和傳統的雜湊函式不同,帶祕鑰的雜湊函式在計算HASH數值的時候引入了一個不公開的祕鑰,這樣為從明文到HASH數值計算之間添加了一定的難度,這個難度就是由祕鑰引入的。我們簡單的定義一個帶祕鑰的HASH函式為如下的形式: hash_v

登錄驗證隨機驗證碼的實現

tro import csrf 驗證碼 upper pen use cati 用戶驗證 今天我們來學習登錄驗證中,如何生成隨機驗證碼?驗證碼使用基本都是找現成的組件來實現,用代碼實現這個簡單功能主要是了解了解驗證碼內部的實現。 友情鏈接 生成隨機驗證碼基本流程:http:/

python中的隨機函式

python--隨機函式(random,uniform,randint,randrange,shuffle,sample) 本文轉載自:[chamie] random() random()方法:返回隨機生成的一個實數,它在[0,1)範圍內 運用random()方法的語法: import ran

33-多執行緒--賣票示例+執行緒安全(產生原因+解決方式:同步)+同步(同步程式碼塊+同步的好處與弊端+同步的前提+同步函式+賣票示例的同步函式寫法+驗證同步函式的鎖+驗證靜態同步函式的鎖)

一、賣票示例 需求:四個視窗,同時售賣100張票,票號為1-100 1、沒有多執行緒時的賣票程式碼 class Ticket { //100張票 private int num = 100; public void sale() { /

CLR via C#學習筆記-第十二章-驗證性和約束

12.8 可驗證性和約束 where關鍵字 編譯器和CLR支援稱為約束的機制,可通過它使泛型變得真正有用。 約束的作用限制能指定成泛型實參的型別數量,通過限制類型的數量,可以對那些型別執行更多操作: public static T Min<T>(T o1,T o2) whe

Linux重入函式和執行緒安全的區別與聯絡(轉)

*****可重入函式      函式被不同的控制流程呼叫,有可能在第一次呼叫還沒返回時就再次進入該函式,這稱為重入。      當程式執行到某一個函式的時候,可能因為硬體中斷或者異常而使得在使用者正在執行的程式

機器學習之---馬爾隨機場的應用

本節主要介紹馬爾科夫的隨機場模型以及其用於影象的分割演算法中。基於馬爾科夫的隨機場(MRF)的影象分割是一種基於統計的影象分割演算法,其模型引數少,空間約束性強,使用較為廣泛。 首先了解一下馬爾科夫模型,純粹的馬爾科夫模型就是指一件事物的當前狀態只與它之前的1個或者n個狀態有關,而與再之前的狀態

機器學習之---馬爾隨機場例項

本節主要介紹馬爾科夫的隨機場模型以及其用於影象的分割演算法中。基於馬爾科夫的隨機場(MRF)的影象分割是一種基於統計的影象分割演算法,其模型引數少,空間約束性強,使用較為廣泛。 首先了解一下馬爾科夫模型,純粹的馬爾科夫模型就是指一件事物的當前狀態只與它之前的1個或者n個狀態有關,而與再之前的狀態

random 隨機函式使用

random 隨機函式的使用 需要掌握的能力 能夠使用隨機種子產生“確定”的隨機數 能夠產生隨機整數 能夠序列列表進行操作 一能夠使用隨機種子產生“確定”的隨機數 給定隨機數種子函式為random.seed()函式,當給定隨機數種子時,產生的是一個隨

keilc51重入函式及模擬棧淺析 (1)

1、關於可重入函式(可再入函式)和模擬堆疊(模擬堆疊)   “可重入函式可以被一個以上的任務呼叫,而不必擔心資料被破壞。可重入函式任何時候都可以被中斷,一段時間以後又可以執行,而相應的資料不會丟失。”(摘自嵌入式實時作業系統uC/OS-II)   在理解上述概念之前,必須先說一下keilc5

php隨機函式mt_rand()產生的小問題大漏洞

**說到隨機函式的應用,作為一個菜鳥,理解的也不是很深刻,在這裡之作為一個筆記來記錄,以後慢慢將其掌握之後,再在內容上面進行加深。 隨機函式的作用,常常是用來生成驗證碼、隨機檔名、訂單號,如果用來做安全驗證的話常常用來生成加密key、token等等。** 一、常見的隨機函式 1、rand() 常用的隨機

Linux 環境程式設計——淺談重入函式與不可重入函式

在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫可重入函式。那麼什麼是可

隨機函式模組random

random.random(),隨機指定0-1之間的浮點數,含左不含右 import random v = random.random() print(v) 輸出: 0.3250622831488351 random.uniform(1,5)隨機指定1-5之間的浮點數,左右都

C語言隨機函式的使用

rand()和srand()應該是初學者最先接觸到的隨機函數了,今天博主就這兩個函式陳述一下自己的理解。 這兩個函式的使用規範如下: /*這是一個模擬擲色子1800次的程式*/ #include <stdlib.h>

馬爾隨機場與條件隨機場

文章目錄 馬爾可夫隨機場 1. 引言 2. 團與極大團 3. MRF聯合概率 4. MRF的條件獨立性(有向分離) 條件隨機場 馬爾可夫隨

C程式設計--隨機函式(rand())

隨機函式 1. 概念 ( 隨機函式 r a n

python--隨機函式(random uniform randint randrange shuffle sample)

random() random()方法:返回隨機生成的一個實數,它在[0,1)範圍內 運用random()方法的語法: import random #random()方法不能直接訪問,需要匯入random模組,然後通過random靜態物件呼叫該方法 random.random rando

什麼是重入函式和不可重入函式

1.可重入函式 在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任 務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指一個可以被多個任務呼叫的過程,任務在呼叫時不必擔

Linux系統程式設計——淺談重入函式與不可重入函式

在實時系統的設計中,經常會出現多個任務呼叫同一個函式的情況。如果有一個函式不幸被設計成為這樣:那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。這樣的函式是不安全的函式,也叫不可重入函式。 相反,肯定有一個安全的函式,這個安全的函式又叫可重入函式。那