李佩怡 李翔宇
(上海大學(xué)通信與信息工程學(xué)院 上海 200444)
云計算[1]是一種新型計算形式,它允許資源受限的用戶根據(jù)需求訪問計算資源共享池,即云服務(wù)器。它是繼計算機(jī)、互聯(lián)網(wǎng)后在信息時代的一個變革,是信息時代的一個巨大飛躍,它的產(chǎn)生使得外包計算成為可能。外包計算是指服務(wù)器幫助計算能力有限的用戶執(zhí)行復(fù)雜度高的運(yùn)算,并根據(jù)自己提供的計算服務(wù)向用戶收取相應(yīng)的費用。外包計算解決了資源受限的用戶的計算問題,也極大地降低了用戶的計算成本。
盡管外包計算有其獨特的優(yōu)勢,但是它也帶來了一些安全問題和挑戰(zhàn)[2]。首先,云服務(wù)器[3]只能被認(rèn)為是半可信的,而資源受限的用戶的外包源可能包含一些敏感信息,用戶不希望將這些敏感信息暴露給服務(wù)器。因此,第一個安全挑戰(zhàn)就是保密性,即云服務(wù)器無法獲取用戶真正的計算內(nèi)容及計算結(jié)果。其次,云服務(wù)器只能被認(rèn)為是半可信的,因為它發(fā)送給用戶的計算結(jié)果可能是錯誤的。因此,第二個安全挑戰(zhàn)為可驗證性,即保證用戶可以驗證其接收到的計算結(jié)果是否正確。但是,用戶的驗證過程不能涉及很復(fù)雜的運(yùn)算,否則外包將變得毫無意義。最后,外包計算的主要目的是降低用戶的計算成本。因此,在實現(xiàn)前兩者的前提下,需要保證外包算法中用戶的計算成本遠(yuǎn)遠(yuǎn)小于直接計算。
雙線性對運(yùn)算是密碼學(xué)領(lǐng)域中常見的運(yùn)算,但是它的復(fù)雜度較高,對計算能力有限的用戶來講,是極其耗時的,因此,許多研究人員希望將它外包給服務(wù)器進(jìn)行計算。Chevallier等[4]首先提出了基于單個服務(wù)器的雙線性對外包算法。在該算法中,用戶通過付費的方式讓服務(wù)器執(zhí)行雙線性任務(wù),服務(wù)器計算完成后將計算結(jié)果發(fā)送給用戶,如果服務(wù)器返回錯誤的結(jié)果,用戶可以完全檢測到,但是,用戶還需要執(zhí)行模指數(shù)運(yùn)算和標(biāo)量乘運(yùn)算,其中模指數(shù)運(yùn)算的復(fù)雜度約等價于雙線性對運(yùn)算,所以該算法并不實用。與Chevallier等[4]不同,其他研究人員試圖實現(xiàn)基于兩臺服務(wù)器的高效外包算法。Chen等[5]首先提出在外包算法中加入預(yù)計算過程,由此提出了一種實用的雙線性對外包算法。該算法中,用戶首先執(zhí)行預(yù)計算對數(shù)據(jù)進(jìn)行隱藏,然后,由服務(wù)器執(zhí)行多次雙線性對運(yùn)算后,把結(jié)果發(fā)送給用戶。整個過程,用戶只需要執(zhí)行一些簡單的運(yùn)算,但是,用戶只能以1/2的概率檢測到服務(wù)器產(chǎn)生的錯誤,服務(wù)器依然可以欺騙到用戶。Tian等[6]提出了兩種雙線性對運(yùn)算外包算法,該算法由兩臺服務(wù)器分開執(zhí)行部分外包運(yùn)算來保證用戶隱私。其中一種外包算法降低了用戶和服務(wù)器的計算量,但其可驗證性為1/2,另一種外包算法提高了可驗證性,但犧牲了用戶和服務(wù)器的效率。Ren等[7]提出了一種完全可驗證的雙線性對外包算法,但用戶需要與每臺服務(wù)器交互兩次,并且增加了一些計算代價。近年來,一部分研究人員將注意力重新轉(zhuǎn)向基于單個服務(wù)器的安全外包算法的研究工作中。Shao等[8]提出了一種面向車載網(wǎng)的完全可驗證的雙線性對外包算法。由于該算法特殊的應(yīng)用場景,用戶的部分?jǐn)?shù)據(jù)可以公開,對該算法的隱私性要求相對較低,因此云服務(wù)器的計算效率大幅提高。但是該算法的應(yīng)用場景受限,且該算法中用戶的計算涉及復(fù)雜度極高的模冪運(yùn)算。Dong等[9]提出了一種新的雙線性對外包算法,該算法引入集合來隱藏用戶的輸入,并且它的可驗證概率約為1。由于該算法引入集合來隱藏用戶信息,用戶的計算量及服務(wù)器執(zhí)行對運(yùn)算的次數(shù)增大很多。
近年來,隨著開源項目比特幣[10]的發(fā)展,大家逐漸認(rèn)識到區(qū)塊鏈技術(shù)[11-13]。區(qū)塊鏈系統(tǒng)是由大量節(jié)點組成的去中心化的分布式系統(tǒng),系統(tǒng)中的所有交易均需要由各個節(jié)點共同參與驗證,區(qū)塊鏈利用該共識機(jī)制[14-15]解決了系統(tǒng)中節(jié)點間的信任問題,從而確保了區(qū)塊鏈上數(shù)據(jù)的一致性和正確性。在外包計算中,用戶和服務(wù)器之間缺乏信任,而將區(qū)塊鏈技術(shù)應(yīng)用在外包計算中就可以解決這一問題。Zhang等[16]為了實現(xiàn)安全外包服務(wù)的安全公平支付而不依賴第三方,提出了一種基于區(qū)塊鏈的公平支付框架,該方案用區(qū)塊鏈代替第三方支付平臺,用于云計算中的外包服務(wù)的付費環(huán)節(jié)。Hu等[17]首先提出了基于區(qū)塊鏈的搜索加密云方案,該方案使用智能合約替換中央服務(wù)器,構(gòu)建了一個分散的隱私保護(hù)搜索方案,保證用戶可以從服務(wù)器處獲取到正確的搜索結(jié)果,而無須擔(dān)心惡意服務(wù)器的潛在錯誤行為。Wu等[18]提出了基于區(qū)塊鏈的匿名的分散式眾包方案BPTM,該方案提出由任務(wù)請求方和任務(wù)執(zhí)行人分別將加密后的任務(wù)和個人信息發(fā)送給到區(qū)塊鏈系統(tǒng),然后由區(qū)塊鏈進(jìn)行任務(wù)匹配,該方案可以保證匹配結(jié)果的可靠性且不泄露用戶隱私。Lin等[19]首先提出了基于區(qū)塊鏈的雙線性對運(yùn)算外包算法。該算法中,由區(qū)塊鏈來執(zhí)行預(yù)計算、向兩個服務(wù)器分發(fā)外包任務(wù)并對服務(wù)器的返回結(jié)果進(jìn)行驗證。但是,該算法中由于兩個服務(wù)器是半可信的,如果它們相互串通,可能會泄露用戶的隱私信息。
在基于對的密碼體制中,雙線性對運(yùn)算一直是最昂貴的運(yùn)算,它對密碼體制的實現(xiàn)有著非常重要的影響,另外,它在信息安全中有著廣泛的應(yīng)用。本文結(jié)合區(qū)塊鏈中的智能合約,提出一種新的雙線性對安全外包算法。主要貢獻(xiàn)如下:(1) 與已有算法不同,本文算法將整個區(qū)塊鏈系統(tǒng)當(dāng)作一個“服務(wù)器”,完全解決了服務(wù)器缺乏信任的問題。另外,利用智能合約的運(yùn)行機(jī)制,用戶在外包算法中不需要驗證過程,即能實現(xiàn)可驗證概率為1。(2) 本文算法在確保用戶的隱私性的基礎(chǔ)上,降低了用戶和服務(wù)器的計算代價。(3) 將雙線性對運(yùn)算通過智能合約部署在區(qū)塊鏈系統(tǒng)上,用戶可以隨時調(diào)用智能合約執(zhí)行該算法,更加實用。
設(shè)q為大素數(shù),G1和G2是兩個生成元為P和Q、階為q的加法群,GT是一個階為q的乘法群。若滿足下列性質(zhì),則稱e:G1×G2→GT是一個雙線性對映射[20-23]:
(2) 非退化性。存在U∈G1,V∈G2,滿足e(U,V)≠1。
(3) 可計算性。對任意U∈G1,V∈G2,均可以計算e(U,V)。
若該雙線性映射存在,那么稱e(U,V)為一個雙線性對[20-23]。

