Algorand?系列一:VRF?密碼學(xué)抽簽原理及其在?Algorand?中的應(yīng)用

1 VRF介紹

隨著Algorand項(xiàng)目的發(fā)起,原來越多的人對(duì)其所應(yīng)用到的密碼學(xué)抽簽技術(shù)產(chǎn)生了興趣并探索相關(guān)的應(yīng)用。目前赤兴,隨著Algorand項(xiàng)目的主網(wǎng)上線空郊,該技術(shù)也開始了接受大規(guī)模的正式實(shí)踐檢驗(yàn),我們拭目以待顾稀。

目前雖然國內(nèi)已經(jīng)有大量文章對(duì)VRF技術(shù)進(jìn)行了一些介紹,但是目前看都不夠全面深入。因此我們「YOUChainResarch」打算重新梳理包竹,希望能盡可能全面地介紹該技術(shù),作為我們「Algorand 技術(shù)解析系列」系列文章的開篇籍凝,與大家分享及交流探討周瞎。

1.1 簡(jiǎn)介

VRF全稱為 Verifiable Random Functions,翻譯為“可驗(yàn)證隨機(jī)函數(shù)”饵蒂,由Silvio Micali声诸,Michael Rabiny,Salil Vadhan于1999年提出退盯,是一種基于公私鑰的密碼學(xué)哈希函數(shù)彼乌。(關(guān)注過Algorand的人一眼就可以看出來泻肯,第一作者正是Algorand創(chuàng)始人Silvio Micali)。只有擁有VRF私鑰才能計(jì)算哈希慰照,但任何擁有對(duì)應(yīng)公鑰的人都可以驗(yàn)證該哈希的正確性软免。

VRF的一個(gè)關(guān)鍵應(yīng)用就是,提供對(duì)存儲(chǔ)在基于散列的數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)的隱私保護(hù)焚挠,防止離線枚舉(例如字典攻擊)膏萧。在這種應(yīng)用中,證明人持有VRF私鑰蝌衔,并使用VRF哈希在輸入數(shù)據(jù)上構(gòu)造基于散列的數(shù)據(jù)結(jié)構(gòu)榛泛。由于VRF的性質(zhì),只有證明人才能回答關(guān)于數(shù)據(jù)結(jié)構(gòu)中是否存儲(chǔ)了某些數(shù)據(jù)的查詢噩斟。任何知道VRF公鑰的人都可以驗(yàn)證證明人正確地回答了查詢曹锨。但是,不能對(duì)數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)的數(shù)據(jù)進(jìn)行脫機(jī)推斷(即不查詢驗(yàn)證器的推斷)剃允。

簡(jiǎn)單來說沛简,可驗(yàn)證隨機(jī)函數(shù)可以基于私鑰 對(duì)一個(gè)輸入,產(chǎn)生一個(gè)唯一的固定長(zhǎng)度的輸出斥废,以及一個(gè)對(duì)應(yīng)的證明椒楣。其他人在知道了公鑰、輸出牡肉、證明 之后就一定能驗(yàn)證這三者的正確性捧灰,并且也只有在知道了這三者之后才能驗(yàn)證其正確性。

上面提及的這個(gè)過程以及相關(guān)的數(shù)據(jù)统锤,是符合若干安全特性的毛俏,接下來會(huì)具體描述。

在VRF論文發(fā)出來后饲窿,到目前已有不同的團(tuán)隊(duì)(個(gè)人煌寇、組織、機(jī)構(gòu))做出了不同的實(shí)現(xiàn)逾雄。而IETF(Internet Engineering Task Force)目前正在為VRF的實(shí)現(xiàn)制定標(biāo)準(zhǔn)阀溶,目前還處于草案階段,并于 2019-2-8已發(fā)布第四版草案嘲驾。鏈接見文后參考部分淌哟。

1.2 基本算法表述

從一個(gè)概要邏輯來說,VRF總共涉及到幾個(gè)相關(guān)函數(shù)辽故,聯(lián)合起來完成一個(gè)證明和驗(yàn)證的閉環(huán)徒仓。

首先簡(jiǎn)單定義一下標(biāo)識(shí)符:

SK:VRF的私鑰

PK:VRF的公鑰

alpha: VRF的輸入,將對(duì)其進(jìn)行哈希

beta: VRF哈希輸出

pi: VRF證明

Prover: 持有VRF公私鑰的人就可以稱為證明人

Verifier: 只持有VRF公鑰的人誊垢,可以稱為驗(yàn)證人

VRF的基本算法掉弛,是很簡(jiǎn)單清晰的症见,如下:

前提是有一個(gè)秘鑰對(duì)生成算法,來生成VRF需要用到的公私鑰對(duì)殃饿;

證明人計(jì)算輸入的哈希:beta = VRF_hash(SK,alpha); > 注意谋作,VRF_hash算法是確定性的,對(duì)于相同的私鑰及相同的輸入乎芳,必定生成一個(gè)相同的輸出遵蚜。

證明人還需要用私鑰及輸入計(jì)算一個(gè)證明: pi = VRF_prove(SK, alpha)

驗(yàn)證人通過對(duì)應(yīng)的公鑰可以驗(yàn)證結(jié)果的正確性:VRF_verify(PK, alpha, pi)

實(shí)際實(shí)現(xiàn)中,上面2和3可以放在一起奈惑,得到如 beta,pi = VRF(SK,alpha) 這樣的函數(shù)吭净。

1.3 所需滿足的安全特性

基于上一節(jié)的內(nèi)容,還不能理解VRF的本質(zhì)肴甸。如果不考慮相關(guān)的安全特性寂殉,那上面的實(shí)現(xiàn)是沒有意義的。那么原在,VRF需要滿足哪些安全特性呢友扰?

