崔懷勇,張紹華,李超,戴炳榮
(1.上海海洋大學(xué)信息學(xué)院,上海 201306;2.上海計(jì)算機(jī)軟件技術(shù)開(kāi)發(fā)中心,上海 201112;3.上海商學(xué)院, 上海 200235)
區(qū)塊鏈為多方參與者提供了一種嶄新的信任機(jī)制,這種信任機(jī)制打破了現(xiàn)有的信任模式[1],使得區(qū)塊鏈技術(shù)在金融、政務(wù)民生、供應(yīng)鏈、數(shù)字版權(quán)等眾多領(lǐng)域前景廣闊。隨著區(qū)塊鏈技術(shù)在加密支付、博彩、游戲等場(chǎng)景中應(yīng)用的普及,去中心化應(yīng)用程序(Dapp)經(jīng)常需要調(diào)用區(qū)塊鏈智能合約獲取重要的鏈下數(shù)據(jù)[2-3]。智能合約作為區(qū)塊鏈系統(tǒng)的一種特殊數(shù)據(jù)形式,可以寫(xiě)入?yún)^(qū)塊鏈。當(dāng)滿足條件時(shí),智能合約可以自動(dòng)執(zhí)行,確保鏈上數(shù)據(jù)存儲(chǔ)、讀取、執(zhí)行等各流程透明、不可竄改、可追溯[4]。區(qū)塊鏈可以保證鏈上數(shù)據(jù)交互過(guò)程安全可信,然而并沒(méi)有辦法保證上鏈數(shù)據(jù)是可靠的。為了保證上鏈數(shù)據(jù)可靠可信,可以設(shè)置一種來(lái)協(xié)調(diào)區(qū)塊鏈智能合約和鏈下世界的“橋梁”,即區(qū)塊鏈預(yù)言機(jī),將可信外部數(shù)據(jù)引入?yún)^(qū)塊鏈系統(tǒng)[5]。預(yù)言機(jī)具有可審計(jì)、不可竄改、服務(wù)穩(wěn)定等特點(diǎn),主要工作是為鏈下數(shù)據(jù)提供安全性驗(yàn)證,幫助鏈上智能合約訪問(wèn)、獲取正確可靠的鏈外數(shù)據(jù)。根據(jù)節(jié)點(diǎn)數(shù)量的不同,預(yù)言機(jī)分為中心化和去中心化兩類[6]。中心化預(yù)言機(jī)直接將數(shù)據(jù)提供給區(qū)塊鏈智能合約,可信度完全取決于平臺(tái)公信力,且容易發(fā)生單點(diǎn)故障。去中心化預(yù)言機(jī)由多個(gè)節(jié)點(diǎn)達(dá)成分布式共識(shí)來(lái)保證數(shù)據(jù)正確可信,雖然其能夠降低單個(gè)預(yù)言機(jī)作惡的風(fēng)險(xiǎn),但是數(shù)據(jù)的隱私性、時(shí)效性以及執(zhí)行效率是當(dāng)前需要解決的難題。
近年來(lái),許多國(guó)內(nèi)外學(xué)者對(duì)如何解決可信數(shù)據(jù)上鏈、鏈上鏈下數(shù)據(jù)交互的問(wèn)題進(jìn)行了深入研究。Provable[7]屬于中心化預(yù)言機(jī)解決方案,依托Amazon云主機(jī)和Google 軟件遠(yuǎn)程證明技術(shù)為智能合約提供安全的數(shù)據(jù)傳輸,但是其數(shù)據(jù)源不可信,可擴(kuò)展性差。ChainLink[8]是以太坊區(qū)塊鏈上最先提出的去中心化預(yù)言機(jī)方案,其通過(guò)信譽(yù)機(jī)制和聚合模型將鏈上智能合約和鏈下分布式數(shù)據(jù)源相結(jié)合,由于該方案的協(xié)議和簽名方案是交互式的,導(dǎo)致分布式數(shù)據(jù)源聚合成本高,可擴(kuò)展性差。Town Crier[9]是一種可驗(yàn)證數(shù)據(jù)供應(yīng)區(qū)塊鏈預(yù)言機(jī)系統(tǒng),其高度依賴硬件可信執(zhí)行環(huán)境,易遭受安全漏洞攻擊。TLS-N[10]是一個(gè)基于內(nèi)容提取簽名的區(qū)塊鏈預(yù)言機(jī),其提供傳輸層安全(TLS)的隱私保護(hù),基于區(qū)塊鏈智能合約生成非交互式會(huì)話證明,但是TLS-N 方案通信開(kāi)銷較高,且可部署性差。Augur[11]為在線交易預(yù)測(cè)市場(chǎng)提供了一個(gè)低成本的Oracle 平臺(tái),其激勵(lì)結(jié)構(gòu)旨在鼓勵(lì)用戶保持誠(chéng)實(shí),并報(bào)告準(zhǔn)確結(jié)果,以實(shí)現(xiàn)利益最大化,但是,其共識(shí)機(jī)制導(dǎo)致預(yù)測(cè)效率低下,預(yù)測(cè)精度受到平臺(tái)規(guī)模的限制,而且其代幣分布不均勻還會(huì)影響預(yù)測(cè)結(jié)果的可信度。文獻(xiàn)[12]提出一種使用BLS 聚合簽名的多預(yù)言機(jī)解決方案,并設(shè)置激勵(lì)機(jī)制,確保只有誠(chéng)實(shí)預(yù)言機(jī)群體才能獲得獎(jiǎng)勵(lì)[13]。該方案去中心化程度高,存儲(chǔ)成本較低,但是其采用鏈上聚合的方式,且BLS 簽名算法配對(duì)效率低下,計(jì)算成本和時(shí)間成本較高。文獻(xiàn)[14]使用BLS 門(mén)限聚合簽名在鏈外生成一個(gè)群體私鑰,然后對(duì)上鏈數(shù)據(jù)進(jìn)行群體簽名,并使用門(mén)限聚合機(jī)制降低了存儲(chǔ)空間開(kāi)銷和通信負(fù)載,其分布式密鑰生成協(xié)議中使用了可驗(yàn)證密鑰分享技術(shù),以解決密鑰分發(fā)者作惡的問(wèn)題[15]。但是,該方案簽名驗(yàn)證難度高,導(dǎo)致方案整體時(shí)間成本和gas 消耗量較高。文獻(xiàn)[16]提出一種基于Schnorr門(mén)限聚合簽名的預(yù)言機(jī)方案,由于Schnorr 門(mén)限聚合簽名計(jì)算量較小,且存儲(chǔ)空間開(kāi)銷和通信負(fù)載較低,使得方案整體成本較低。但是,門(mén)限聚合簽名有效的前提條件是密鑰分發(fā)者誠(chéng)實(shí),如果密鑰分發(fā)者作惡則容易造成簽名無(wú)效,可能導(dǎo)致正確數(shù)據(jù)無(wú)法上鏈。此外,該方案未考慮到Schnorr 簽名的隨機(jī)數(shù)安全性問(wèn)題,攻擊者容易推測(cè)出私鑰,造成密鑰泄露[17-18],并且該方案簽名期間所有預(yù)言機(jī)直接將數(shù)據(jù)共享,容易發(fā)生數(shù)據(jù)泄漏問(wèn)題。
當(dāng)下前沿的區(qū)塊鏈預(yù)言機(jī)研究方案基本采用門(mén)限聚合簽名技術(shù)聚合成一個(gè)群體私鑰以完成對(duì)數(shù)據(jù)的群體簽名。為了解決聚合簽名密鑰分發(fā)者作惡?jiǎn)栴},雖然已經(jīng)有方案在分布式密鑰生成協(xié)議中使用可驗(yàn)證密鑰分享技術(shù),但是由于該類方案使用的BLS 簽名算法雙線性配對(duì)構(gòu)造復(fù)雜,大幅提升了方案的整體成本。相較于BLS 簽名算法,Schnorr 簽名算法計(jì)算量小、效率高,但是其高度依賴隨機(jī)數(shù)的安全性,需要保證隨機(jī)數(shù)足夠“隨機(jī)”,不能被重復(fù)使用且不能被預(yù)測(cè)。
針對(duì)目前主流區(qū)塊鏈預(yù)言機(jī)方案存在的問(wèn)題,綜合時(shí)間成本、計(jì)算成本和容錯(cuò)率等方面考慮,本文基于Schnorr 門(mén)限聚合簽名,提出一種改進(jìn)的區(qū)塊鏈預(yù)言機(jī)方案。通過(guò)引入Feldman 可驗(yàn)證秘密分享技術(shù),密鑰分發(fā)者在分發(fā)密鑰的同時(shí)提供密鑰分片對(duì)應(yīng)的承諾,預(yù)言機(jī)接收到密鑰分發(fā)者發(fā)送的密鑰分片后可以利用承諾驗(yàn)證密鑰分片的正確性,以解決密鑰分發(fā)者作惡的問(wèn)題;通過(guò)引入可驗(yàn)證隨機(jī)函數(shù),保證Schnorr 簽名過(guò)程中產(chǎn)生的隨機(jī)數(shù)足夠“隨機(jī)”,防止隨機(jī)數(shù)被重復(fù)使用或隨機(jī)數(shù)可以被預(yù)測(cè)導(dǎo)致的密鑰泄露問(wèn)題;在數(shù)據(jù)提交階段,驗(yàn)證成功的預(yù)言機(jī)按照驗(yàn)證順序提交數(shù)據(jù),以避免數(shù)據(jù)泄露問(wèn)題;通過(guò)設(shè)置預(yù)言機(jī)信譽(yù)和激勵(lì)機(jī)制,對(duì)參與的預(yù)言機(jī)進(jìn)行獎(jiǎng)懲評(píng)定,保證信譽(yù)較好的預(yù)言機(jī)參與簽名和數(shù)據(jù)傳輸過(guò)程。最后通過(guò)仿真實(shí)驗(yàn)與分析,驗(yàn)證該方案的安全性、容錯(cuò)率和數(shù)據(jù)傳輸效率。
Schnorr 簽名算法基于離散對(duì)數(shù)的困難問(wèn)題[19-20],且其是線性的,可以將多個(gè)參與方的簽名聚合成一個(gè)簽名,聚合簽名驗(yàn)證通過(guò),則代表簽名群體中所有簽名全部驗(yàn)證通過(guò),因此,其計(jì)算量小,速度快。
Schnorr 簽名有多種實(shí)現(xiàn)方式,主要包括基于指數(shù)運(yùn)算和基于橢圓曲線運(yùn)算2種方式。以基于橢圓曲線運(yùn)算方式[21]為例,橢圓曲線G定義在有限域GF(p)上,G的階為素?cái)?shù)p。簽名過(guò)程包括以下步驟:
1)選擇素?cái)?shù)p、q,且q是p-1 的素因子。
2)sk 是用戶的簽名私鑰,根據(jù)Q=skG(modp)生成對(duì)應(yīng)的驗(yàn)證公鑰Q。
3)選擇一個(gè)隨機(jī)整數(shù)k,使得R=kG(modq),R是橢圓曲線G上的一個(gè)隨機(jī)點(diǎn)。
4)將R、公鑰Q和待簽名數(shù)據(jù)m進(jìn)行串聯(lián),并計(jì)算Hash 值e,e=H(m|R|Q)。
5)計(jì)算s=(R+sk*e)(modq),生成(R,s)作為對(duì)數(shù)據(jù)m的簽名結(jié)果。
6)在驗(yàn)證簽名時(shí),若sG=R+H(m|R|Q)Q(modq)成立,則簽名合法。
Feldman 秘密分享技術(shù)[22]將一個(gè)秘密分成若干個(gè)秘密碎片,并同時(shí)提供秘密碎片對(duì)應(yīng)的承諾,然后將秘密碎片和承諾分給n個(gè)參與者保管,當(dāng)有t(0 1.2.1 秘密分發(fā) 秘密分發(fā)者隨機(jī)選取t-1 個(gè)隨機(jī)數(shù),記為a1,a2,…,at-1,構(gòu)造如下多項(xiàng)式: 其中:S為秘密;p為素?cái)?shù)。秘密分發(fā)者在f(x)曲線上任意選取n個(gè)不同的非零點(diǎn)(xi,f(xi)),并計(jì)算承諾c1=(modp),c2=(modp),…,ci=(modp),然后將秘密碎片f(xi)和承諾ci分發(fā)給n個(gè)參與者。當(dāng)?shù)趇個(gè)參與者收到秘密碎片f(xi)時(shí),可以列出驗(yàn)證等式若秘密分發(fā)者給出的承諾不是多項(xiàng)式的真實(shí)系數(shù),則驗(yàn)證失敗。 1.2.2 秘密恢復(fù) 只需要t個(gè)簽名者O1,O2,…,Ot根據(jù)秘密分享者選取的x1,x2,…,xt,通過(guò)Lagrange 插值法重構(gòu)多項(xiàng)式: 可驗(yàn)證隨機(jī)函數(shù)(VRF)由文獻(xiàn)[24]提出,是一種具備驗(yàn)證功能的偽隨機(jī)函數(shù)。對(duì)于唯一輸入seed 和輸入者公鑰pk,VRF 會(huì)產(chǎn)生一個(gè)隨機(jī)數(shù)k和k的證明proof。此外,VRF 運(yùn)用非交互的零知識(shí)證明,可以通過(guò)產(chǎn)生的隨機(jī)數(shù)k、證明proof 和輸入(seed,pk)確定隨機(jī)數(shù)k是否由該輸入生成。目前,VRF 主要有2 種實(shí)現(xiàn)方式,分別是基于RSA 公鑰體制[25]和基于橢圓曲線公鑰體制[26]。以基于橢圓曲線公鑰體制的VRF 算法為例,橢圓曲線G定義在有限域GF(p)上,G的階為素?cái)?shù)p。生成可驗(yàn)證隨機(jī)數(shù)及其證明的步驟如下: 1)選擇素?cái)?shù)p、q,且q是p-1 的素因子。 2)根據(jù)私鑰sk 生成VRF 密鑰x,并計(jì)算VRF 公鑰Y。 3)選擇一個(gè)隨機(jī)整數(shù)ρi,ρi∈(0,q)。 4)根據(jù)公鑰Y、隨機(jī)整數(shù)ρi,映射到橢圓曲線中的點(diǎn)H,并將其轉(zhuǎn)化為字符串g。 5)根據(jù)密鑰x和參數(shù)g生成可驗(yàn)證隨機(jī)數(shù)k。 6)計(jì)算GGamma=x*H。 7)將點(diǎn)H、參數(shù)GGamma哈希為整數(shù)c。 8)計(jì)算s=(k+c*x)(modq)。 9)將整數(shù)c和s串聯(lián),作為對(duì)可驗(yàn)證隨機(jī)數(shù)k的證明proof。 由上述可驗(yàn)證隨機(jī)數(shù)的生成步驟可知,VRF 的輸入值是由用戶私鑰派生的密鑰x,對(duì)于唯一的輸入x會(huì)生成唯一的隨機(jī)數(shù)k,可以有效解決Schnorr 簽名過(guò)程中隨機(jī)數(shù)重復(fù)的問(wèn)題。此外,對(duì)于算力有限的其他攻擊者,無(wú)法從輸入中獲取任何有效信息從而預(yù)測(cè)出隨機(jī)數(shù)。因此,VRF 可以有效解決Schnorr 簽名隨機(jī)數(shù)重復(fù)、隨機(jī)數(shù)可被預(yù)測(cè)的問(wèn)題。 本文所提方案的基本框架如圖1 所示,主要包括由用戶和預(yù)言機(jī)智能合約組成的鏈上組件、由多預(yù)言機(jī)和多數(shù)據(jù)源組成的鏈下組件。用戶執(zhí)行鏈上Dapp 的邏輯,向預(yù)言機(jī)智能合約發(fā)送包含對(duì)請(qǐng)求數(shù)據(jù)的描述和對(duì)鏈下數(shù)據(jù)源或預(yù)言機(jī)的要求的數(shù)據(jù)請(qǐng)求,預(yù)言機(jī)智能合約收到請(qǐng)求后根據(jù)需求安排多預(yù)言機(jī)獲取數(shù)據(jù)并簽名。多預(yù)言機(jī)節(jié)點(diǎn)從多數(shù)據(jù)源采集數(shù)據(jù),以避免單點(diǎn)故障和作惡事件的發(fā)生。 假設(shè)總數(shù)為n的預(yù)言機(jī)簽名群體中惡意節(jié)點(diǎn)數(shù)f不超過(guò)(n-1)/2。設(shè)門(mén)限值為t=f+1,當(dāng)提供大于等于t個(gè)有效密鑰分片時(shí),即可恢復(fù)群體私鑰從而完成數(shù)據(jù)簽名。 用戶向預(yù)言機(jī)智能合約發(fā)送請(qǐng)求,請(qǐng)求獲取所需的鏈下數(shù)據(jù)。預(yù)言機(jī)智能合約收到請(qǐng)求后將其發(fā)送給每個(gè)預(yù)言機(jī),并隨機(jī)選擇一個(gè)Oracle 作為密鑰分發(fā)預(yù)言機(jī)。預(yù)言機(jī)智能合約設(shè)置字段Score,Scorei表示預(yù)言機(jī)節(jié)點(diǎn)的信譽(yù)值(初始值為1,每成功完成一次任務(wù)信譽(yù)值加1),參與簽名的預(yù)言機(jī)信譽(yù)值均須大于0。同時(shí)設(shè)置預(yù)言機(jī)是否誠(chéng)實(shí)的標(biāo)志位flagi,預(yù)言機(jī)誠(chéng)實(shí)時(shí)其為true,否則為false。 設(shè)sk 為群體的私鑰,群體公鑰為Q=skG(modp)。預(yù)言機(jī)群體O={Oracle1,Oracle2,…,}Oraclen,門(mén)限值為t(t 預(yù)言機(jī)群體中的各預(yù)言機(jī)計(jì)算承諾c1=(modp),c2=(modp),…,cn=(modp)。其中:f0,f1,…,ft-1表示隨機(jī)數(shù);q表示大素?cái)?shù);f0=f(0)=sk 作為群體私鑰被n個(gè)群組成員共享;x1,x2,…,xn表示n個(gè)互不相同的非零元素。密鑰分發(fā)者將(x1,f(x1),c1),(x2,f(x2),c2),…,(xn,f(xn),cn) 作為密鑰分片,將密鑰分片及其對(duì)應(yīng)的承諾分發(fā)給群組中的n個(gè)預(yù)言機(jī)節(jié)點(diǎn)Oracle1,Oracle2,…,Oraclen,其中,c1,c2,…,cn公開(kāi),f(xi)即為分發(fā)給每個(gè)節(jié)點(diǎn)的私鑰碎片ski。 密鑰分發(fā)者將私鑰分片和承諾分發(fā)給參與的預(yù)言機(jī),預(yù)言機(jī)接收到預(yù)言機(jī)智能合約請(qǐng)求后,通過(guò)鏈外API 從多個(gè)數(shù)據(jù)源獲取數(shù)據(jù),將大多數(shù)數(shù)據(jù)源的相同數(shù)據(jù)視為正確數(shù)據(jù),同時(shí)根據(jù)=(modp)驗(yàn)證密鑰分發(fā)者發(fā)送的承諾,從而驗(yàn)證密鑰分片ski:若密鑰分片不正確,則向預(yù)言機(jī)智能合約發(fā)送密鑰分發(fā)者不誠(chéng)實(shí)的消息,當(dāng)預(yù)言機(jī)智能合約收到t個(gè)預(yù)言機(jī)發(fā)送的密鑰分發(fā)者不誠(chéng)實(shí)(即flagshare為false)的消息時(shí),重新選取密鑰分發(fā)預(yù)言機(jī)進(jìn)行密鑰分發(fā),同時(shí)先前不誠(chéng)實(shí)的密鑰分發(fā)者信譽(yù)值扣除10,并向預(yù)言機(jī)參與群體廣播原來(lái)分發(fā)的密鑰作廢的消息,所有預(yù)言機(jī)收到消息后達(dá)成一致性共識(shí),方案回到初始化階段;若驗(yàn)證無(wú)誤,則預(yù)言機(jī)智能合約會(huì)將密鑰分發(fā)預(yù)言機(jī)的信譽(yù)值加1,并計(jì)算公鑰Qi=skiG。 Oraclei選擇隨機(jī)數(shù)ρi,ρi∈[1,n-1],利用基于橢圓曲線的可驗(yàn)證隨機(jī)函數(shù)生成可驗(yàn)證隨機(jī)數(shù)ki,然后計(jì)算ri=kiG(modp)。由于VRF 生成算法的輸入值是隨機(jī)數(shù)ρi和由Oraclei私鑰ski派生出來(lái)的密鑰x,因此最終生成的每個(gè)隨機(jī)數(shù)ki是唯一的,且可以驗(yàn)證隨機(jī)數(shù)ki的生成者,保證敵手不可偽造??沈?yàn)證隨機(jī)數(shù)及其證明生成算法如算法1 所示。 算法1可驗(yàn)證隨機(jī)數(shù)及其證明生成算法 各預(yù)言機(jī)Oraclei計(jì)算哈希值ei=H(m|ri)和簽名si=ki+ski H(m|r|Qi)(modq),然后相互交換公鑰Qi和ri,最后Oraclei對(duì)數(shù)據(jù)m的簽名對(duì)為(ri,si)。預(yù)言機(jī)智能合約選取信譽(yù)值最高的節(jié)點(diǎn)成為簽名聚合預(yù)言機(jī)(起始預(yù)言機(jī)信譽(yù)值都為0 時(shí),隨機(jī)選取預(yù)言機(jī)作為簽名聚合預(yù)言機(jī))。Oraclei將簽名集合(Qi,si,ci,ei,IDi)發(fā)送給簽名聚合預(yù)言機(jī)。 簽名聚合預(yù)言機(jī)接收各預(yù)言機(jī)傳送來(lái)的簽名集合(Qi,si,ci,ei,IDi),每接收一個(gè)簽名集合,先計(jì)算=si-(ei+ri)Qi,驗(yàn)證=ri(modq)是否成立,成立則請(qǐng)求該預(yù)言機(jī)返回獲取到的數(shù)據(jù)mi。若有t個(gè)預(yù)言機(jī)身份驗(yàn)證失敗,則向預(yù)言機(jī)智能合約發(fā)送請(qǐng)求,請(qǐng)求重啟簽名過(guò)程(若有t個(gè)預(yù)言機(jī)身份驗(yàn)證失敗,說(shuō)明惡意預(yù)言機(jī)節(jié)點(diǎn)超過(guò)半數(shù),超過(guò)方案的容錯(cuò)率)。當(dāng)收到t(t 算法2簽名接收數(shù)據(jù)驗(yàn)證算法 要恢復(fù)出群體私鑰sk 進(jìn)行門(mén)限聚合簽名,只需要將聚合簽名群體私鑰集合SKa通過(guò)Lagrange 插值法重構(gòu)多項(xiàng)式: 預(yù)言機(jī)智能合約利用群體公鑰對(duì)發(fā)送來(lái)的群體簽名和數(shù)據(jù)進(jìn)行檢驗(yàn),從而確認(rèn)sG=R+H(m|R|Q)Q(modq)是否成立,成立即簽名有效,傳遞正確數(shù)據(jù)和群體簽名給用戶。預(yù)言機(jī)智能合約中設(shè)置了信譽(yù)機(jī)制和激勵(lì)機(jī)制算法。對(duì)于選定的密鑰分發(fā)預(yù)言機(jī),當(dāng)其正確分發(fā)密鑰時(shí),信譽(yù)值加1,當(dāng)其作惡導(dǎo)致方案回到起點(diǎn)重新選取密鑰分發(fā)者時(shí),給予其信譽(yù)值扣除10 的懲罰。對(duì)于參與獲取數(shù)據(jù)并簽名的預(yù)言機(jī)來(lái)說(shuō),當(dāng)其提交正確數(shù)據(jù)時(shí),信譽(yù)值加1;否則,給予其扣除信譽(yù)值1 并設(shè)置20 ms 延時(shí)的懲罰。信譽(yù)與激勵(lì)機(jī)制如算法3 所示。 算法3信譽(yù)與激勵(lì)機(jī)制 本文方案將可驗(yàn)證隨機(jī)函數(shù)、Feldman 可驗(yàn)證秘密分享技術(shù)與Schnorr 門(mén)限聚合簽名相結(jié)合,安全性基于橢圓曲線離散對(duì)數(shù)問(wèn)題的困難性。為了分析方案的安全性,研究各種攻擊及其可能產(chǎn)生的后果,如一般性偽造攻擊、密鑰分發(fā)者攻擊、隨機(jī)數(shù)攻擊。 3.1.1 防一般性偽造攻擊 由于本文方案使用了Schnorr 門(mén)限聚合簽名,對(duì)于每個(gè)預(yù)言機(jī) Oraclei的簽名si=ki+ski H(m|r|Qi)(modq),其驗(yàn)證方程為si-(ei+ri)Qi=ri(modq)。若存在攻擊者A 冒充預(yù)言機(jī)Oraclei向簽名聚合預(yù)言機(jī)發(fā)送偽造的數(shù)據(jù)和簽名,但是其無(wú)法獲得預(yù)言機(jī)Oraclei的私鑰ski,因此其無(wú)法生成偽造的簽名。因此,在本文方案中,攻擊者無(wú)法通過(guò)偽造密鑰碎片來(lái)傳輸錯(cuò)誤數(shù)據(jù)。 假設(shè)存在一個(gè)攻擊者A 想要冒充簽名聚合預(yù)言機(jī)偽造簽名或者惡意預(yù)言機(jī)群體合謀偽造群體簽名向預(yù)言機(jī)智能合約發(fā)送錯(cuò)誤數(shù)據(jù),則需要獲得預(yù)言機(jī)群體私鑰sk,才能通過(guò)群體簽名驗(yàn)證sG=R+H(m|R|Q)Q(modq),從而傳送錯(cuò)誤數(shù)據(jù)。獲取群體私鑰至少需要獲取t個(gè)預(yù)言機(jī)的私鑰分片才能恢復(fù)群體私鑰sk,且惡意節(jié)點(diǎn)數(shù)小于t(t=f+1,即t的值始終大于惡意節(jié)點(diǎn)數(shù)量),因此攻擊者A 無(wú)法冒充簽名聚合預(yù)言機(jī),且惡意預(yù)言機(jī)群體無(wú)法合謀偽造群體簽名。因此,本文方案可以防止攻擊者偽造群體簽名和惡意預(yù)言機(jī)群體的合謀攻擊。 3.1.2 防密鑰分發(fā)者攻擊 由于Schnorr 門(mén)限聚合簽名需要將群體私鑰sk分發(fā)給簽名群體中的n個(gè)預(yù)言機(jī),需要選擇一個(gè)預(yù)言機(jī)作為密鑰分發(fā)者。密鑰分發(fā)預(yù)言機(jī)知曉完整的密鑰,有作惡的可能。假設(shè)密鑰分發(fā)預(yù)言機(jī)向預(yù)言機(jī)發(fā)送了錯(cuò)誤的密鑰分片,而方案并沒(méi)有設(shè)置驗(yàn)證密鑰分片的步驟,當(dāng)有t個(gè)持有錯(cuò)誤密鑰分片的預(yù)言機(jī)通過(guò)驗(yàn)證時(shí),就會(huì)生成無(wú)效的簽名。但是在本文方案中,密鑰分發(fā)預(yù)言機(jī)在分發(fā)密鑰的同時(shí),還需要提供對(duì)密鑰分片ski的承諾ci,當(dāng)預(yù)言機(jī)Oraclei收到密鑰分發(fā)預(yù)言機(jī)發(fā)送的密鑰分片ski時(shí),會(huì)根據(jù)gski=驗(yàn)證密鑰碎片的正確性,當(dāng)密鑰碎片錯(cuò)誤時(shí)會(huì)向預(yù)言機(jī)智能合約發(fā)送密鑰分發(fā)者不誠(chéng)實(shí)的消息(即flagshare為false)。當(dāng)預(yù)言機(jī)智能合約收到t個(gè)這樣的消息時(shí),便重新選取密鑰分發(fā)者并向預(yù)言機(jī)群體廣播原來(lái)密鑰碎片失效的消息,所有預(yù)言機(jī)收到廣播的消息后達(dá)成一致性共識(shí),簽名過(guò)程重新回到初始化階段,成功避免由于密鑰分發(fā)者作惡導(dǎo)致的簽名失效問(wèn)題。此外,若密鑰分發(fā)者分發(fā)了t個(gè)錯(cuò)誤密鑰分片,而預(yù)言機(jī)智能合約未能收到t個(gè)密鑰分發(fā)者不誠(chéng)實(shí)的消息(即部分收到錯(cuò)誤密鑰分片的預(yù)言機(jī)未向預(yù)言機(jī)智能合約發(fā)送密鑰分發(fā)者作惡的消息),從而使得簽名過(guò)程繞過(guò)密鑰分片驗(yàn)證過(guò)程,但其無(wú)法繞過(guò)第6 階段的簽名驗(yàn)證算法,簽名過(guò)程仍然會(huì)回到初始化階段,密鑰分發(fā)者和惡意節(jié)點(diǎn)無(wú)法達(dá)到目的。因此,本文方案解決了密鑰分發(fā)者作惡導(dǎo)致的簽名失效問(wèn)題,密鑰分發(fā)者無(wú)法通過(guò)分發(fā)錯(cuò)誤密鑰碎片來(lái)實(shí)現(xiàn)作惡。 3.1.3 防隨機(jī)數(shù)攻擊 在方案簽名過(guò)程中,預(yù)言機(jī)Oraclei選取的隨機(jī)數(shù)ki需要足夠隨機(jī)。如果任意2 次簽名使用了相同的隨機(jī)數(shù)k,則會(huì)泄露私鑰;若第2 個(gè)隨機(jī)數(shù)k2能夠被第1 個(gè)隨機(jī)數(shù)k1預(yù)測(cè),也會(huì)暴露私鑰。為了防止隨機(jī)數(shù)攻擊,預(yù)言機(jī)Oraclei采用可驗(yàn)證隨機(jī)函數(shù)生成隨機(jī)數(shù)ki,且生成的隨機(jī)數(shù)ki可以驗(yàn)證是否由Oraclei生成。VRF 的偽隨機(jī)性保證了對(duì)于任意且算力有限的惡意攻擊者,都不能從不同的輸入中提取到任何有效信息,且攻擊者不可能通過(guò)破壞系統(tǒng)的隨機(jī)數(shù)生成器來(lái)獲得私鑰。因此,本文方案解決了Schnorr簽名中隨機(jī)數(shù)重復(fù)、隨機(jī)數(shù)可能被預(yù)測(cè)而導(dǎo)致的密鑰泄露問(wèn)題。 3.2.1 數(shù)據(jù)可靠性 在本文方案中,返回給用戶的請(qǐng)求數(shù)據(jù)始終是可靠的。方案中共有n(n≥2f+1)個(gè)Oracle,允許有f個(gè)Oracle 不誠(chéng)實(shí),因此,至少有f+1 個(gè)Oracle 是誠(chéng)實(shí)的。在驗(yàn)證階段收到相同數(shù)據(jù)的t個(gè)Oracle 中,至少有f+1 個(gè)是誠(chéng)實(shí)的,因此,誠(chéng)實(shí)的Oracle 數(shù)量始終大于不誠(chéng)實(shí)Oracle 的數(shù)量,即本文方案可以確保上傳到鏈上的請(qǐng)求數(shù)據(jù)是可靠的。 3.2.2 群體簽名有效性 群體簽名是根據(jù)橢圓曲線上加法同態(tài)加密的思想由誠(chéng)實(shí)預(yù)言機(jī)的簽名聚合而成的,且只需要t個(gè)誠(chéng)實(shí)預(yù)言機(jī)便可以聚合成群體簽名,即群體簽名是由誠(chéng)實(shí)預(yù)言機(jī)達(dá)成一致性共識(shí)后生成的簽名。當(dāng)驗(yàn)證群體簽名時(shí),只需要驗(yàn)證等式sG=R+H(m|R|Q)Q(modq)是否成立,便可以驗(yàn)證群體簽名的有效性。因此,在本文方案中,群體簽名可以代表預(yù)言機(jī)群體達(dá)成一致性共識(shí),其可以作為預(yù)言機(jī)整體的簽名。 3.2.3 激勵(lì)機(jī)制有效性 本文方案有效防止了搭便車攻擊,確保只有誠(chéng)實(shí)的預(yù)言機(jī)才能夠獲得獎(jiǎng)勵(lì)。搭便車攻擊是指惡意預(yù)言機(jī)直接復(fù)制其他預(yù)言機(jī)數(shù)據(jù)的“吃空餉行為”。在本文方案中,預(yù)言機(jī)群體先將簽名集合發(fā)送給簽名聚合預(yù)言機(jī),簽名聚合預(yù)言機(jī)在驗(yàn)證簽名接收數(shù)據(jù)階段驗(yàn)證預(yù)言機(jī)群體的身份,驗(yàn)證通過(guò)后才請(qǐng)求該預(yù)言機(jī)返回獲取到的數(shù)據(jù),且每個(gè)預(yù)言機(jī)按照簽名驗(yàn)證順序提交數(shù)據(jù),在防止搭便車攻擊的同時(shí)確保了請(qǐng)求數(shù)據(jù)的安全性。當(dāng)預(yù)言機(jī)智能合約驗(yàn)證群體簽名后,對(duì)參與的預(yù)言機(jī)進(jìn)行獎(jiǎng)懲評(píng)定,驗(yàn)證簽名接收數(shù)據(jù)階段保證只有誠(chéng)實(shí)預(yù)言機(jī)才能獲得獎(jiǎng)勵(lì),從而確保了激勵(lì)機(jī)制的有效性。 針對(duì)本文方案,在Remix-Ethereum 上使用solidity 編譯智能合約,將智能合約部署在本地Ganache 私有鏈上,并以Injected Web 3 的方式連接MetaMask 賬戶。使用Go 語(yǔ)言對(duì)Schnorr 簽名、BLS簽名、Feldman 可驗(yàn)證秘密共享、可驗(yàn)證隨機(jī)函數(shù)進(jìn)行模擬仿真。實(shí)驗(yàn)所采用的硬件環(huán)境為Apple M1,16 GB RAM,操作系統(tǒng)為macOS 13。為了測(cè)試本文方案的實(shí)用性,仿真實(shí)驗(yàn)分別測(cè)試方案各階段的平均時(shí)間消耗、無(wú)惡意節(jié)點(diǎn)時(shí)各方案在不同預(yù)言機(jī)數(shù)量下的平均時(shí)間和gas 消耗量,以及密鑰分發(fā)者作惡和各方案在最大容錯(cuò)量狀態(tài)下的平均時(shí)間和gas消耗量。 為了分析本文方案各階段的時(shí)間消耗,在密鑰分發(fā)者誠(chéng)實(shí)且惡意節(jié)點(diǎn)數(shù)為0 的前提下,測(cè)試預(yù)言機(jī)數(shù)量為10~50 時(shí)簽名各階段的時(shí)間消耗,結(jié)果如表1 所示。從表1 可以看出,生成可驗(yàn)證隨機(jī)數(shù)和驗(yàn)證密鑰碎片的時(shí)間在整體簽名過(guò)程中所占比重較低,對(duì)簽名過(guò)程整體影響較小。 表1 方案各階段的時(shí)間消耗Table 1 Time consumption of each stage of the scheme 單位:ms 在密鑰分發(fā)者誠(chéng)實(shí)且各方案惡意預(yù)言機(jī)節(jié)點(diǎn)數(shù)為0 時(shí),各方案所消耗的時(shí)間如圖2 所示。由圖2 可知,各方案的簽名時(shí)間隨預(yù)言機(jī)數(shù)量的增加而增加,且兩者呈一定的線性關(guān)系。本文方案比文獻(xiàn)[16]方案消耗的總體時(shí)間略長(zhǎng),主要原因是本文方案的密鑰分發(fā)階段需要計(jì)算承諾,且各預(yù)言機(jī)需要驗(yàn)證密鑰分片的正確性,在一定程度上提高了方案的復(fù)雜性。此外,由于BLS 簽名雙線性映射配對(duì)效率低下,而Schnorr 門(mén)限聚合簽名利用橢圓曲線上的加法同態(tài)加密的思想,在計(jì)算性能上占據(jù)一定優(yōu)勢(shì),因此,本文方案消耗的時(shí)間比文獻(xiàn)[12,14]方案短。 圖2 各方案的消耗時(shí)間對(duì)比Fig.2 Comparison of consumption time of various schemes 智能合約測(cè)得的數(shù)據(jù)具有平臺(tái)無(wú)關(guān)性,一次編譯可以在各個(gè)系統(tǒng)中執(zhí)行,計(jì)算機(jī)的調(diào)度會(huì)導(dǎo)致一定誤差,但是整體上消耗的gas 基本不變。因?yàn)殒溕洗鎯?chǔ)操作gas 消耗量很高,所以削減了一些不必要的鏈上存儲(chǔ)操作。為檢測(cè)惡意預(yù)言機(jī)節(jié)點(diǎn)以及密鑰分發(fā)者作惡行為,預(yù)言機(jī)智能合約需要收發(fā)請(qǐng)求和消息。為了盡可能地減少gas 消耗量,在預(yù)言機(jī)智能合約向預(yù)言機(jī)群體發(fā)送請(qǐng)求或預(yù)言機(jī)向智能合約發(fā)送消息時(shí),將請(qǐng)求和消息以事件的形式發(fā)出,而不保存在存儲(chǔ)中,預(yù)言機(jī)節(jié)點(diǎn)或預(yù)言機(jī)智能合約只需要讀取請(qǐng)求。此外,在智能合約中使用uint256 和bytes32變量存儲(chǔ)信息,以降低以太坊虛擬機(jī)運(yùn)行時(shí)需要進(jìn)行類型轉(zhuǎn)換所帶來(lái)的額外成本。 在密鑰分發(fā)者誠(chéng)實(shí)且各方案惡意節(jié)點(diǎn)數(shù)為0 的情況下,測(cè)得的gas 消耗量如圖3 所示。從圖3 可以看出:由于文獻(xiàn)[12]方案在鏈上聚合,因此其需要的存儲(chǔ)空間隨著預(yù)言機(jī)數(shù)量的增加而增加,gas 消耗量和預(yù)言機(jī)數(shù)量之間呈現(xiàn)一定的線性關(guān)系;本文方案、文獻(xiàn)[14]方案和文獻(xiàn)[16]方案在鏈下聚合,只需要給預(yù)言機(jī)智能合約提供一個(gè)群體簽名和數(shù)據(jù)集合,預(yù)言機(jī)數(shù)量對(duì)存儲(chǔ)空間的影響較小,因此,gas 消耗量增長(zhǎng)較少。當(dāng)預(yù)言機(jī)達(dá)到一定數(shù)量時(shí),鏈下聚合方案的gas 消耗量遠(yuǎn)低于鏈上聚合方案;本文方案的gas 開(kāi)銷略高于文獻(xiàn)[16]方案,原因是本文方案智能合約添加了密鑰分發(fā)預(yù)言機(jī)的信譽(yù)與激勵(lì)機(jī)制,但增加的開(kāi)銷有限,方案整體gas 開(kāi)銷仍較少。相較于文獻(xiàn)[14]所提鏈下方案,本文方案開(kāi)銷較低。雖然BLS 簽名相比Schnorr 簽名小2 倍,但是由于其雙線性映射構(gòu)造復(fù)雜,驗(yàn)證簽名的難度比Schnorr 簽名高幾個(gè)數(shù)量級(jí),因此鏈上智能合約在驗(yàn)證簽名時(shí)需要消耗更多gas,導(dǎo)致方案整體gas 消耗較高。 圖3 各方案的gas 消耗量對(duì)比Fig.3 Comparison of gas consumption of various schemes 上述實(shí)驗(yàn)均在密鑰分發(fā)者誠(chéng)實(shí)的前提下進(jìn)行。當(dāng)?shù)? 次選中的密鑰分發(fā)者不誠(chéng)實(shí)時(shí),文獻(xiàn)[12]方案、文獻(xiàn)[16]方案失效。Schnorr 簽名方案惡意節(jié)點(diǎn)的最大容納量為n/2,BLS 簽名方案的最大容納量為n/3,即本文方案容錯(cuò)率比文獻(xiàn)[14]方案高16.7%。在預(yù)言機(jī)節(jié)點(diǎn)總數(shù)一定、各方案惡意預(yù)言機(jī)節(jié)點(diǎn)數(shù)在最大容納量的情況下,測(cè)得本文方案、文獻(xiàn)[14]方案的時(shí)間消耗和gas 消耗分別如圖4、圖5 所示。從中可以看出:相較于文獻(xiàn)[14]方案,本文方案的時(shí)間、gas 消耗量更低,且當(dāng)預(yù)言機(jī)數(shù)量逐漸增加時(shí),文獻(xiàn)[14]方案的時(shí)間、gas 消耗增長(zhǎng)更快。在預(yù)言機(jī)節(jié)點(diǎn)數(shù)為50、密鑰分發(fā)者作惡且惡意預(yù)言機(jī)占預(yù)言機(jī)群體近50%時(shí),本文方案消耗的總時(shí)間不超過(guò)200 ms,gas 消耗量不超過(guò)5×105wei,能夠有效實(shí)現(xiàn)可信數(shù)據(jù)上鏈。 圖4 密鑰分發(fā)者作惡時(shí)2 種方案的時(shí)間消耗Fig.4 The time consumption of two schemes when the key distributor engages in malicious behavior 圖5 密鑰分發(fā)者作惡時(shí)2 種方案的gas 消耗Fig.5 The gas consumption of two schemes when the key distributor engages in malicious behavior 為提高區(qū)塊鏈預(yù)言機(jī)方案的容錯(cuò)率,降低方案的成本,解決密鑰泄露、簽名失效等問(wèn)題,本文提出一種安全高效的區(qū)塊鏈預(yù)言機(jī)改進(jìn)方案。通過(guò)引入可驗(yàn)證秘密分享技術(shù),解決當(dāng)前方案中密鑰分發(fā)者作惡導(dǎo)致的簽名失效問(wèn)題;通過(guò)引入可驗(yàn)證隨機(jī)函數(shù),解決隨機(jī)數(shù)重復(fù)、隨機(jī)數(shù)能夠被預(yù)測(cè)而導(dǎo)致的密鑰泄露問(wèn)題。實(shí)驗(yàn)和分析結(jié)果表明,該方案具有一定的有效性,在數(shù)據(jù)安全、開(kāi)銷等方面表現(xiàn)較好,能夠滿足可信數(shù)據(jù)上鏈的需求。下一步將改進(jìn)或探索其他簽名方案,在確保安全性的同時(shí)降低方案的復(fù)雜度。此外,還將根據(jù)數(shù)據(jù)的差異性和重要性研究具有不同細(xì)粒度的區(qū)塊鏈預(yù)言機(jī)方案。1.3 可驗(yàn)證隨機(jī)函數(shù)
2 區(qū)塊鏈預(yù)言機(jī)改進(jìn)方案
2.1 初始化
2.2 密鑰分發(fā)
2.3 密鑰分片驗(yàn)證
2.4 可驗(yàn)證隨機(jī)數(shù)生成
2.5 簽名
2.6 簽名集合校驗(yàn)數(shù)據(jù)驗(yàn)證
2.7 群體簽名生成
2.8 信譽(yù)與激勵(lì)機(jī)制
3 方案分析
3.1 安全性分析
3.2 有效性分析
4 實(shí)驗(yàn)與分析
5 結(jié)束語(yǔ)