雙線性對映射可通過基于有限群的超奇異橢圓曲線上的Weil或Tate對實現(xiàn)。為簡便起見,我們在本文中使用上述符號,更多細(xì)節(jié)參考文獻(xiàn)[20-23]。
智能合約[24-25]又稱“智能合同”,它是一段提前設(shè)定好觸發(fā)條件后部署到區(qū)塊鏈上的程序。一旦達(dá)到智能合約的預(yù)設(shè)條件,智能合約便被自動執(zhí)行。與普通合約一樣,智能合約也需要事先經(jīng)過多方認(rèn)證。部署在區(qū)塊鏈上的智能合約均有唯一的調(diào)用函數(shù)和相關(guān)參數(shù),區(qū)塊鏈網(wǎng)絡(luò)中的各個節(jié)點可以根據(jù)不同的調(diào)用函數(shù)和參數(shù)執(zhí)行不同的智能合約。智能合約的運(yùn)行模型如圖1所示。
若需執(zhí)行一個智能合約,客戶端需首先發(fā)起一筆交易,通知區(qū)塊鏈系統(tǒng)中的節(jié)點需要調(diào)用的函數(shù)及所需參數(shù)。系統(tǒng)中的所有節(jié)點都將接收到這筆交易,然后每個節(jié)點會調(diào)用相應(yīng)的函數(shù)從區(qū)塊鏈系統(tǒng)中獲取對應(yīng)的智能合約,并在本地環(huán)境中執(zhí)行該智能合約獲得執(zhí)行結(jié)果。為防止惡意節(jié)點作惡,每個節(jié)點在運(yùn)行智能合約后,需要將自己得到的結(jié)果與區(qū)塊鏈中其他節(jié)點的結(jié)果進(jìn)行比較。最后,當(dāng)各個節(jié)點在確認(rèn)最終結(jié)果無誤后才將該結(jié)果記錄到區(qū)塊鏈上。目前支持智能合約的有以太坊、Hyperledger Fabric。
Hohenberger等[26]首先對安全外包計算做出形式化定義。下面,我們做簡要介紹。算法Alg由可信方T和不可信程序U組成,其中:可信方T為資源受限的用戶;不可信程序U為云服務(wù)器。另外,TU表示用戶T調(diào)用云服務(wù)器U進(jìn)行計算。敵手A=(E,U′),其中:E表示惡意環(huán)境,在該環(huán)境下,Alg會提交惡意輸入;U′表示惡意環(huán)境E生成的惡意軟件,它會試圖代替U作惡。
定義1(外包定義) 如果算法Alg接受5個輸入,并生成3個輸出,我們則稱算法Alg遵守外包算法的輸入/輸出規(guī)范。有關(guān)外包算法Alg輸入/輸出的詳細(xì)描述如表1所示。