總結(jié)起來,主要包括3種安全特性:唯一庶柿、防碰撞村怪、偽隨機(jī)。另外澳泵,對(duì)于IETF的實(shí)現(xiàn)標(biāo)準(zhǔn)实愚,即使在秘鑰對(duì)生成不夠可信的情況下,也可以保持“不可預(yù)測(cè)性”兔辅。

1.3.1 完全唯一 和 可信唯一

唯一是指對(duì)于任意固定的VRF公鑰以及任意的輸入alpha,都存在唯一的可被證明有效的輸出beta击喂。

完全唯一(full uniqueness)指在可計(jì)算范圍內(nèi)對(duì)手不可能找到一個(gè)公鑰pk维苔,一個(gè)輸入alpha,以及兩個(gè)證明 pi1 和 pi2 使得 VRF_verify(pk,alpha,pi1) 輸出 (VALID,beta1)懂昂,VRF_verify(pk,alpha,pi2) 輸出 (VALID,beta2)介时,而 beta1不等于beta2。

一個(gè)相對(duì)弱一點(diǎn)的安全特性叫可信唯一(trusted uniqueness)凌彬,對(duì)很多應(yīng)用來說這就夠了沸柔。可信唯一只在VRF公私鑰是以一種值得信任的方式生成的情況下铲敛,才滿足唯一性褐澎,其他就和完全唯一一樣。換句話說伐蒋,如果秘鑰對(duì)生成方式有問題或者使用了不好的隨機(jī)數(shù)工三,則唯一性可能無法保證迁酸。

直白來說,就是(1)對(duì)于特定的一對(duì)公私鑰(sk,pk)俭正,任意一個(gè)alpha都有并且只有一對(duì) (beta,pi)奸鬓,不存在說對(duì)于某個(gè)或某些輸出無法生成證明的情況;(2)對(duì)于任意特定的 alpha掸读,系統(tǒng)中的任何一對(duì)公私鑰(sk,pk)串远,都能生成唯一的與其他人不相同的 (beta,pi),不存在說對(duì)于某些輸入有些私鑰能構(gòu)造有效證明但有些私鑰卻不能構(gòu)造有效證明的情況儿惫。

其中可信唯一相對(duì)弱一點(diǎn)是在于抑淫,對(duì)于只滿足這個(gè)特性的系統(tǒng)來說,可以特意構(gòu)造某個(gè)公鑰 PK(它可能沒有對(duì)應(yīng)的有效的私鑰)姥闪,對(duì)于某個(gè)輸入alpha始苇,可以構(gòu)造兩個(gè)或多個(gè)不同的證明pi,用該P(yáng)K都能驗(yàn)證通過筐喳。

嚴(yán)格來說催式,世界上沒有絕對(duì)的事,上面的表述都是基于密碼學(xué)安全的意義之上的避归,就是說只要概率足夠小荣月,我們就認(rèn)為它不會(huì)發(fā)生,比如概率小于

2

?

256

2

?256

? 梳毙。

由上面表述可以看到哺窄,一個(gè)好的秘鑰對(duì)生成算法,對(duì)VRF實(shí)現(xiàn)的唯一特性的保障是很重要的账锹,這在我們選擇某種VRF實(shí)現(xiàn)的時(shí)候萌业,應(yīng)該要加以考量。

1.3.2 完全防碰撞 和 可信防碰撞

完全防碰撞是指奸柬,對(duì)手要找到具有相同輸出的兩個(gè)不同的輸入alpha1和alpha2生年,在計(jì)算上是不可能的,即使他知道私鑰也是如此廓奕。

相對(duì)弱一點(diǎn)的安全特性是 可信防碰撞抱婉,這指的是防碰撞特性需要基于一種可信的生成公私鑰的方式。

1.3.3 完全偽隨機(jī) 和 選擇性偽隨機(jī)

偽隨機(jī)性確保對(duì)手在知道輸出beta但是不知道證據(jù)pi的情況下桌粉,beta是隨機(jī)的蒸绩,不可能將其跟一個(gè)隨機(jī)值進(jìn)行辨別。

更精確地說铃肯,假設(shè)公私鑰(pk,sk)是以一種可信方式生成的患亿。偽隨機(jī)性確保了即使輸入是由對(duì)手仔細(xì)選擇的,對(duì)于計(jì)算能力有限的對(duì)手缘薛,只要他不知道私鑰窍育,那么輸出beta對(duì)他而言也是隨機(jī)不可分辨的卡睦。甚至在對(duì)手有意選擇多個(gè)輸入并觀察對(duì)應(yīng)輸出及證明的情況下,也是如此漱抓。

簡(jiǎn)單舉個(gè)例子就是表锻,分別對(duì)一組有規(guī)律的輸入 [alpha1,alpha2,...,alphan] 計(jì)算其對(duì)應(yīng)的輸出[(beta1,pi1),(beta2,pi2),...,(betan,pin)],你去觀察研究這些輸出乞娄,不可能找出某種確定的規(guī)律瞬逊。

舉個(gè)例子,偽隨機(jī)特性可以保證仪或,你想要生成一個(gè)小于某個(gè)值的哈希(比如按16進(jìn)制輸出后前面有10個(gè)0确镊,0x0000000000...),然后希望能快速推斷出一個(gè)輸入x使其滿足你的要求范删,這是做不到的蕾域。除了按窮舉法計(jì)算VRF哈希之外,別無捷徑到旦。

擁有完全偽隨機(jī)特性旨巷,則允許對(duì)手在任意時(shí)刻選擇輸入。直白但可能不夠準(zhǔn)確地說添忘,就是不管你什么時(shí)候給一個(gè)什么樣的輸入給我采呐,你都無法知道我對(duì)該輸入產(chǎn)生的輸出哈希是大于還是小于某個(gè)值。

