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





5 結束語