表1 外包的輸入/輸出
安全模型需確保:即使可信方T使用了惡意環(huán)境E撰寫的惡意軟件U′,E和U′也不能獲取外包算法TU的輸入和輸出的任何信息。
定義2(安全模型) 若算法Alg可以滿足下列條件,我們則稱TU是算法Alg的一次安全執(zhí)行。
(1) 正確性。TU是Alg的一次正確執(zhí)行。
(2) 保密性。對于所有的敵手A=(E,U′),在TU的執(zhí)行過程中不能得到有關(guān)算法Alg輸入/輸出的任何信息。
若需證明算法Alg滿足保密性,則需證明對于所有的敵手A=(E,U′),存在兩個模擬器(S1,S2)在計算上不能正確區(qū)分隨機(jī)變量EVIEWreal~EVIEWideal和UVIEWreal~UVIEWideal。其中:EVIEWreal~EVIEWideal表示惡意環(huán)境E在TU的執(zhí)行過程中不能得到算法Alg輸入/輸出的相關(guān)信息;UVIEWreal~UVIEWideal表示惡意環(huán)境E撰寫的惡意軟件U′在TU執(zhí)行過程中不能得到算法Alg輸入/輸出的相關(guān)信息。該部分的詳細(xì)證明可參考文獻(xiàn)[26]。
定義3((α,β)-outsource-security) 假設(shè)TU是算法Alg的一次正確執(zhí)行,對于任意輸入x,如果T的運(yùn)行時間小于或等于Alg的α倍,并且用戶T能以大于或等于的概率發(fā)現(xiàn)服務(wù)器U的惡意行為,則稱(T,U)是算法Alg的(α,β)-outsource-security實現(xiàn)。
本文算法的參與方包括用戶和“服務(wù)器”。與以往算法[5-9]不同,此處的“服務(wù)器”是指區(qū)塊鏈系統(tǒng)。該方案將原本需要服務(wù)器計算的雙線性對運(yùn)算寫入智能合約,并將智能合約部署在區(qū)塊鏈系統(tǒng)上,用戶可以隨時調(diào)用智能合約執(zhí)行雙線性對運(yùn)算。
同樣地,為了保證隱私性,我們需要將雙線性對運(yùn)算的輸入和輸出進(jìn)行隱藏。整個方案的流程如圖2所示。與文獻(xiàn)[5-9]中一樣,我們也要先調(diào)用Rand子程序生成所需參數(shù),對雙線性對運(yùn)算的輸入進(jìn)行隱藏。然后,由用戶發(fā)起一筆交易,通知區(qū)塊鏈系統(tǒng)中的各個節(jié)點需要調(diào)用的函數(shù)及所需參數(shù)。之后,各節(jié)點利用調(diào)用函數(shù)從區(qū)塊鏈系統(tǒng)中讀取相應(yīng)的智能合約,并在本地執(zhí)行環(huán)境執(zhí)行該智能合約獲得執(zhí)行結(jié)果。為防止惡意節(jié)點作惡,每個節(jié)點在運(yùn)行智能合約后,需要將自己得到的結(jié)果與區(qū)塊鏈中其他節(jié)點的結(jié)果進(jìn)行比較。當(dāng)各個節(jié)點在確認(rèn)最終結(jié)果無誤后,該結(jié)果才會被記錄到區(qū)塊鏈上。最后,用戶檢索區(qū)塊鏈上的交易數(shù)據(jù),獲得相應(yīng)的運(yùn)算結(jié)果,再執(zhí)行部分簡單計算獲得最終的結(jié)果。
從上文中可知,最終被寫入?yún)^(qū)塊鏈中的數(shù)據(jù)已經(jīng)經(jīng)過各個節(jié)點的相互對比驗證,故該結(jié)果是完全可信的,所以本文方案中減少了用戶驗證的環(huán)節(jié),但可以保證算法的可驗證性為1。