選擇性偽隨機(jī)是一個(gè)弱一點(diǎn)的安全特性搁骑,對(duì)于很多應(yīng)用來說這也是足夠的斧吐。這時(shí),對(duì)手選擇目標(biāo)輸入需要獨(dú)立于VRF公鑰仲器,并且要在他觀察到他選擇的alpha'所對(duì)應(yīng)的beta'和pi'之前煤率。直白但可能不夠準(zhǔn)確地說,就是你知道了我的公鑰以及我曾經(jīng)的一些(alpha,beta,pi)信息娄周,然后你特意構(gòu)造一個(gè)新的輸入涕侈,這時(shí)你可能可以知道我對(duì)該輸入的VRF輸出將會(huì)大于或小于某個(gè)值,而不用等我真正告訴你結(jié)果煤辨。

需要記住,VRF的輸出beta對(duì)證明人(或任何知道了私鑰的人)來說木张,是不隨機(jī)的众辨。他們只要將beta和VRF_hash(sk, alpha)的結(jié)果進(jìn)行比較,就可以輕易地將beta和一個(gè)隨機(jī)值區(qū)分出來舷礼。

同時(shí)鹃彻,對(duì)于任何知道了對(duì)應(yīng)pi的人,beta看起來也是不隨機(jī)的妻献。只要檢查VRF_verify(PK, alpha, pi)是否返回 (VALID, beta)蛛株,就可以將beta跟一個(gè)隨機(jī)值區(qū)別開团赁。

還有,如果VRF秘鑰對(duì)不是用可信方式生成的(例如谨履,如果VRF秘鑰對(duì)使用不好的隨機(jī)數(shù)生成的)欢摄,那么beta也可能看上去不是隨機(jī)的。

1.3.4 一個(gè) “類隨機(jī)預(yù)言機(jī)”的不可預(yù)測(cè)特性

上面提到的偽隨機(jī)性笋粟,在秘鑰是由對(duì)手特意生成的情況下怀挠,是不滿足的。例如害捕,如果對(duì)手輸出的秘鑰是確定地生成的(或硬編碼的并且是公開的)绿淋,那么任何人都很容易獲得VRF的輸出。

然而尝盼,在一些VRF應(yīng)用中吞滞,存在一種不同類型的不可預(yù)測(cè)性。這種特性類似于由一種(普通的盾沫,不基于秘鑰對(duì)的)密碼學(xué)哈希函數(shù)所提供的不可預(yù)測(cè)性:如果輸入具有足夠的熵(如:不可能被預(yù)測(cè)到)裁赠,那么正確的輸出也是均勻不可辨別的。

雖然關(guān)于此特性在密碼學(xué)文獻(xiàn)中既沒有正式的定義疮跑,也沒有證明组贺,但在IETF中呈現(xiàn)的VRF實(shí)現(xiàn)方案中,只要公鑰是以一種可信任的方式生成的祖娘,那么就可以相信滿足了這個(gè)特性失尖。額外地,如果公鑰滿足一些特定驗(yàn)證過程渐苏,那么即使公鑰不是可信方式生成的掀潮,ECVRF也滿足此特性。

1.4 幾種實(shí)現(xiàn)方式概述及選擇考量

VRF都是基于非對(duì)稱加密技術(shù)來構(gòu)建的琼富,當(dāng)前主流的非對(duì)稱加密技術(shù)仪吧,有RSA和橢圓曲線密碼學(xué)這兩種。這兩種技術(shù)都可以用于構(gòu)建VRF實(shí)現(xiàn)鞠眉。

具體實(shí)現(xiàn)就不做詳細(xì)介紹了薯鼠,感興趣的還是以參考IETF的標(biāo)準(zhǔn)為主。

一般而言械蹋,一個(gè)基于RSA的VRF實(shí)現(xiàn)出皇,能滿足可信唯一、可信防碰撞和完全偽隨機(jī)特性哗戈。不過郊艘,RSA方案的一個(gè)問題是,要起到足夠的安全性,則RSA的秘鑰長(zhǎng)度需要比較長(zhǎng)纱注,這在很多應(yīng)用場(chǎng)景下都不是很理想畏浆。

而目前,在非對(duì)稱加密領(lǐng)域狞贱,橢圓曲線加密是越來越被重視刻获、越來越成為主流的非對(duì)稱加密技術(shù)。因此斥滤,對(duì)于VRF的實(shí)現(xiàn)也應(yīng)該盡量選用基于橢圓曲線的實(shí)現(xiàn)方案将鸵,這種方案可簡(jiǎn)稱為 ECVRF。

ECVRF在具體實(shí)現(xiàn)時(shí)佑颇,可以有很多細(xì)分方案顶掉,包括選用不同的橢圓曲線、選用不同的將消息映射到曲線上的點(diǎn)的算法(需要注意挑胸,橢圓曲線密碼學(xué)是基于有限域的痒筒,密碼學(xué)中所說的橢圓曲線上的點(diǎn)是離散的、不連續(xù)的)茬贵、選用不同的隨機(jī)數(shù)生成算法等等簿透。

一般而言,ECVRF能滿足可信唯一解藻、可信防碰撞和完全偽隨機(jī)特性老充,并且,如果在接收到一個(gè)VRF公鑰時(shí)螟左,做一些額外驗(yàn)證以驗(yàn)證公鑰的有效性啡浊,那么ECVRF就能滿足完全唯一和完全防碰撞特性。

1.4.1 額外討論:關(guān)于橢圓曲線的選擇

