孫 舟,祝秀山,劉祥路,陳 振,袁小溪
(國網(wǎng)北京市電力公司 電力科學研究院,北京 100075)
隨著智能電網(wǎng)建設(shè)的不斷推進和區(qū)塊鏈技術(shù)的快速發(fā)展,利用區(qū)塊鏈實現(xiàn)海量電力數(shù)據(jù)的安全存儲成為電力數(shù)據(jù)管理的主要趨勢[1]。而在實際應(yīng)用過程中,為了實現(xiàn)鏈下可信數(shù)據(jù)的實時安全上鏈,通常借助預言機來保障數(shù)據(jù)傳輸和處理過程的安全可信。2015年,中心化預言機Oraclize(現(xiàn)更名為Provable)被首次提出,依托亞馬遜云主機、Google等可信第三方來證明數(shù)據(jù)的真實性[2]。2017年,第一個基于以太坊的去中心化預言機網(wǎng)絡(luò)Chainlink被提出,通過多數(shù)據(jù)源和多預言機節(jié)點的方式有效分散了因數(shù)據(jù)來源本身的問題導致數(shù)據(jù)失真的風險,并引入聲譽系統(tǒng)和驗證系統(tǒng)[3]。2019年,去中心化預言機DOS Network白皮書正式發(fā)布,利用可驗證隨機方程和閾值密碼學來保證可驗證工作節(jié)點的隨機選取[4]。
相較于中心化預言機基于可信第三方的證明機制,去中心化預言機網(wǎng)絡(luò)通過多個預言機節(jié)點之間相互驗證的模式能夠更好地保障上鏈數(shù)據(jù)的可信性。然而,現(xiàn)有的分布式預言機網(wǎng)絡(luò)通常采用鏈上共識的方式,即每臺預言機都需要將響應(yīng)發(fā)送至區(qū)塊鏈上的智能合約,由聚合智能合約進行數(shù)據(jù)共識得到單一數(shù)據(jù)點。但是由于每個預言機節(jié)點都要將外部數(shù)據(jù)上傳到區(qū)塊鏈,容易造成區(qū)塊鏈網(wǎng)絡(luò)壓力大、共識效率低等問題。為此,本文提出一種基于門限簽名的分布式預言機鏈下共識方案,通過設(shè)計各預言機節(jié)點鏈下簽名、共識并上鏈的過程,在保證數(shù)據(jù)共識過程安全可靠的同時,減緩區(qū)塊鏈網(wǎng)絡(luò)壓力,提高共識效率。
區(qū)塊鏈是一個點對點的分布式賬本系統(tǒng)[5],而智能合約是無需中介、自我驗證、自動執(zhí)行合約條款的計算機交易協(xié)議[6],區(qū)塊鏈與智能合約的結(jié)合,有利于切實解決電力、農(nóng)業(yè)、經(jīng)濟、醫(yī)療等領(lǐng)域的部分難題。但是由于區(qū)塊鏈具有特殊的底層共識協(xié)議,鏈上智能合約只能在一個封閉、孤立的環(huán)境中執(zhí)行任務(wù),無法與外部系統(tǒng)交互[7]。針對這一問題,預言機技術(shù)提供了一種讓智能合約可以請求外部數(shù)據(jù)的途徑。
在區(qū)塊鏈環(huán)境中,預言機是一個外部數(shù)據(jù)代理,它觀察區(qū)塊鏈外部世界的事件,并將其報告給區(qū)塊鏈,供智能合約使用,從而擴大了區(qū)塊鏈和智能合約的應(yīng)用場景[8]。目前,預言機可分為中心化預言機和去中心化預言機。文獻[9]提出了中心化預言機方案Town crier,它會正確地執(zhí)行代碼,有效將外部數(shù)據(jù)輸入到區(qū)塊鏈,但是依賴單一預言機節(jié)點容易遭遇單點故障、數(shù)據(jù)濫用、中心化信任等問題,導致區(qū)塊鏈上出現(xiàn)惡意或錯誤的數(shù)據(jù);文獻[10]進一步提出了去中心化預言機方案,由多個預言機節(jié)點同時獲取數(shù)據(jù),有效解決了中心化預言機帶來的問題,同時能降低被虛假信息干擾的風險,提供了更好的安全保障。如今,通過預言機搭建實現(xiàn)區(qū)塊鏈與鏈外世界統(tǒng)一融合的平臺已逐漸成為一種趨勢[11]。
共識機制指網(wǎng)絡(luò)中所有節(jié)點通過事先確定的規(guī)則對某個提案形成共同認識的過程[12]。對于中心化預言機,外部信息直接被獲取到區(qū)塊鏈中。對于分布式預言機,多預言機節(jié)點中可能存在問題預言機,這將導致數(shù)據(jù)不一致問題,因此所有預言機需要通過一種特定規(guī)則對最終提交給區(qū)塊鏈的數(shù)據(jù)達成一致,即所有預言機返回的數(shù)據(jù)需要以可信的方式被聚合成一個單一且權(quán)威的數(shù)據(jù)。例如,在區(qū)塊鏈平臺Augur和Gnosis中,多個預言機節(jié)點使用投票的方式來達成對要接受的答案的共識。
現(xiàn)有的去中心化預言機網(wǎng)絡(luò)通常采用鏈上共識的方式,每臺預言機都需要將響應(yīng)發(fā)送至鏈上智能合約,由這個智能合約負責數(shù)據(jù)共識,這樣可以有效防止部分節(jié)點提交錯誤數(shù)據(jù)而對結(jié)果造成影響,保證數(shù)據(jù)的真實可靠,同時整個執(zhí)行過程在鏈上完全公開透明,可信度高[13]。但是這種合約內(nèi)聚合的方法要求每個預言機節(jié)點都將外部數(shù)據(jù)上傳到區(qū)塊鏈,容易造成區(qū)塊鏈網(wǎng)絡(luò)壓力增大,運行效率降低。而門限簽名技術(shù)作為一種分布式多方簽名協(xié)議,可以帶來多種區(qū)塊鏈場景下的效率提升。文獻[14]提出門限簽名方案可以有效降低計算資源需求量,提升簽名生成階段的效率。門限簽名技術(shù)也可以應(yīng)用于分布式預言機共識算法中,降低通信復雜度,保障共識過程的客觀準確性和上鏈數(shù)據(jù)的可信性。
為了解決現(xiàn)有的分布式預言機網(wǎng)絡(luò)鏈上共識存在的區(qū)塊鏈網(wǎng)絡(luò)壓力大、共識效率低等問題,提升鏈上性能,本文提出一種基于門限簽名的分布式預言機鏈下共識方案,讓預言機在鏈下交流并達成共識,然后經(jīng)由統(tǒng)一的預言機一次性發(fā)送至區(qū)塊鏈上的智能合約,而不需要每個預言機節(jié)點都將響應(yīng)發(fā)送至區(qū)塊鏈上的智能合約,減少了造成區(qū)塊鏈網(wǎng)絡(luò)擁堵的可能性,減緩了區(qū)塊鏈網(wǎng)絡(luò)壓力,提高了共識效率,從而實現(xiàn)時變數(shù)據(jù)實時與高效共享。
為了實現(xiàn)預言機池與區(qū)塊鏈和外部數(shù)據(jù)源之間的數(shù)據(jù)交互,我們設(shè)計了以下兩個智能合約。
(1)數(shù)據(jù)請求智能合約:用戶用于向外部數(shù)據(jù)源請求數(shù)據(jù)的智能合約,負責接收用戶的數(shù)據(jù)訪問請求并調(diào)用預言機智能合約;
(2)預言機智能合約:作為數(shù)據(jù)請求智能合約和預言機之間的中介,負責向預言機池發(fā)送數(shù)據(jù)請求、接收返回的電力數(shù)據(jù)和簽名以及計算和管理每個預言機節(jié)點的信譽。
圖1展示了來自用戶的數(shù)據(jù)請求是如何傳遞到外部數(shù)據(jù)源以及外部電力數(shù)據(jù)是如何被傳輸返回給用戶的。想要獲取外部電力數(shù)據(jù)的用戶需要創(chuàng)建一個數(shù)據(jù)請求智能合約(1),通過數(shù)據(jù)請求智能合約調(diào)用預言機智能合約(2)。然后,預言機智能合約會為每個請求分配唯一的事件ID,并生成一個區(qū)塊作為事件日志記錄事件ID、請求信息和接收請求的預言機節(jié)點列表(3),并對請求信息進行簽名后發(fā)送給預言機池中的預言機節(jié)點(4)。各預言機節(jié)點對請求進行驗證后,從外部數(shù)據(jù)源獲取對應(yīng)的電力數(shù)據(jù)(5)。
圖1 數(shù)據(jù)請求和外部電力數(shù)據(jù)的傳輸過程
而在數(shù)據(jù)傳輸過程中,首先每個預言機節(jié)點對獲取到的外部電力數(shù)據(jù)進行簽名,然后發(fā)送給參與請求的其它預言機節(jié)點(6),各節(jié)點對接收到的簽名進行認證并進行數(shù)據(jù)共識,聚合成單一數(shù)據(jù)后(7),由聚合預言機將數(shù)據(jù)和簽名信息發(fā)送給預言機智能合約(8)。最后,預言機智能合約對接收到的數(shù)據(jù)和簽名進行驗證后通過回調(diào)函數(shù)將數(shù)據(jù)返回給數(shù)據(jù)請求智能合約(9)。
2.2.1 方案描述
我們通過(t,n)門限簽名技術(shù)來實現(xiàn)分布式預言機網(wǎng)絡(luò)的鏈下共識。(t,n)門限簽名技術(shù)是指在一個由n個參與者構(gòu)成的簽名群體中,有一個公私鑰對,通過一定的方式將這個私鑰切分成許多碎片,并分發(fā)給群體中的所有參與方。當群體中任意數(shù)量大于等于t個參與者使用各自的私鑰碎片對同一個數(shù)據(jù)進行簽名時,就可以產(chǎn)生一個完整的有效簽名。其中t為門限值,也是就生成合法簽名的最小參與者數(shù)量,當簽名方的數(shù)量小于t時,則無法生成有效簽名。
通過門限簽名技術(shù),分布式預言機網(wǎng)絡(luò)中的n個預言機節(jié)點在鏈下進行交互,當t個預言機節(jié)點針對同一個值分別生成部分簽名時,就可以聚合成一個完整的密鑰簽名,并可以批準數(shù)據(jù)傳輸,將共識后的數(shù)據(jù)發(fā)送至區(qū)塊鏈上的預言機智能合約,因此,最后只需將一條經(jīng)過驗證的信息傳輸至鏈上進行處理即可,無須將n條預言機信息都發(fā)到鏈上。雖然只有網(wǎng)絡(luò)中參與的預言機才能組成簽名,但是任何人都可以檢查簽名的真實性和有效性。相較于傳統(tǒng)鏈上共識方案中預言機智能合約需要對針對同一個數(shù)據(jù)生成的t個簽名進行驗證,通過門限簽名的分布式預言機鏈下共識方案在安全性上無異,但是預言機智能合約只需要對最終合成的一個完整簽名σ進行驗證,從而將驗證簽名σ的計算工作量和成本降低了t倍,使得鏈上性能大幅提升。
2.2.2 提交-揭露機制
此外,分布式預言機的鏈下共識方案需要解決預言機的“吃空餉”問題,即預言機節(jié)點不是通過訪問數(shù)據(jù)源來獲取數(shù)據(jù),而是抄襲其它預言機的答案。吃空餉現(xiàn)象會削弱數(shù)據(jù)源的多樣性,也會打擊預言機快速響應(yīng)的積極性,因為響應(yīng)速度慢的預言機可以免費復制別人的答案。當大量吃空餉的節(jié)點復制了一個錯誤答案時,將造成大多數(shù)攻擊,影響系統(tǒng)安全性。
為了解決這一問題,我們采用了提交-揭露機制,即預言機節(jié)點分兩個階段提交數(shù)據(jù),在第一階段,預言機將數(shù)據(jù)以加密的形式進行提交,并收集其它預言機提交的密文信息,只有在收到合法數(shù)量的密文信息后,才會開啟第二階段,對所有結(jié)果進行解密用以驗證數(shù)據(jù)。只有進入取消提交階段,所有數(shù)據(jù)結(jié)果才會公開,從而避免了預言機的抄襲問題。
在本方案中,我們假設(shè)有f 圖2 分布式預言機鏈下共識方案流程 假設(shè)參與共識的預言機節(jié)點集為O={O1,O2,…,On}, 共n個預言機節(jié)點,門限值為t。選定安全參數(shù)k,選擇一個q階循環(huán)群G,其離散對數(shù)問題是難解的,有限域q元素個數(shù)為q,特征值為p,p、q為大素數(shù),g是G的生成元,選擇安全哈希函數(shù)H1公開參數(shù)為k、p、q、g、G、H1和H2。此外,我們用表示從S中選取隨機數(shù)x。 2.3.1 密鑰生成 構(gòu)造分布式密鑰生成(distributed key generation,DKG)協(xié)議,將O的密鑰n等分分發(fā)給所有預言機節(jié)點Oi,使得數(shù)量≥t的任意個預言機節(jié)點集合都可以針對同一個值合成完整的數(shù)字簽名,而t-1臺預言機的集合則無法對任何值生成合法簽名,從而保證這個完整簽名至少由t臺預言機的部分簽名組成。 在本方案中,我們基于Pedersen DKG協(xié)議進行密鑰生成,不需要可信中心的參與,而是在通過分布式協(xié)作下生成密鑰,避免單點泄漏風險,相當于n個節(jié)點同時各自選擇秘密值并運行自己的可驗證秘密分享,每個節(jié)點收集來自其它節(jié)點的秘密份額完成組裝,組裝后的結(jié)果便是真正密鑰份額。 除了基本的Pedersen DKG協(xié)議外,我們還要求每個參與的預言機節(jié)點通過零知識證明(例如Schnorr簽名)來證明他們知道秘密值ai0,以防止在t≥n/2時的欺騙攻擊。協(xié)議運行輸出一個全局公鑰Y和每個預言機節(jié)點Oi各自所有的密鑰份額si和公鑰份額Yi。在后續(xù)的簽名階段,參與共識的預言機節(jié)點可以通過每個節(jié)點的公鑰份額Yi對該節(jié)點的簽名份額進行驗證;而在簽名驗證階段,除參與共識的預言機節(jié)點集合外的實體則可以通過全局公鑰Y對該集合得到的完整簽名進行驗證。具體的分布式密鑰生成協(xié)議如下: (1)第一輪 1)每個預言機節(jié)點Oi選擇t個隨機數(shù) 以這些隨機數(shù)為系數(shù)構(gòu)建t-1階多項式 2)Oi對相應(yīng)的秘密值ai0計算知識證明 σi=(Ri,ui) 3)Oi計算公開承諾 其中,φij=gaij, 0≤j≤t-1。 其中,cl=H(l,Φ,φl0,Rl)。 (2)第二輪 1)Oi向其它預言機節(jié)點Ol發(fā)送密鑰份額 (l,fi(l)), 在保存 (i,fi(i)) 后,刪除fi和其它密鑰份額。 2)Oi收到其它節(jié)點發(fā)送的 (i,fl(i)) 后,驗證等式 若驗證失敗則終止協(xié)議。 3)Oi計算自己的密鑰份額 保存si,然后刪除所有fl(i)。 4)Oi計算公鑰份額 Yi=gsi 全局公鑰 任何節(jié)點可以通過以下等式計算其它節(jié)點的公鑰份額 2.3.2 簽名生成 各預言機節(jié)點通過自己的密鑰份額si對數(shù)據(jù)結(jié)果進行分布式協(xié)作簽署,生成部分簽名σi,可以用Yi進行驗證,然后通過聚合輸出最終的可驗證完整簽名σ,這個簽名和單獨用全局密鑰s簽出的簽名是一樣的,可以用全局公鑰Y進行驗證。每個預言機節(jié)點進行簽名的具體實施步驟如算法1所示。 算法1:簽名生成協(xié)議 獲取數(shù)據(jù): (1)從外部數(shù)據(jù)源獲取數(shù)據(jù)Di 生成部分簽名: (2)計算得到部分簽名σi=Sigsi(Di) 結(jié)果提交輪: (3)廣播提交的結(jié)果commi=Commit(σi,Di), Commit為提交函數(shù) (4)等待收到n-f個來自不同預言機的合法提交集合Ci (5)將Ci發(fā)送至預言機智能合約 準備輪: (6)廣播prepared信息 (7)等待收到n-f條不同預言機的prepared信息解密/取消提交輪: (8)廣播 “取消提交commi”的信息 (9)等待收到一組≥t的合法取消提交的信息PS 計算完整簽名: (10)合成完整數(shù)字簽名σ=Sigs(D), 其中D=Agg(D1,D2,…,Dn), Agg為多數(shù)函數(shù) (11)將PS發(fā)送至預言機智能合約 簽名生成階段的具體實現(xiàn)與所基于的數(shù)字簽名算法有很大關(guān)系,常用的算法包括ECDSA簽名算法和Schnorr簽名算法。在本方案中,我們采用Schnorr簽名算法來生成完整的合法簽名,同時利用了綁定技術(shù),在不限制并發(fā)性的情況下防止偽造攻擊。我們將簽名過程分為預處理和單輪簽名兩個階段,如果有需要的話,這兩個階段可以合成一個完整的兩輪協(xié)議。需要說明的是,簽名過程中的偽造攻擊要求惡意敵手在選擇自己的承諾前看到其它節(jié)點的承諾份額或者自適應(yīng)地選擇簽署的消息,從而操縱執(zhí)行簽名操作的節(jié)點集合生成的c。為了在不限制并發(fā)性的情況下防止偽造攻擊,本方案“綁定”每個參與節(jié)點對特定消息的簽名份額,以及用于簽名操作的參與節(jié)點結(jié)合和他們的承諾。通過這種方式,結(jié)合不同消息或者參與節(jié)點/承諾對的簽名份額將導致一個無效的簽名。 預處理階段的具體過程如算法2所示,在這一階段,參與節(jié)點一次性生成并發(fā)布π個承諾,因此,π決定了在一次預處理過程中生成的隨機數(shù)數(shù)量和他們對應(yīng)的承諾。每個參與節(jié)點Oi首先生成一個私有隨機數(shù)對列表以及相應(yīng)的公開承諾份額 其中,j是計數(shù)器,用于識別下一個可以用來簽名的隨機數(shù)/承諾份額對。然后發(fā)布 (i,Li), 其中Li是他們的承諾份額列表 算法2:預處理算法 (1)Li=[ ] (2)for 1≤j≤π (4) (Dij,Eij)=(gdij,geij) //計算承諾份額 (5)Li.append (Dij,Eij) (6) store ((dij,Dij), (eij,Eij)) (7)publish (i,Li) 在單輪簽名階段過程中,我們用SA表示簽名合成者,它可以是任意一個簽名參與者,設(shè)α(t≤α≤n) 為執(zhí)行簽名操作的參與節(jié)點數(shù),S={o1,…,oα} 為這些參與節(jié)點的集合,對S使用拉格朗日差值法得到的節(jié)點oi的拉格朗日系數(shù)為 (1)SA從Li獲取每個參與者oi∈S的下一個合法承諾并構(gòu)建有序列表 B=〈(i,Di,Ei)〉oi∈S (2)SA向oi發(fā)送(m,B)。 (3)在收到(m,B)后,oi首先驗證消息m,然后對B中的每個承諾,驗證Dl,El∈G,任意一項驗證不通過則退出算法。 (4)oi計算綁定值 ρl=H1(l,m,B)(ol∈S) 然后得到組承諾 R=∏ol∈SDl·(El)ρl (5)oi利用密鑰份額si計算他們的簽名份額 zi=di+(ei·ρi)+λi·si·c 其中,用S來確定第i個拉格朗日系數(shù)λi。 (6)oi從本地刪除 ((di,Di), (ei,Ei)), 然后向SA返回zi。 (7)簽名合成者SA執(zhí)行以下操作: 1)對于oi∈S,獲取 ρi=H1(i,m,B) 然后計算 R=∏oi∈SRi 2)通過以下等式對每一個簽名份額zi(oi∈S) 進行驗證 3)如果等式不成立,則識別并報告該問題節(jié)點,然后退出算法,否則繼續(xù) 4)計算 z=∑zi 5)得到完整數(shù)字簽名 σ=(R,z) 2.3.3 簽名驗證 鏈下預言機共識方案的目標是將鏈上溝通需求降至最低,即對于執(zhí)行同一數(shù)據(jù)請求的一組預言機,只由一個預言機返回數(shù)字簽名σ,只產(chǎn)生一條鏈上消息。但是在實際操作中,由于簽名不會立即發(fā)布到區(qū)塊鏈上,多個預言機節(jié)點可以獨自將簽名結(jié)果發(fā)送到區(qū)塊鏈。 因此,為了避免重復發(fā)送消息,我們從最終達成共識的α臺預言機中根據(jù)隨機數(shù)算法隨機選舉出一個預言機節(jié)點作為聚合預言機,向預言機智能合約提交數(shù)據(jù)D及其完整的數(shù)字簽名σ=(R,z), 預言機智能合約接收到簽名信息后,利用全局公鑰Y對其進行驗證,驗證公式為 gz=RYc 如果驗證不通過,則說明消息已經(jīng)被篡改;如果驗證通過,則說明數(shù)據(jù)真實可靠。驗證通過后,預言機智能合約通過回調(diào)函數(shù)將數(shù)據(jù)D發(fā)送給數(shù)據(jù)請求智能合約。 2.3.4 預言機獎勵 完成數(shù)據(jù)共識和數(shù)據(jù)結(jié)果反饋后,預言機智能合約根據(jù)集合Ci中各預言機節(jié)點提交的commi情況對真實獲取了數(shù)據(jù)產(chǎn)生部分門限簽名的預言機節(jié)點進行獎勵,具體的獎勵算法如算法3所示。 算法3:預言機獎勵算法 (1)等待收到n-f個不同的預言機提交集合(Ci)的集合C (2) for every oracleOido (3) ifσi∈PS&>2f個提交集合從Oi提交了σi (4) sendrewardtoOi (5) end if (6) end for (1)門限簽名正確性 證明 原式得證。 定理2σ=(R,z) 是對消息m的正確簽名。 然后讓F3(x)=F2(x)+c·F1(x), 其中c=H2(R,Y,m)。 因此,zi=di+(ei·ρi)+λi·si·c=λi(F2(i)+c·F1(i))=λiF2(i), 所以z=∑oi∈Szi相當于是F3(0)=(∑oi∈Sdi+eij·ρi)+c·s的拉格朗日插值。因為R=g∑oi∈Sdi+ei·ρi,c=H2(R,Y,m), 因此σ=(R,z) 是對消息m的正確簽名。 (2)預言機獎勵算法正確性 定理3 預言機獎勵算法不會獎勵吃空餉的預言機節(jié)點。 證明:假設(shè)預言機節(jié)點Oz在“吃空餉”。則只能在T時間之后才能廣播合法結(jié)果,T時間指首個誠實節(jié)點在算法1的第(9)步取消提交的時間。Oi收到了n-f條prepared 信息,其中至少n-2f條信息來自誠實節(jié)點。Oj指代上述n-2f個誠實節(jié)點的其中一個節(jié)點。Oj在發(fā)出prepared信息后不會再接收提交結(jié)果,因此任何此類誠實節(jié)點Oj的集合Cj在T時間后都不會再改變。所以,算法3中的C中最多有n-(n-2f)=2f個集合將包含Oz。因此Oz不會收到獎勵。 (1)抗合謀攻擊 利用(t,n)門限簽名方案實現(xiàn)分布式預言機的鏈下共識,對于n個預言機節(jié)點的網(wǎng)絡(luò),至少需要t個節(jié)點合作才能生成完整的數(shù)字簽名。也就是說只要發(fā)起簽名的合法預言機節(jié)點數(shù)≥t,就不會對最終的共識結(jié)果產(chǎn)生影響,因此,假設(shè)O中有1≤x (2)抗偽造攻擊 在門限簽名方案中,惡意敵手可以在密鑰生成階段或者簽名生成階段進行欺騙和偽造攻擊。在本文提出的方案中,首先在密鑰生成過程中,我們要求每個參與的預言機節(jié)點通過零知識證明來證明他們知道秘密值ai0,以防止在t≥n/2時的欺騙攻擊。其次,在簽名生成階段,一方面,每個節(jié)點必須用密鑰份額si來計算簽名份額zi,而密鑰份額由每個節(jié)點自行保管的,根據(jù)公開信息時無法計算出其它節(jié)點的密鑰份額;另一方面,本方案“綁定”每個參與節(jié)點對特定消息的簽名份額,以及用于簽名操作的參與節(jié)點集合和他們的承諾,這樣,結(jié)合不同消息或者參與節(jié)點/承諾對的簽名份額將導致一個無效的簽名。最后,不管是在密鑰生成階段還是簽名驗證階段,我們都通過相應(yīng)的驗證等式對密鑰份額和簽名份額進行驗證,如果驗證不通過,則說明本次簽名異常,終止協(xié)議。 為了驗證本方案提出的分布式預言機共識機制的可用性和有效性,我們對區(qū)塊鏈網(wǎng)絡(luò)帶寬占用率和預言機網(wǎng)絡(luò)共識時間分別進行實驗和統(tǒng)計,并與其它方案和算法進行對比。 3.3.1 帶寬占用率 分布式預言機鏈下共識方案設(shè)計的一大目的就是減少預言機網(wǎng)絡(luò)和區(qū)塊鏈之間的通信次數(shù),減輕區(qū)塊鏈網(wǎng)絡(luò)帶寬壓力。因此,我們首先比較了本文提出的分布式預言機鏈下共識方案和傳統(tǒng)的鏈上共識方案下區(qū)塊鏈網(wǎng)絡(luò)的帶寬占用率,我們將用戶發(fā)送的請求數(shù)量從100增加到1000,設(shè)置參與共識的預言機節(jié)點個數(shù)為5,區(qū)塊鏈網(wǎng)絡(luò)帶寬為100 Mbps,同時固定上傳到區(qū)塊鏈的每條消息大小為10 kb,記錄區(qū)塊鏈網(wǎng)絡(luò)的帶寬信息。結(jié)果如圖3所示,可以看出,隨著請求數(shù)量的增加,這兩種方案下占用的網(wǎng)絡(luò)帶寬都呈上升趨勢,但是從整體上來看,在本文所提出的鏈下共識方案下,網(wǎng)絡(luò)帶寬占用率在所有請求數(shù)量下均明顯高于鏈上共識方案,并且隨著請求數(shù)量的增加,這兩種共識方案之間的帶寬占用率差距越來越大。 圖3 帶寬占用率對比(鏈上共識vs鏈下共識) 3.3.2 共識時間 我們通過共識時間來對共識效率進行衡量,較低的共識時間表示預言機網(wǎng)絡(luò)可以快速達成共識,數(shù)據(jù)傳輸?shù)陌踩愿?,同時用戶等待的時間也更少。在本研究中我們測量的共識時間為各預言機節(jié)點完成數(shù)據(jù)獲取到達成共識將數(shù)據(jù)結(jié)果反饋到預言機智能合約的時間。 (1)鏈上共識與鏈下共識 首先我們對傳統(tǒng)的鏈上共識和本文所提出的鏈下共識方案進行對比,圖4展示了預言機節(jié)點數(shù)從增加至5增加至50時,分布式預言機網(wǎng)絡(luò)達成共識所需時間的比較。從圖4可以看出,相較于鏈上共識方案,本文所提出的鏈下共識方案達成共識所需的時間更短,同時隨著預言機數(shù)量的增多,二者共識時間差值越大。 圖4 共識時間對比(鏈上共識vs鏈下共識) 然后我們進一步對這兩個方案在密鑰生成、簽名生成和簽名驗證這3個階段的耗時進行分析和對比,結(jié)果如圖5所示,左列為鏈上共識方案,右列為鏈下共識方案,從圖中可以看出,在密鑰生成和簽名生成階段,這兩個方案所需的時間相差不大;但是在簽名驗證階段,鏈下共識方案所需的時間明顯少于鏈上共識方案,并且隨著預言機數(shù)量的增加,鏈上共識方案耗時出現(xiàn)了明顯的增加,但是鏈下共識方案的耗時則基本保持不變,這是因為鏈下共識方案只將共識后的數(shù)據(jù)結(jié)果發(fā)送至區(qū)塊鏈,也就是說,不管有多少預言機節(jié)點參與共識,最終只上傳一個數(shù)字簽名,也只需要對該簽名進行驗證。 圖5 各階段耗時對比(鏈上共識vs鏈下共識) (2)ECDSA門限簽名與Schnorr門限簽名 不同的簽名算法對應(yīng)的門限機制實現(xiàn)復雜度和效率是不同的,除了本文提出的基于Schnorr簽名算法的門限簽名方案外,基于ECDSA簽名算法的門限簽名方案也十分常見,而ECDSA也是比特幣和以太坊采用的交易簽名算法。因此我們進一步對這兩種方案進行對比。 我們主要關(guān)注這兩種簽名算法在基于DKG協(xié)議和多方計算的原理去生成和分發(fā)簽名算法中需要的秘密值的過程中的差異。因此,我們主要測量了當預言機節(jié)點數(shù)從增加至5增加至50時,密鑰生成階段所需的時間。 從圖6可以看出,Schnorr門限簽名在密鑰生成階段的耗時明顯少于ECDSA門限簽名算法,這是由于ECDSA簽名算法中秘密值k是非線性的,所以在分布式密鑰生成與分發(fā)過程的實現(xiàn)上更為復雜,效率也更低,而Schnorr門限簽名算法在生成和分發(fā)簽名算法所需的私鑰碎片時計算量更小,因此速度更快,效率更高。 圖6 密鑰生成階段耗時對比(ECDSA門限簽名vs Schnorr門限簽名) 利用區(qū)塊鏈和預言機技術(shù)實現(xiàn)海量電力數(shù)據(jù)的可信傳輸與存儲是未來電力數(shù)據(jù)管理重要的發(fā)展方向。而在利用分布式預言機進行數(shù)據(jù)獲取與共識的過程中,現(xiàn)有的預言機鏈上共識方案存在區(qū)塊鏈網(wǎng)絡(luò)壓力大、共識效率低等問題,因此本文基于(t,n)門限簽名技術(shù)和Schnorr簽名算法,提出一種面向智能電網(wǎng)的分布式預言機鏈下共識方案。該方案由密鑰生成、簽名生成、簽名驗證和預言機獎勵4個階段構(gòu)成,各預言機節(jié)點在鏈下通過分布式協(xié)作生成部分簽名并聚合成完整的可驗證簽名。與現(xiàn)有的分布式預言機鏈上共識方案相比,本方案在減緩區(qū)塊鏈網(wǎng)絡(luò)壓力、提升系統(tǒng)運行效率的同時具有良好的正確性和安全性,同時對系統(tǒng)功能的實驗和測試驗證了方案的高效性。
c=H2(R,Y,m)
Ri=Dij·(Eij)ρi
c=H2(R,Y,m)3 方案分析
3.1 正確性分析
3.2 安全性分析
3.3 性能分析
4 結(jié)束語