為了保證算法的隱私性,我們引入集合來構(gòu)造元素間的關(guān)系。集合之間的關(guān)系如圖3所示,即A=A1∪A2∪A3,B=B1∪B2∪B3。Rand子程序生成amP時,將元素amP隨機(jī)分布在集合A1、A2、A3中;生成bnQ時,將元素bnQ隨機(jī)分布在集合B1、B2、B3中。其中m∈{2,3,…,i},n∈{2,3,…,i}。每個集合中需至少包含一個元素。集合A1、A2、A3中的元素分別用am1P、am2P、am3P表示,集合B1、B2、B3中的元素分別用bn1Q、bn2Q、bn3Q表示。
因此,Rand生成的元素間應(yīng)存在如下關(guān)系:
(1)
(2)
結(jié)合區(qū)塊鏈和智能合約,提出一個雙線性對運(yùn)算的安全外包算法VCBP(Verifiable-Contracts-Bilinear Pairings)。在該算法中,需要由服務(wù)器執(zhí)行的雙線性對運(yùn)算被寫入智能合約,該智能合約被部署在區(qū)塊鏈系統(tǒng)上。用戶通過發(fā)起交易通知區(qū)塊鏈中的各個節(jié)點執(zhí)行智能合約從而得到所需雙線性對運(yùn)算的結(jié)果。
令q為一個大素數(shù),算法的輸入為兩個隨機(jī)點A和B,其中A∈G1,B∈G2,輸出為e(A,B)。另外,A、B和e(A,B)對智能合約都是保密的。算法的執(zhí)行過程如圖4所示,具體算法如下:

2) 用戶T隨機(jī)詢問區(qū)塊鏈系統(tǒng),系統(tǒng)返回計算結(jié)果:
U(A+a1P,B+b1Q)→e(A+a1P,B+b1Q)U(amP,B+b1Q)→e(amP,B+b1Q)=αmU(A+a1P,bnQ)→e(A+a1P,bnQ)=βn,m∈{2,3,…,i},n∈{2,3,…,i}U(ai+1P,B+b1Q)→e(ai+1P,B+b1Q)=θ1U(A+a1P,bi+1Q)→e(A+a1P,bi+1Q)=θ2
3) 由于區(qū)塊鏈上的記錄的計算結(jié)果是由區(qū)塊鏈中的節(jié)點聯(lián)合得出的,所以上述結(jié)果是完全可信的。因此,用戶T獲得區(qū)塊鏈系統(tǒng)返回的結(jié)果,就可以直接計算最終結(jié)果:
(1)T計算:
(3)
(4)
(2)T再計算:
e(A,B)=e(A+a1P,B+b1Q)e(-a1P,B+b1Q)·
e(A+a1P,-b1Q)e(a1P,b1Q)
(5)
我們首先分析了算法的隱私性、可驗證概率和復(fù)雜度,然后結(jié)合安全性定義給出了嚴(yán)格的安全證明。
(1) 隱私性。如果區(qū)塊鏈中的惡意節(jié)點想要獲得雙線性對運(yùn)算的輸入信息,那么可以分為如下情況:
如果惡意節(jié)點想要獲取輸入A的信息,那么它必須知道a1P,則它必須知道我們構(gòu)造a1P所用的各個元素。因為ρm∈{+1,-1},m∈{2,3,…,i},所以惡意節(jié)點猜出ρ的概率為2-(i-1);因為t1、t2、t3取區(qū)間[1,s]中的任意整數(shù),所以惡意節(jié)點猜出t1、t2、t3的概率為s-3;因為amP隨機(jī)分布在集合A1、A2、A3中,m∈{2,3,…,i},所以,惡意節(jié)點猜中amP的概率為3-(i-1),因此,節(jié)點猜出A的概率為s-36-(i-1);同理,節(jié)點猜出B的概率為s-36-(i-1)。
因此,惡意節(jié)點猜出雙線性對運(yùn)算的輸入的概率為s-66-2(i-1)。當(dāng)s=5、i=10時,雙線性對運(yùn)算中敏感信息暴露的概率為10-17,可以忽略不計。
(2) 可驗證概率。在本文方案中,用戶調(diào)用智能合約來執(zhí)行雙線性對運(yùn)算,相當(dāng)于把區(qū)塊鏈系統(tǒng)當(dāng)作一個大型“服務(wù)器”。在區(qū)塊鏈系統(tǒng)中,每個節(jié)點在本地執(zhí)行環(huán)境運(yùn)行智能合約后,需要將自己得到的結(jié)果在網(wǎng)絡(luò)中廣播,與區(qū)塊鏈中其他節(jié)點的結(jié)果進(jìn)行比較。當(dāng)網(wǎng)絡(luò)中的節(jié)點對比計算結(jié)果后,超過一半的節(jié)點對計算結(jié)果達(dá)成共識,則該結(jié)果作為最終結(jié)果被記錄到區(qū)塊鏈上。否則,網(wǎng)絡(luò)中的節(jié)點需再次執(zhí)行智能合約,完成外包任務(wù)。在該系統(tǒng)中,一旦有惡意節(jié)點作惡,便會在結(jié)果比對環(huán)節(jié)被立馬檢測出來。所以,該算法的可驗證概率為1。