橢圓曲線是由如下形式方程式所定義的曲線:

y

2

=

a

x

3

+

b

x

2

+

c

x

+

d

y

2

=ax

3

+bx

2

+cx+d

其中胶背,可用于密碼學(xué)用途的橢圓曲線有很多巷嚣,曾幾何時(shí)锈死,最主流的曲線及相關(guān)算法都是由NIST(美國國家標(biāo)準(zhǔn)與技術(shù)研究院)選定和推薦的盟广,稱為NIST-P系列,比如廣泛使用的 P-256 曲線烘苹。這種情況持續(xù)到了2013年红且,那一年坝茎,一個(gè)叫“愛德華·斯諾登”(Edward Snowden)的牛人曝光了NSA的棱鏡計(jì)劃,其中曝光了NIST標(biāo)準(zhǔn)中一個(gè)基于橢圓雙曲線的隨機(jī)數(shù)生成器暇番,叫 Dual_EC_DRBG景东,包含后門,這可以使掌握該后門的NSA只根據(jù)生成器過去所產(chǎn)生的隨機(jī)數(shù)樣本奔誓,就可以預(yù)測(cè)后續(xù)的隨機(jī)數(shù)輸出,這樣的隨機(jī)數(shù),對(duì)我們來說是偽隨機(jī)的厨喂,對(duì)NSA來說是可預(yù)測(cè)的和措。這個(gè)事件引起了人們對(duì)NIST的信任危機(jī),雖然這個(gè)Dual_EC_DRBG跟NIST-P的加密算法沒有直接聯(lián)系蜕煌,人們可以使用其他的偽隨機(jī)數(shù)生成算法派阱,但是人們發(fā)現(xiàn)NIST-P曲線中都存在一些來歷不明的沒有任何說明的隨機(jī)數(shù)種子,比如下面的常數(shù)(參見:Nothing-up-my-sleeve_number):

P-224: bd713447 99d5c7fc dc45b59f a3b9ab8f 6a948bc5

P-256: c49d3608 86e70493 6a6678e1 139d26b7 819f7e90

P-384: a335926a a319a27a 1d00896a 6773a482 7acdac73

這時(shí)斜纪,一個(gè)新的曲線就閃亮登場(chǎng)了:Curve25519贫母。Curve25519/Ed25519/X25519 是著名密碼學(xué)家 Daniel J.Bernstein 在 2006 年獨(dú)立設(shè)計(jì)的橢圓曲線加密/簽名/密鑰交換算法,和現(xiàn)有的任何橢圓曲線算法都完全獨(dú)立盒刚。這些算法在開始的時(shí)候乏人問津腺劣,但在2013年之后一下子變得炙手可熱,成為絕對(duì)的主流已是大勢(shì)所趨了因块。

這一方面是因?yàn)檫@套算法完全開放設(shè)計(jì)橘原,沒有任何秘密,沒有任何可疑的參數(shù)涡上;同時(shí)趾断,這套算法確實(shí)足夠優(yōu)秀,足夠安全吩愧。此外芋酌,還有點(diǎn)題外話,這位Bernstein之前還曾因?yàn)閷⒆约涸O(shè)計(jì)的加密算法Snuffle發(fā)布到網(wǎng)上而遭到美國政府起訴雁佳,他抗?fàn)幜?年脐帝,最后還是美國政府撤銷了指控(跟全球大環(huán)境變化也有關(guān)系),但之后他還反訴政府甘穿,直到2003年底法院駁回他的訴訟腮恩,要他在政府制造了“具體威脅”之后再來。

關(guān)于算法的安全性温兼,Bernstein進(jìn)行了全面的考察秸滴,結(jié)果見下面截圖,具體參見這里: safecurves

safecurves

目前Curve25519/Ed25519已得到廣泛應(yīng)用募判,人們正在全面拋棄NIST荡含,擁抱Curve25519,應(yīng)用情況可參見:https://ianix.com/pub/curve25519-deployment.html 和 https://ianix.com/pub/ed25519-deployment.html 届垫。

1.5 VRF與數(shù)字簽名算法方案的區(qū)別

對(duì)于剛接觸VRF的人來說释液,可能很容易產(chǎn)生一個(gè)疑問:非對(duì)稱數(shù)字簽名算法,跟VRF有什么區(qū)別装处?或者說误债,非對(duì)稱數(shù)字簽名算法起不到VRF的作用嗎浸船?

在非對(duì)稱加密領(lǐng)域,存在數(shù)字簽名算法寝蹈,對(duì)于一對(duì)秘鑰 (pk,sk)來說李命,可以計(jì)算消息 m 的簽名 s = SIG(sk,m),然后知道公鑰的人可以驗(yàn)證 s 是否確實(shí)是簽名者用私鑰對(duì)m的簽名:Verify(pk,m,s)箫老。另外封字,通過密碼學(xué)哈希算法,也能得到消息m的哈希值耍鬓。

因此阔籽,這就跟VRF比較像了:

私鑰擁有者可以聲明自己的簽名結(jié)果s,其他人通過公開信息(pk,m,s)可以驗(yàn)證該聲明牲蜀;

s是不可預(yù)測(cè)的笆制,這具有密碼學(xué)上的安全性;可以再通過對(duì)s進(jìn)行密碼學(xué)哈希各薇,得到一個(gè)不可預(yù)測(cè)的哈希值项贺。

那么為什么還需要VRF呢,直接用數(shù)字簽名的方案不行嗎峭判? 關(guān)于此問題开缎,主要原因是,VRF相比于數(shù)字簽名方案林螃,具有前面所描述的更多安全特性奕删。對(duì)于數(shù)字簽名方案,有以下主要缺陷:

簽名結(jié)果s不是唯一的疗认!對(duì)于很多數(shù)字簽名方案完残,同一個(gè)私鑰對(duì)同一個(gè)消息,可以給出不同的簽名横漏。比如對(duì)于EdDSA谨设,如果 s = SIG(sk,m),那么

s

+

?

s+? 也會(huì)是一個(gè)有效的簽名缎浇,其中

?

? 是對(duì)應(yīng)橢圓曲線基點(diǎn)(即生成元)的階扎拣。

s是不可預(yù)測(cè)的,但是s不一定是偽隨機(jī)的素跺。也就是說二蓝,s在取值范圍內(nèi)的分布可能不是均勻的。

對(duì)于上面第1點(diǎn)指厌,當(dāng)然存在一些特定的數(shù)字簽名實(shí)現(xiàn)刊愚,比如將[GMR88]中的數(shù)字簽名方案中的隨機(jī)數(shù),使用[GMR89]中的GGM偽隨機(jī)預(yù)言機(jī)代替之后踩验,數(shù)字簽名可以是唯一的鸥诽。但是人們沒辦法確認(rèn)簽名者是否采用了這么一種方案商玫,因此也就是說唯一性是無法保證的。

無法保證唯一性的數(shù)字簽名方案衙传,可以認(rèn)為是一種“可驗(yàn)證不可預(yù)測(cè)函數(shù)”决帖,但不是“可驗(yàn)證(偽)隨機(jī)函數(shù)”。

2 Algorand VRF密碼學(xué)抽簽算法及應(yīng)用

2.1 抽簽算法原理剖析

2.1.1 抽簽原理

基于VRF的密碼學(xué)抽簽算法用于根據(jù)每個(gè)用戶的權(quán)重蓖捶,隨機(jī)選出用戶的一個(gè)子集。整個(gè)抽簽過程中扁远,需要保證:

不存在上帝角色操縱整個(gè)抽簽俊鱼;

每個(gè)參與者獨(dú)立做自己的抽簽,在主動(dòng)公布自己的抽簽結(jié)果之前畅买,其他任何人都不可能知道該抽簽結(jié)果并闲;

參與者公布自己的抽簽結(jié)果后,系統(tǒng)中的其他參與者都可以驗(yàn)證該結(jié)果谷羞,參與者不需要泄漏自己的私鑰帝火;

在一輪抽簽開始之前,任何參與者都不能預(yù)先計(jì)算自己的抽簽結(jié)果湃缎;

抽簽對(duì)所有參與者都是公平公正的犀填;

防女巫攻擊。

具體做法就是嗓违,假設(shè)參與者

i

i 的權(quán)重是

w

i

w

i

?

九巡,所有參與者的權(quán)重總和

W

=

i

w

i

W=∑

i

?

w

i

?

,對(duì)于具體的抽簽?zāi)康孽寮荆覀冊(cè)O(shè)置一個(gè)期望值

t

t冕广,表示在所有的權(quán)重當(dāng)中,希望抽出

t

t份權(quán)重偿洁。這樣撒汉,我們基于“伯努利試驗(yàn)”的抽簽方式,按

p

=

t

W

p=

W

t

?

? 的概率涕滋,讓每個(gè)參與者

i

i 依據(jù)自己的權(quán)重

w

i

w

i

?

w

i

w

i

?

次抽簽睬辐,這樣所有參與者就總共做了

W

W次抽簽,抽簽結(jié)果將是符合二項(xiàng)分布的何吝。

接下來溉委,需要做的就是構(gòu)造這個(gè)“伯努利試驗(yàn)”,這就用到了VRF爱榕。首先瓣喊,要求每個(gè)參與者都擁有一對(duì)公私鑰,

(

p

k

i

,

s

k

i

)

(pk

i

?

,sk

i

?

)黔酥,然后藻三,為了滿足前面提到的要求洪橘,還需要定義一個(gè)種子seed,以及標(biāo)識(shí)抽簽階段的一些數(shù)據(jù)棵帽,比如round熄求。其中,需要盡可能讓參與者在開始某一輪抽簽的時(shí)候逗概,才知道所用到的seed弟晚,這個(gè)根據(jù)具體的應(yīng)用場(chǎng)景來定。

這時(shí)逾苫,就可以基于VRF構(gòu)建我們的“伯努利試驗(yàn)”了卿城。

設(shè) x 是由seed、round等組成的抽簽參數(shù)铅搓,則參與者先計(jì)算 x 的VRF哈希及證明:

h

a

s

h

,

p

i

=

V

R

F

s

k

i

(

x

)

hash,pi=VRF

sk

i

?

?

(x) 瑟押。這時(shí)得到的哈希的長(zhǎng)度是固定的,比如32字節(jié)星掰,由VRF的安全特性多望,我們知道hash是在區(qū)間

[

0

,

2

256

]

[0,2

256

]內(nèi)均勻分布的,將該哈希值變?yōu)橐粋€(gè)小數(shù)氢烘,即

d

=

h

a

s

h

2

256

d=

2

256

hash

?

怀偷,這時(shí)

d

d 就在區(qū)間

[

0

,

1

]

[0,1] 之間均勻分布。

另外威始,已知以概率 p 做 n 次伯努利試驗(yàn)枢纠,實(shí)際成功次數(shù)為 k 次的概率,計(jì)算公式如下:

(

n

k

)

p

k

(

1

?

p

)

n

?

k

(

k

n

?

)p

k

(1?p)

n?k

將 k=0...j 所對(duì)應(yīng)的概率加起來黎棠,假設(shè)用 Sum(j) 表示晋渺,我們找到一個(gè)j值,使其滿足式子

S

u

m

(

j

)

d

<

S

u

m