(4) 安全性證明。下面本文方案給出嚴(yán)格的安全性證明,相應(yīng)的安全性定義證明可參考文獻(xiàn)[26]。
定理1在基于單個服務(wù)器的模型中,本文算法(T,U)是VCBP算法的正確執(zhí)行,其中算法的輸入(A,B)可能是誠實的、保密的、誠實的,受保護(hù)的或惡意的、受保護(hù)的。
證明在基于單個服務(wù)器的安全模型中,令(E,U′)是與PPT算法T交互的PPT敵手。
第一,證明EVIEWreal~EVIEWideal,即惡意環(huán)境E在TU的執(zhí)行過程中不能得到有關(guān)算法Alg輸入/輸出的任何信息。
由于算法的輸入(A,B)分為三種情況,因此,分開討論:
如果輸入(A,B)為誠實的、受保護(hù)的或者惡意的、受保護(hù)的,那么惡意環(huán)境E總是可以獲取輸入(A,B)。在這兩種情況下,模擬器S1將與real環(huán)境下一樣,總是能夠知道輸入(A,B)。
劉俊紅等[4]對廢舊膠粉的改性方法及原理作了簡要介紹,重點綜述了廢橡膠粉在聚乙烯、聚丙烯、聚氯乙烯等橡塑復(fù)合材料中的研究和應(yīng)用進(jìn)展。對廢橡膠粉在橡塑復(fù)合材料中的研究、開發(fā)和應(yīng)用前景進(jìn)行了展望。



綜上所述,我們可以得出在基于單個服務(wù)器的模型中,本文算法(T,U)是VCBP算法的正確執(zhí)行,其中算法的輸入(A,B)可能是誠實的、保密的,誠實的、受保護(hù)的或惡意的、受保護(hù)的。
本節(jié)將本文算法VCBP分別與Shao等[8]提出的CVCC算法和Dong等[9]提出的BPS算法的性能進(jìn)行了比較,如表2所示。其中,PA、SM、MExp、MM、MInv、Pair依次表示加法群G1或G2中的點加運(yùn)算、標(biāo)量乘、乘法群GT中的模冪運(yùn)算、模乘運(yùn)算、模逆運(yùn)算、雙線性對運(yùn)算。

表2 基于單個服務(wù)器的雙線性對外包算法性能比較
根據(jù)3.1節(jié)的安全性分析可知,如果我們設(shè)s=5、i=10,則雙線性對運(yùn)算中敏感信息暴露的概率為10-17,可以忽略不計。
假設(shè)s=5、i=10。由表2可知,與CVCC算法[8]相比,首先,本文算法用戶的計算過程中,不涉及標(biāo)量乘和模冪運(yùn)算。其次,雖然我們的算法用戶的計算過程中增加了1次點加運(yùn)算和2次模逆運(yùn)算,但是這兩種運(yùn)算的計算代價很小,所以增加的計算成本可以忽略不計。最后,在本文算法中,用戶需要多執(zhí)行約42次模乘運(yùn)算,但是,在CVCC算法[8]中用戶需要執(zhí)行1次模冪運(yùn)算。而模冪運(yùn)算的計算復(fù)雜度非常高,用平方乘方法計算1次模冪運(yùn)算,約需執(zhí)行1.5L次模乘運(yùn)算,L是模冪運(yùn)算中指數(shù)的比特長度。通常,L至少取160 bit,因此,1次模冪運(yùn)算大約相當(dāng)于240次模乘運(yùn)算。因此,用戶執(zhí)行1次模冪運(yùn)算的計算代價要遠(yuǎn)遠(yuǎn)大于執(zhí)行42次模乘運(yùn)算的計算代價。同時,CVCC算法[8]和本文算法,用戶均需要執(zhí)行一次Rand子程序。而本文算法中, Rand子程序并不需要執(zhí)行模冪運(yùn)算。另外,CVCC算法[8]是面向車載網(wǎng)的,由于其特殊的應(yīng)用場景,該算法中輸入B是可以公開的,而本文算法VCBP中,輸入A和B是完全保密的,所以,這就導(dǎo)致了CVCC算法和本文算法中云服務(wù)器執(zhí)行雙線性對運(yùn)算的次數(shù)有所差異。除此之外,本文算法VCBP的性能要遠(yuǎn)遠(yuǎn)高于CVCC算法[8]。

本節(jié)做了一些實驗來評估所提算法VCBP和其他算法[8-9]的效率。在實驗中,設(shè)置s=5、i=10,用戶由一臺Intel core i3 CPU(2.5 GHz)、4 GHz內(nèi)存的計算機(jī)模擬。其中,智能合約部署在Hyperledger Fabric上,我們使用另一臺Intel core i5 CPU(1.6 GB)、8 GB的計算機(jī)連接Hyperledger Fabric區(qū)塊鏈系統(tǒng),模擬區(qū)塊鏈系統(tǒng)中的一個節(jié)點去運(yùn)行智能合約,幫助用戶執(zhí)行雙線性對運(yùn)算,該節(jié)點表示區(qū)塊鏈中的任意一個節(jié)點。另外,使用的編程語言為Java,并使用了JPBC(Java-Pairing-Based Cryptography)數(shù)據(jù)庫。
關(guān)于算法中智能合約的部署過程如下:
(1) 設(shè)置Java鏈代碼開發(fā)環(huán)境:首先,利用開源的應(yīng)用容器引擎Docker和Docker Hub的預(yù)構(gòu)建區(qū)塊鏈網(wǎng)絡(luò)組件鏡像來運(yùn)行本地區(qū)塊鏈網(wǎng)絡(luò);其次,安裝構(gòu)建軟件Gradle和HTTP客戶端軟件SoapUI,Gradle用于構(gòu)建鏈代碼,即智能合約,SoapUI用于實現(xiàn)智能合約與Hyperledger Fabric的REST接口間的通信;然后,完成區(qū)塊鏈定義,并啟動本地區(qū)塊鏈網(wǎng)絡(luò);最后,從Hyperledger Fabric的GitHub存儲庫獲取最新源代碼,構(gòu)建Java shim客戶端JAR。
(2) 編寫和構(gòu)建算法中的Java鏈代碼,即智能合約:首先,安裝適用于Eclipse(基于Java的開發(fā)平臺)的Gradle Buildship插件,從GitHub存儲庫中克隆名為ChaincodeTutorial的Java鏈代碼框架項目,并將該項目導(dǎo)入開發(fā)平臺Eclipse中;然后,編寫算法中的智能合約代碼,并利用單元測試框架Junit來測試;最后,使用開發(fā)平臺Eclipse和Eclipse的Gradle Buildship插件構(gòu)建智能合約。
(3) 部署并執(zhí)行鏈代碼:首先,向本地區(qū)塊鏈網(wǎng)絡(luò)注冊已經(jīng)構(gòu)建好的智能合約;然后,打開SoapUI,導(dǎo)入步驟(2)中克隆的Chaincode Tutorial項目中的REST項目,打開REST項目中的ChaincodeLog Deploy請求,并提交請求,至此,算法中的鏈代碼部署完成;最后,調(diào)用函數(shù)運(yùn)行鏈代碼。
本文算法中所部署的智能合約的核心代碼如下,該部分代碼主要實現(xiàn)外包任務(wù)中所有的雙線性對運(yùn)算,即2.3節(jié)中步驟2)由區(qū)塊鏈執(zhí)行的雙線性對運(yùn)算。
protected void uResponse() {
Q1=pairing.pairing(inputA_a1P,inputB_b1Q);
for(int i=0;i<9;i++) {
alpha[i]=pairing.pairing(aP[i],inputB_b1Q);
beta[i]=pairing.pairing(inputA_a1P,bQ[i]);
}
theta[0]=pairing.pairing(aP[9],inputB_b1Q);
theta[1]=pairing.pairing(inputA_a1P,bQ[9]);
}
代碼中,Q1表示e(A+a1P,B+b1Q),alpha[i]表示αm,beta[i]表示βn(m∈{2,3,…,10},n∈{2,3,…,10}),theta[0]和theta[1]分別表示θ1和θ2。其中,函數(shù)pairing.pairing()為JPBC(Java-Pairing-Based Cryptography)數(shù)據(jù)庫自帶的函數(shù),可以直接調(diào)用它來執(zhí)行雙線性對運(yùn)算。
接下來,我們根據(jù)模擬實驗的結(jié)果對所提算法VCBP和其他算法[8-9]進(jìn)行了對比。
圖5是VCBP算法的模擬實現(xiàn)。在算法VCBP中,用戶將復(fù)雜度極高的雙線性對運(yùn)算交給區(qū)塊鏈系統(tǒng),并且由于智能合約的運(yùn)行機(jī)制,用戶可以免去驗證過程,所以,用戶只需執(zhí)行少量的簡單運(yùn)算,如模乘運(yùn)算、點加運(yùn)算等。因此,如圖5所示,在VCBP算法中,用戶執(zhí)行簡單運(yùn)算花費的時間要遠(yuǎn)遠(yuǎn)小于直接執(zhí)行雙線性對運(yùn)算。另外,智能合約的運(yùn)行機(jī)制也保證了算法VCBP的可驗證概率為1,所以VCBP算法是完全可驗證的雙線性對外包算法。
如圖6所示,我們將VCBP算法分別與Shao等[8]和Dong等[9]提出的雙線性對運(yùn)算外包算法中用戶的執(zhí)行時間進(jìn)行比較。如圖6(a)所示,當(dāng)s=5、i=10時,VCBP中用戶的計算成本要遠(yuǎn)遠(yuǎn)低于CVCC[8]。如圖6(b)所示,當(dāng)s=5、i=10 時,VCBP中用戶的計算成本約為BPS算法[9]的一半,另外,本文算法的可驗證概率為1。
圖7比較了VCBP算法和Shao等[8]及Dong等[9]提出的雙線性對運(yùn)算外包算法中服務(wù)器的執(zhí)行時間。由圖7可知,當(dāng)s=5、i=10時,與VCBP相比,CVCC算法[8]中服務(wù)器的計算時間非常低,但是由于CVCC算法中用戶需要執(zhí)行復(fù)雜的模冪運(yùn)算,所以CVCC算法[8]中服務(wù)器的計算時間與VCBP不具有可比性。與BPS[9]相比,VCBP中服務(wù)器的計算消耗也有所降低。
通過上述對比實驗可知,與Shao等[8]提出的算法CVCC算法以及Dong等[9]提出的BPS算法相比,VCBP中用戶的計算代價有了大幅度降低,服務(wù)器的計算代價也有一定降低。另外,本文算法的可驗證概率可達(dá)到1。綜上所述,與已有算法[8-9]相比,本文算法的安全性和性能更高。
基于單個服務(wù)器的安全模型,本文利用智能合約的運(yùn)行特點,將安全外包與區(qū)塊鏈相結(jié)合,提出一個新的雙線性對運(yùn)算外包算法。本文算法能夠保護(hù)用戶數(shù)據(jù)的隱私性,并且用戶從區(qū)塊鏈獲得的數(shù)據(jù)不需要進(jìn)行驗證就可以使用,減少了驗證環(huán)節(jié)。同已有的基于單個服務(wù)器的雙線性對運(yùn)算外包算法相比,本文算法在保證安全性的基礎(chǔ)上,同時提高了用戶和服務(wù)器的計算效率,并且實現(xiàn)了完全可驗證性。