(

j

+

1

)

Sum(j)≤d<Sum(j+1) 脓斩,這時(shí)木西,

j

j 就是參與者的抽簽結(jié)果了。

j

=

0

j=0時(shí)表示沒抽中随静,

j

>

0

j>0時(shí)表示抽中了

j

j份權(quán)重八千。

由于用戶的權(quán)重越大,即w越大燎猛,其抽簽次數(shù)就越多恋捆,從而基于相同的概率p,得到

j

>

0

j>0 的概率也就會(huì)越大重绷,因此沸停,用戶被選中的概率是跟他們的權(quán)重是成比例的。另外昭卓,當(dāng)

j

>

0

j>0愤钾,我們可以想象成用戶有

j

j 個(gè)子用戶被抽中了瘟滨,如果是投票,就可以投

j

j票能颁。這樣一來杂瘸,w個(gè)權(quán)重為1的用戶,有j個(gè)被抽中的概率伙菊,跟1個(gè)權(quán)重為w的用戶败玉,有j個(gè)子用戶被抽中的概率,是一樣的占业。也就是說绒怨,這種抽簽是防女巫攻擊的。

最后谦疾,對(duì)于驗(yàn)證者來說,他可以基于VRF驗(yàn)證機(jī)制犬金,驗(yàn)證抽簽參與者的哈希及證明念恍,驗(yàn)證通過之后,執(zhí)行相同的抽簽計(jì)算晚顷,看結(jié)果

j

j

? 跟

j

j 是否一致峰伙。

2.1.2 抽簽算法

對(duì)應(yīng)前面的描述,抽簽算法如下:

VrfSortition

(

s

k

,

s

e

e

d

,

r

o

u

n

d

,

r

o

l

e

,

t

,

w

,

W

)

:

?

h

a

s

h

,

π

?

V

R

F

s

k

(

s

e

e

d

r

o

l

e

r

o

u

n

d

)

p

t

W

j

0

w

h

i

l

e

h

a

s

h

2

h

a

s

h

l

e

n

?

[

k

=

0

j

B

(

k

;

w

,

p

)

,

k

=

0

j

+

1

B

(

k

;

w

,

p

)

)

d

o

?

j

+

+

r

e

t

u

r

n

?

h

a

s

h

,

π

,

j

?

?

?

VrfSortition(sk,seed,round,role,t,w,W):

?hash,π?←VRF

sk

?

(seed∥role∥round)

p←

W

t

?

j←0

while

2

hashlen

hash

?

/

?

[

k=0

j

?

B(k;w,p),

k=0

j+1

?

B(k;w,p)) do

? j++

return ?hash,π,j?

?

其中该默,

s

k

sk為用戶私鑰瞳氓,

r

o

l

e

role 參數(shù)和

r

o

u

n

d

round 參數(shù)用于區(qū)分共識(shí)過程中的角色與階段,一個(gè)閾值 t 用于確定本次抽簽所期望選中的用戶數(shù)栓袖。

h

a

s

h

,

π

hash,π 分別為VRF哈希值及證明匣摘。

3.2 抽簽驗(yàn)證算法

驗(yàn)證過程算法描述如下:

VrfVerifySortition

(

p

k

,

s

e

e

d

,

r

o

u

n

d

,

r

o

l

e

,

π

,

t

,

w

,

W

)

:

i

f

?

V

e

r

i

f

y

V

R

F

p

k

(

h

a

s

h

,

π

,

s

e

e

d

r

o

l

e

r

o

u

n

d

)

t

h

e

n

r

e

t

u

r

n

0

;

p

t

W

j

0

w

h

i

l

e

h

a

s

h

2

h

a

s

h

l

e

n

?

[

k

=

0

j

B

(

k

;

w

,

p

)

,

k

=

0

j

+

1

B

(

k

;

w

,

p

)

)

d

o

?

j

+

+

r

e

t

u

r

n

j

?

?

VrfVerifySortition(pk,seed,round,role,π,t,w,W):

if?VerifyVRF

pk

?

(hash,π,seed∥role∥round) then return 0;

p←

W

t

?

j←0

while

2

hashlen

hash

?

/

?

[

k=0

j

?

B(k;w,p),

k=0

j+1

?

B(k;w,p)) do

? j++

return j

?

驗(yàn)證過程先驗(yàn)證

π

π 是否合法有效,然后依據(jù)與抽簽類似的過程獲得用戶被選中的子用戶數(shù)(0表示根本沒被抽中)裹刮,從而與用戶隨消息廣播出來的j值做比較以驗(yàn)證其正確性音榜。

2.2 抽簽結(jié)果的概率分布

根據(jù)前面的描述,我們知道整個(gè)VRF密碼學(xué)抽簽算法捧弃,是概率性的赠叼,概率符合二項(xiàng)分布。也就是說违霞,給定期望值 t 嘴办,實(shí)際結(jié)果 k 是不固定的。在這種情況下买鸽,密碼學(xué)抽簽怎么應(yīng)用與具體的場(chǎng)景涧郊,那就得具體情況具體分析了。

在這里癞谒,我們先看一下如何計(jì)算抽簽結(jié)果的概率分布底燎。 如果總權(quán)重 W 是比較小的刃榨,從而概率 p 是比較大的,那這時(shí)直接用二項(xiàng)分布公式進(jìn)行計(jì)算就可以了双仍。

但如果 W 很大枢希,那就要考慮別的方式了。 首先朱沃,再列一下二項(xiàng)分布概率公式(為了和Algorand保持一致苞轿,下面用 U 代替 W):

(

U

K

)

p

K

(

1

?

p

)

U

?

K

(

K

U

?

)p

K

(1?p)

U?K

將其展開得如下式子:

U

!

K

!

(

U

?

K

)

!

(

t

U

)

K

(

1

?

t

U

)

U

?

K

=

U

(

U

?

K

+

1

)

U

K

t

K

K

!

(

1

?

t

U

)

U

?

K

K!(U?K)!

U!

?

(

U

t

?

)

K

(1?

U

t

?

)

U?K

=

U

K

U…(U?K+1)

?

?

K!

t

K

?

(1?

U

t

?

)

U?K

由于K是個(gè)比較小的值,當(dāng)U很大時(shí)逗物,下面的等式是可以接受的搬卒;或者換個(gè)方式說,當(dāng)U大到我們可以接受如下式子的時(shí)候翎卓,U就足夠大了:

U

(

U

?

K

+

1

)

U

K

=

1

U

K

U…(U?K+1)

?

=1

另外契邀,U足夠大時(shí),我們肯定還能接受如下等式失暴。其中分子轉(zhuǎn)換成常數(shù)e的指數(shù)坯门,這是根據(jù)指數(shù)函數(shù)的定義來的。

(

1

?

t

U

)

U

?

K

=

(

1

?

t

U

)

U

(

1

?

t

U

)

K

=

e

?

t

1

=

e

?

t

(1?

U

t

?

)

U?K

=

(1?

U

t

?

)

K

(1?

U

t

?

)

U

?

=

1

e

?t

?

=e

?t

綜合起來就得到當(dāng)U很大逗扒,且期望為t時(shí)古戴,實(shí)際抽簽結(jié)果為K的概率為:

t

K

K

!

e

?

t

(1)

K!

t

K

?

e

?t

(1)

2.3 在區(qū)塊鏈中的應(yīng)用及要解決的問題

Algorand項(xiàng)目開創(chuàng)了密碼學(xué)抽簽算法在區(qū)塊鏈中的應(yīng)用,主要用在兩種場(chǎng)景下:(1)通過抽簽獲得區(qū)塊提議者矩肩;(2)通過抽簽獲得區(qū)塊驗(yàn)證委員會(huì)现恼。

對(duì)于第一種場(chǎng)景,期望值 t 應(yīng)該是比較小的黍檩,主要需要考慮的是叉袍,實(shí)際抽簽結(jié)果 k 應(yīng)該以很高的概率大于0,同時(shí)k又不應(yīng)該很大建炫。Algorand給出了一個(gè)值 t = 26畦韭,這時(shí)k在1到70之間的概率為:

k

=

1

70

2

6

k

k

!

e

?

26

>

1

?

1

0

?

11

k=1

70

?

?

k!

26

k

?

e

?26

>1?10

?11

對(duì)于第二種場(chǎng)景,就比較復(fù)雜了肛跌。除了單純抽簽概率上的考慮艺配,還要考慮網(wǎng)絡(luò)中惡意用戶或者說拜占庭節(jié)點(diǎn)的影響,以及投票通過的閾值衍慎。

根據(jù)Algorand的分析转唉,假設(shè)網(wǎng)絡(luò)中誠實(shí)用戶所占的權(quán)重比例為 h,委員會(huì)期望權(quán)重為 t 稳捆,由上面的公式(1)赠法,可以得到最終誠實(shí)權(quán)重為k的概率為:

(

h

t

)

K

K

!

e

?

h

t

(2)

K!

(ht)

K

?

e

?ht

(2)

在一個(gè)存在拜占庭節(jié)點(diǎn)的投票委員會(huì)中,設(shè)投票通過的閾值(比例)為 r(也就是說票數(shù)超過 t * r 就通過),則要保證系統(tǒng)的活性即能完成投票砖织,需要滿足下面的條件1:

條件1:

#

g

o

o

d

>

t

?

r

#good>t?r

>

#

g

o

o

d

#good 表示誠實(shí)票數(shù)

通過上面的概率公式款侵,這個(gè)條件不滿足的概率是可以計(jì)算出來的,不滿足的概率為:

K

=

0

t

?

r

(

h

t

)

K

K

!

e

?

h

t

K=0

t?r

?

?

K!

(ht)

K

?

e

?ht

另外侧纯,考慮拜占庭節(jié)點(diǎn)新锈,要保證系統(tǒng)的安全性,假設(shè) #bad 表示不誠實(shí)的票數(shù)眶熬,那么要保證安全性就要滿足下面的條件:

條件2:

1

2

#

g

o

o

d

+

#

b

a

d

t

?

r

?

2

1

?

#good+#bad≤t?r

對(duì)于條件2妹笆,抽取 #good = K 并且 #bad = L 的概率如下:

(

h

t

)

K

K

!

e

?

h

t

(

(

1

?

h

)

t

)

L

L

!

e

?

(

1

?

h

)

t

K!

(ht)

K

?

e

?ht

?

L!

((1?h)t)

L

?

e

?(1?h)t

條件2不滿足的概率是不大好算的,實(shí)際評(píng)估時(shí)娜氏,我們可以先計(jì)算條件2滿足的概率宝恶,公式為:

K

=

0

2

t

?

r

L

=

0

2

?

t

?

r

?

K

2

(

h

t

)

K

K

!

e

?

h

t

(

(

1

?

h

)

t

)

L

L

!

e

?

(

1

?

h

)

t

K=0

2t?r

?

?

L=0

2

2?t?r?K

?

?

?

K!

(ht)

K

?

e

?ht

?

L!

((1?h)t)

L

?

e

?(1?h)t

用 1.0 減去計(jì)算結(jié)果衣吠,可得到條件2被違背的概率崩泡。 > 當(dāng)然弄息,先計(jì)算概率大的情況時(shí),計(jì)算精度會(huì)降低绵疲。

上面兩個(gè)條件均不滿足的概率需要極小極小狸涌,才可以認(rèn)為不會(huì)影響系統(tǒng)的活性和安全性。舉個(gè)淺顯的例子就是:假設(shè)定下來 t = 100, r = 0.7, h = 0.8最岗。那么投票閾值就是70,但是由于抽簽結(jié)果的概率性朝捆,那么如果抽簽結(jié)果不足70般渡,那就完不成投票了,如果抽簽結(jié)果大于140芙盘,那在網(wǎng)絡(luò)不好的情況下是不是可能出現(xiàn)分歧(分叉)呢驯用?另外,由于總體誠實(shí)比例只有0.8儒老,那也有可能抽簽結(jié)果中不誠實(shí)數(shù)直接就超過70蝴乔,那也可能搞亂整個(gè)投票,這時(shí)驮樊,確切地說就是條件2的情況薇正。

綜上,理論上來說囚衔,活性和安全性都是無法絕對(duì)保障的挖腰,但是可以考慮一個(gè)很小的概率 F(如

F

=

1

0

?

18

F=10

?18

),當(dāng)兩個(gè)條件被違背的概率均小于F時(shí)练湿,我們可以認(rèn)為這樣的事件基本不會(huì)發(fā)生猴仑。

這個(gè) F 跟 t,r,h都有一定的負(fù)相關(guān)關(guān)系,就是t,r,h中任意兩個(gè)值不變的情況下肥哎,第三個(gè)值越大辽俗,F(xiàn)就越小疾渣。例如,r,h不變時(shí)崖飘,t越大榴捡,F(xiàn)越小。

還有一個(gè)問題坐漏,t也不是越大越好的薄疚。t很大時(shí),雖然可以使F很小赊琳,但是在一個(gè)分布式網(wǎng)絡(luò)中街夭,t越大則完成投票所需要的通信量也就越大,所以這需要權(quán)衡考慮躏筏。

以上板丽,就是本文分享的所有內(nèi)容了。至于Algorand項(xiàng)目中是如何權(quán)衡相關(guān)問題的趁尼,敬請(qǐng)關(guān)注后續(xù)分享埃碱。

參考

Verifiable Random Functions

https://www.odaily.com/post/5133096

https://tools.ietf.org/pdf/draft-irtf-cfrg-vrf-04.pdf

https://datatracker.ietf.org/doc/draft-irtf-cfrg-vrf/

[GMR88] Shafi Goldwasser, Silvio Micali, and Ronald L. Rivest. A digital signature scheme secure against adaptive chosen-message attacks. SIAM Journal on Computing, 17(2):281–308, April 1988.

[GMR89] Shafi Goldwasser, Silvio Micali, and Charles Rack- off. The knowledge complexity of interactive proof systems. SIAM Journal on Computing, 18(1):186– 208, February 1989.

curve25519

https://en.wikipedia.org/wiki/Daniel_J._Bernstein

https://en.wikipedia.org/wiki/Bernstein_v._United_States

https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number

http://cr.yp.to/djb.html

http://cr.yp.to/ecdh.html

https://safecurves.cr.yp.to/

https://ianix.com/pub/curve25519-deployment.html

https://en.wikipedia.org/wiki/Dual_EC_DRBG

Algorand- Scaling Byzantine Agreements for Cryptocurrencies


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酥泞,隨后出現(xiàn)的幾起案子砚殿,更是在濱河造成了極大的恐慌,老刑警劉巖芝囤,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件似炎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悯姊,警方通過查閱死者的電腦和手機(jī)羡藐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悯许,“玉大人仆嗦,你說我怎么就攤上這事∠群荆” “怎么了瘩扼?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)启上。 經(jīng)常有香客問我邢隧,道長(zhǎng),這世上最難降的妖魔是什么冈在? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任倒慧,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纫谅。我一直安慰自己炫贤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布付秕。 她就那樣靜靜地躺著兰珍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪询吴。 梳的紋絲不亂的頭發(fā)上掠河,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音猛计,去河邊找鬼唠摹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奉瘤,可吹牛的內(nèi)容都是我干的勾拉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盗温,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼藕赞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卖局,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤斧蜕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后砚偶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惩激,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蟹演,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顷蟀。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酒请,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸣个,到底是詐尸還是另有隱情羞反,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布囤萤,位于F島的核電站昼窗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涛舍。R本人自食惡果不足惜澄惊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掸驱,春花似錦肛搬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鬼癣,卻和暖如春陶贼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背待秃。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工拜秧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锥余。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓腹纳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親驱犹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘲恍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,031評(píng)論 0 2
  • 一年級(jí)語文上冊(cè)生字表 生字表一(共400字) 啊(ā)愛(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 2,796評(píng)論 0 6
  • 不支持上傳文件,所以就復(fù)制過來了雄驹。作者信息什么的都沒刪佃牛。對(duì)前端基本屬于一竅不通,所以沒有任何修改医舆,反正用著沒問題就...
    全棧在路上閱讀 1,961評(píng)論 0 2
  • 購置半畝地俘侠, 種菜很好奇。 播種二十天蔬将, 雜草豐長(zhǎng)齊爷速。 疏菜氣難喘, 小苗受委屈霞怀。 玉米排隊(duì)站惫东, 猶如小兄弟。 雜...
    大度做人閱讀 723評(píng)論 3 8
  • 從七月開始到現(xiàn)在九月九毙石,我已經(jīng)堅(jiān)持健身兩個(gè)月了廉沮。 健身慢慢已經(jīng)變成了一種習(xí)慣,好像健身是每天必做的一件事徐矩。 我是運(yùn)...
    大胃魚閱讀 1,545評(píng)論 13 6