殷紅建,朱 巖,王 靜,郭光來,陳 娥?
1) 北京科技大學(xué)計算機(jī)與通信工程學(xué)院,北京 100083 2) 海信集團(tuán)控股股份有限公司,青島 266071
智能合約作為第二代區(qū)塊鏈技術(shù)的核心,其本質(zhì)是部署在區(qū)塊鏈上的一系列可執(zhí)行數(shù)字協(xié)議.智能合約兼顧區(qū)塊鏈和合約的雙重屬性,具有去中心化、不可篡改、可編程和法律化等特征[1],已經(jīng)被廣泛應(yīng)用于金融、數(shù)字資產(chǎn)管理等諸多領(lǐng)域[2-5].近年來,隨著支持智能合約開發(fā)的區(qū)塊鏈平臺相繼提出,例如以太坊[6]、根鏈(RootStock)[7]以及Hyperledger Fabric[8],開發(fā)人員可通過可編程的語言(如Solidity,Java)在這些平臺上實(shí)現(xiàn)對智能合約的開發(fā)、部署和執(zhí)行.然而,區(qū)塊鏈平臺的開放性使得部署在區(qū)塊鏈上的智能合約是公開透明的,因此合約交易中的所有數(shù)據(jù)也都是公開可見的,這勢必引起合約交易中敏感信息的泄露問題.在電子投票合約中,由于合約數(shù)據(jù)涉及用戶的隱私信息且投票內(nèi)容不能公開,因此合約隱私泄露問題尤為突出.
盡管現(xiàn)有智能合約平臺支持密碼機(jī)制(例如橢圓曲線密碼ECC)可用來保護(hù)投票合約中選票內(nèi)容的隱私,但在計票階段仍需對選票解密后再進(jìn)行統(tǒng)計,這將為投票內(nèi)容的隱私帶來威脅.此外,為了避免無效選票對系統(tǒng)的干擾,需在投票之前對選票內(nèi)容的合法性進(jìn)行驗證,并且驗證過程不能泄露投票內(nèi)容信息.顯然,現(xiàn)有智能合約中的密碼機(jī)制不能滿足智能合約投票系統(tǒng)對數(shù)據(jù)隱私及安全性的需求.因此,設(shè)計新的能夠保護(hù)交易隱私的智能投票合約系統(tǒng)是十分必要的和迫切的.
1981 年,Chaum[9]首次提出了安全電子投票系統(tǒng)的概念,此后涌現(xiàn)出了一大批關(guān)于電子投票協(xié)議構(gòu)造以及安全性的研究[10-13].目前為止,盡管人們對其安全性仍存在一定爭論[14],但電子投票系統(tǒng)已在實(shí)際環(huán)境中得到廣泛應(yīng)用,甚至被用于國家選舉[15].隨著區(qū)塊鏈技術(shù)的出現(xiàn)與發(fā)展,基于區(qū)塊鏈的電子投票系統(tǒng)被相繼開發(fā).2015 年Zhao與Chan[16]設(shè)計了第一個基于區(qū)塊鏈的電子投票方案,該方案能夠在比特幣網(wǎng)絡(luò)中直接運(yùn)行.隨后,Tarasov 與Tewari[17]基于Zcash 設(shè)計了一個新的電子投票協(xié)議,協(xié)議中投票結(jié)果的正確性由可信任第三方和投票者共同保證.2017 年,McCorry等[18]設(shè)計了第一個去中心化的能夠?qū)崿F(xiàn)自動計票功能的投票協(xié)議,并在以太坊平臺以合約的形式進(jìn)行了實(shí)現(xiàn).然而,該系統(tǒng)僅支持小規(guī)模候選人模式,而對于大范圍投票,該協(xié)議則不再適用.Yu等[19]利用環(huán)簽名技術(shù)設(shè)計了基于智能合約的可驗證投票系統(tǒng)并在Hyperledger Fabric 平臺上進(jìn)行了部署實(shí)現(xiàn).
此外,為防止無效選票對投票系統(tǒng)帶來的干擾,需對選票有效性進(jìn)行驗證.零知識集合成員關(guān)系證明協(xié)議(Zero-knowledge set membership proof protocol,ZSMPP)[20]可為選票有效性驗證提供技術(shù)支持,通過零知識證明技術(shù),ZSMPP 協(xié)議允許在不泄露選票內(nèi)容的情況下對公開候選人集驗證選票.2008 年,Camenisch 等[20]提出了集合成員關(guān)系判定問題,并基于Strong Diffie-Hellman (SDH)假設(shè)在雙線性群下構(gòu)造了第一個ZSMPP 協(xié)議.隨后,Morais 等[21]利用數(shù)字簽名方案[22]對文獻(xiàn)[20]的證明階段進(jìn)行優(yōu)化,使計算開銷降低到常數(shù)級別.最近,Yin 等[23]基于聚合函數(shù)構(gòu)造了同時支持屬于和不屬于關(guān)系的ZSMPP 協(xié)議,其安全性同樣依賴于SDH 假設(shè).然而,上述協(xié)議功能復(fù)雜且執(zhí)行過程中均需多次雙線性配對運(yùn)算,因此不宜直接移植到資源受限的智能合約投票系統(tǒng)中.
本文主要目標(biāo)是設(shè)計并實(shí)現(xiàn)基于零知識證明的智能合約投票系統(tǒng).通過構(gòu)造輕量化ZKDMP協(xié)議來驗證選票內(nèi)容的有效性;通過對選票進(jìn)行同態(tài)加密操作從而保障選票內(nèi)容的隱私.該系統(tǒng)的以合約形式自動執(zhí)行,無需第三方機(jī)構(gòu)參與.本文主要貢獻(xiàn)可總結(jié)如下:
(1)設(shè)計了智能合約投票系統(tǒng),該系統(tǒng)可對投票內(nèi)容的有效性進(jìn)行驗證,以避免無效選票對投票系統(tǒng)的影響.投票過程無需第三方機(jī)構(gòu)參與,實(shí)現(xiàn)去中心化投票以及自動化計票.此外,通過Java開發(fā)工具將投票合約編譯成JAR 包文件,并將投票系統(tǒng)以合約代碼的形式部署到區(qū)塊鏈,通過智能合約實(shí)現(xiàn)整個投票過程自動化執(zhí)行.
(2)為了在選票內(nèi)容有效性驗證過程中保護(hù)投票內(nèi)容的隱私,本文構(gòu)造了一個新的交互式零知識集合成員關(guān)系證明協(xié)議.該協(xié)議通過兩輪交互過程,實(shí)現(xiàn)證明者在不泄露投票內(nèi)容具體信息的情況下,向驗證者證明投票內(nèi)容的有效性,即,投票內(nèi)容是候選者集合中的一個.此外,安全性分析表明,所提協(xié)議在離散對數(shù)困難假設(shè)下具有零知識性.
本文設(shè)計的智能合約投票系統(tǒng)是基于支持虛擬機(jī)的區(qū)塊鏈環(huán)境下進(jìn)行開發(fā)運(yùn)行的,投票過程通過合約控制實(shí)現(xiàn),并通過在智能合約中引入交互式零知識證明來保證投票數(shù)據(jù)驗證過程的隱私性.智能合約投票系統(tǒng)框架如圖1 所示,整個投票系統(tǒng)框架主要分為實(shí)現(xiàn)層、技術(shù)層和合約層三部分.
圖1 智能合約投票系統(tǒng)框架Fig.1 Framework of the smart-contract voting system
(1)實(shí)現(xiàn)層:實(shí)現(xiàn)層由區(qū)塊鏈與基于Java 的雙線性配對密碼庫(Java pairing based cryptography library,JPBC[24])兩部分組成,其中區(qū)塊鏈為智能合約的部署和執(zhí)行提供了運(yùn)行環(huán)境,JPBC 庫則為基于配對的密碼方案的實(shí)現(xiàn)提供了底層環(huán)境.
(2)技術(shù)層:技術(shù)層主要是提供了一種交互式零知識證明以及同態(tài)加密技術(shù).零知識證明技術(shù)用于投票內(nèi)容的有效性驗證,確保投票過程中投票內(nèi)容的隱私性.同態(tài)加密方案用于對選票加密,在計票階段利用同態(tài)性直接對密文進(jìn)行操作,避免解密運(yùn)算,確保投票內(nèi)容的隱私性.
(3)合約層:通過智能合約語言將投票系統(tǒng)以條款的形式進(jìn)行描述,并通過Java 開發(fā)工具將投票合約編譯成計算機(jī)可執(zhí)行的合約代碼形式,最終實(shí)現(xiàn)智能合約投票系統(tǒng)按照預(yù)定規(guī)則自動化執(zhí)行.
本文設(shè)計的智能合約投票系統(tǒng)模型如圖2 所示,整個投票系統(tǒng)是基于支持虛擬機(jī)的區(qū)塊鏈系統(tǒng)進(jìn)行設(shè)計開發(fā)的,取代了以往的第三方投票機(jī)構(gòu),從而實(shí)現(xiàn)投票系統(tǒng)的去中心化.
圖2 智能合約投票系統(tǒng)模型Fig.2 Model of the smart-contract voting system
智能合約投票系統(tǒng)執(zhí)行流程如下:首先,投票發(fā)起者創(chuàng)建投票合約,并在合約中指定候選者名單,之后將合約部署到區(qū)塊鏈中;投票者在完成注冊后,可從區(qū)塊鏈中調(diào)用投票合約來進(jìn)行投票,并且在投票之前對選票內(nèi)容的合法性進(jìn)行驗證,驗證通過后將投票結(jié)果加密并按合約規(guī)定上傳選票;當(dāng)所有投票者完成投票后,合約開始計票并將密文狀態(tài)的計票結(jié)果上傳至區(qū)塊鏈;計票結(jié)束后,投票發(fā)起者將從鏈上獲取密文狀態(tài)下的計票結(jié)果,利用自身私鑰解密后,將計票結(jié)果公布到區(qū)塊鏈上.
投票系統(tǒng)是通過智能合約控制實(shí)現(xiàn)的,投票合約在開始執(zhí)行后,整個投票流程會被自動觸發(fā)執(zhí)行,智能合約投票的每一步都會被日志記錄.投票系統(tǒng)可分為初始化、注冊、投票和計票四個階段.
(1)初始化階段:系統(tǒng)初始化階段首先借助JPBC 庫完成對系統(tǒng)參數(shù)的生成,隨后投票發(fā)起者制定投票智能合約并指定候選者名單,隨后將投票合約以JAR 包的形式部署到區(qū)塊鏈.
(2)注冊階段:發(fā)起者在區(qū)塊鏈上完成合約部署之后,投票者需完成系統(tǒng)注冊,注冊完成后,投票者名單會被上傳至區(qū)塊鏈.
(3)投票階段:在投票之初,發(fā)起者需對投票者的投票內(nèi)容進(jìn)行有效性驗證,只有驗證通過,投票才能繼續(xù)進(jìn)行.最后,投票者利用同態(tài)加密技術(shù)對驗證通過的選票進(jìn)行加密,按合約規(guī)定以交易的形式上傳密文狀態(tài)的投票結(jié)果.
(4)計票階段:所有投票者完成投票后,投票合約進(jìn)行計票并將結(jié)果上傳至區(qū)塊鏈.投票發(fā)起者可從區(qū)塊鏈中獲取密文狀態(tài)的計票結(jié)果,利用自身私鑰進(jìn)行解密后以交易的形式公布到區(qū)塊鏈上.
零知識證明是指證明者在不向驗證者透露秘密值的前提下,使驗證者相信自己確實(shí)持有該秘密.基于此,將零知識證明引入智能合約可保證合約中數(shù)據(jù)的隱私性,同時由于智能合約具有觸發(fā)自動執(zhí)行的特點(diǎn),合約狀態(tài)總是可以被保留下來,這就為交互式零知識證明的實(shí)現(xiàn)提供了運(yùn)行平臺.
本文基于離散對數(shù)假設(shè)構(gòu)造一個新的零知識集合成員關(guān)系證明協(xié)議(ZSMPP).該協(xié)議涉及證明者和驗證者兩方,通過兩方交互,實(shí)現(xiàn)證明者在不透露任何消息的情況下,向驗證者證明其擁有的元素屬于一個公開的集合,具體協(xié)議描述如下.
設(shè) Zp是 階數(shù)為p的 整數(shù)群,H為 哈希算法,g是橢圓曲線上一個隨機(jī)生成元,公開集合M表示為M={m1,m2,···,mn}.證明者P 欲向驗證者V 證明自己持有的元素m是 公開集中的某一個,即m∈M,但是不透露元素m本身的信息.
初始條件,證明者P 和驗證者V 共享消息集M,V 擁有安全哈希算H,交互過程如圖3 所示:
圖3 零知識集合成員關(guān)系證明協(xié)議Fig.3 Zero-knowledge set membership proof protocol
(1)P→V:證明者P 首先選取兩個隨機(jī)數(shù)ω,α ∈Zp作為自己的私鑰,計算Commit=(x,y),其中x=gω,y=gαgm,然后將x和y發(fā)送給驗證者;
如果驗證結(jié)果失敗,驗證者輸出結(jié)果為“0”,則表示驗證者V 將駁回P 的證明并且結(jié)束方案;如果檢驗成功,結(jié)果返回為“1”,則表示V 將接收證明者的證明.經(jīng)過上述雙方交互過程,P 向V 證明了自己擁有秘密m但 未向V 透露關(guān)于m任何信息.
(1)完全性.
在提出的交互式證明協(xié)議中,若證明者P 的消息m確實(shí)屬于消息集M且P 能夠遵守協(xié)議指令完成交互,那么V 總是能夠接受P 的證明.
證明:設(shè)g是 橢圓曲線群的一個生成元,由協(xié)議中步驟(4)可知:
在步驟(3)中計算時aj規(guī)定mj∈M且mj≠m,又由于P 能夠遵守協(xié)議指令完成交互,則必有m=mn,又由于y=gαgm以及 γn=ω-αμn,則有
從而可以得出步驟(6)中驗證等式成立.
(2)零知識性.
證明者P 的私鑰 (ω,α)僅自己持有,在交互式證明過程中,證明者將包含消息的承諾y=gαgm發(fā)送給驗證者V,由于計算離散對數(shù)問題是困難的,因此在交互過程中,除了關(guān)于消息m的承諾之外,證明者無法獲取其他任何信息,這保證了整個交互過程中消息m的零知識性.
在設(shè)計和實(shí)現(xiàn)智能合約投票系統(tǒng)之前,我們首先給出具體投票合約.本節(jié)將采用智能合約規(guī)范語言SPESC[25],對投票系統(tǒng)的初始化、注冊、投票和計票四個階段的觸發(fā)條件以及執(zhí)行過程進(jìn)行合約化描述.
如圖4 所示,投票智能合約包括發(fā)起者(Initiator)和投票者(Voter)兩個參與方.該合約包含5 個條款(Term),條款1 表示在投票發(fā)起人進(jìn)行參數(shù)初始化(initParam)之后,可指定候選者名單(對應(yīng)candidateForm 算法);條款2 表示在發(fā)起者指定候選者名單之后,投票者進(jìn)行注冊(voterRegist);條款3 描述的是在投票者注冊完成之后,必須與發(fā)起者進(jìn)行交互式ZSMPP 來驗證選票的有效性;條款4 表示當(dāng)ZSMPP 輸出為“1”時投票者利用Boneh、Goh 和Nissim 提出的 加密算 法[26](簡 稱BGN 算法)對投票內(nèi)容進(jìn)行加密;條款5 表示發(fā)起人在所有投票者完成投票之后,合約進(jìn)行計票(對應(yīng)voteResult 算法),最終發(fā)起者對計票結(jié)果進(jìn)行解密獲取投票最終結(jié)果.合約中條款僅描述了投票各個階段的觸發(fā)條件以及執(zhí)行的算法,具體算法描述將在下節(jié)中給出.
圖4 SPESC 語言編寫的投票智能合約Fig.4 Voting contracts written in SPESC language
智能合約最終將被部署到區(qū)塊鏈平臺進(jìn)行自動化執(zhí)行,如圖5 所示,部署過程可分成兩個階段:首先利用Java 開發(fā)工具將投票系統(tǒng)中的相關(guān)算法編譯成Java Archive (JAR)格式的智能合約代碼;隨后,將JAR 包上傳至區(qū)塊鏈網(wǎng)絡(luò).在發(fā)起者和投票者的共同參與下,最終合約按照預(yù)定規(guī)則自動執(zhí)行.
圖5 智能合約部署流程Fig.5 Deployment process of smart contract
本節(jié)將具體介紹智能合約投票系統(tǒng)以及實(shí)現(xiàn)過程,為了便于后續(xù)敘述,首先給出投票系統(tǒng)中涉及的部分符號及其相關(guān)說明,具體如表1 所示.
表1 符號說明表Table 1 Notation declaration
本節(jié)將基于區(qū)塊鏈系統(tǒng)環(huán)境,根據(jù)投票系統(tǒng)所需的初始化、注冊、投票以及計票四個部分,對智能合約投票系統(tǒng)的設(shè)計以及實(shí)現(xiàn)流程進(jìn)行詳細(xì)的闡述.
初始化階段由合約發(fā)起者執(zhí)行,如圖6 所示.首先需要完成系統(tǒng)參數(shù)生成,生成橢圓曲線乘法循環(huán)群G和整數(shù)群 Z,再根據(jù)群G產(chǎn)生生成元g∈G.群G和 Z的生成是基于JPBC 庫實(shí)現(xiàn)的,其中JPBC中的橢圓曲線選取Type A 類型,如表2 中算法所示.
圖6 智能合約投票系統(tǒng)初始化階段Fig.6 Initialization of the smart-contract voting system
表2 initParam 算法Table 2 initParam algorithm
該算法以群G的階數(shù)rbit和 Z的階數(shù)qbit作為輸入,通過TypeACurveGenerator()生成TypeA 生成器,利用TypeA 生成器得到雙線性對參數(shù),再通過getPairing()獲取雙線性對,最后由雙線性對生成橢圓曲線乘法循環(huán)群和整數(shù)群,生成元g是在橢圓曲線群上隨機(jī)生成的.
接下來,合約發(fā)起者需在合約中指定候選者名單,如表3 所示.該算法輸入一個數(shù)組params,數(shù)組中的每個元素對應(yīng)候選者wj的地址,該地址是候選者的唯一標(biāo)識.假設(shè)有n個候選者,則算法newNum 返回一個整數(shù)z且滿足 2z>n,第k位候選者的投票編號為 2k·z,例如,當(dāng)投票者選擇候選者1 時,對應(yīng)的候選者的編號是 2z,算法返回候選者的候選列表candidateList,大小為n,候選列表中包括候選者的地址,編號以及所得的票數(shù)(初始化值為0),并且會在結(jié)果集resultMap 中存放所有候選者及對應(yīng)的票數(shù).
表3 candidateForm 算法Table 3 candidateForm algorithm
候選者名單指定完成后,合約發(fā)起者需將投票合約以JAR 包的形式部署到區(qū)塊鏈上.圖7 為智能合約發(fā)布的結(jié)果,其中“address”表示合約地址字段,“txid”表示合約交易id 字段.
圖7 智能合約發(fā)布結(jié)果Fig.7 Results of smart contract release
圖8 描述了初始化合約結(jié)果,合約部署完成且初始化后,可看到當(dāng)前投票者和候選者的信息.字段“votersData”代表投票者數(shù)據(jù),其中字段“voter-Txid”為投票者交易的id,從交易中可獲取投票者名單的信息,在合約初始后,投票者名單為空.字段“candidateData”代表候選者信息,“candidateTxid”代表候選者交易id,查看交易id 可獲取候選者名單信息.
圖8 智能合約初始化結(jié)果Fig.8 Results of smart contract initialization
當(dāng)投票合約在區(qū)塊鏈上完成部署后,投票者vi若想獲得投票資格,則需進(jìn)行注冊.如圖9 所示,投票者需先進(jìn)行注冊并獲取合約,投票者可從區(qū)塊鏈上查詢當(dāng)前人員信息,包括獲取到當(dāng)前投票者和候選者名單.
圖9 智能合約投票系統(tǒng)注冊階段Fig.9 Registration of the smart-contract voting system
投票者的注冊過程如表4 中算法所示,算法輸入為數(shù)組params,數(shù)組中存放著作為投票者的唯一標(biāo)識地址,最后算法返回投票者列表voterList.注冊完成之后,列表中將包含投票者地址以及投票者的投票狀態(tài)(初始值為false),此時投票者可從區(qū)塊鏈中查詢候選人名單和當(dāng)前投票者名單.
表4 voterRegist 算法Table 4 voterRegist algorithm
投票者從區(qū)塊鏈上獲取候選人信息后,開始進(jìn)行投票.投票過程借助于區(qū)塊鏈完成,如圖10所示,在投票的前期,投票者vi生 成公私鑰對<ski,pki>,公鑰是橢圓曲線乘法循環(huán)群G中的元素,私鑰是整數(shù)群Z 中的元素.在投票過程中,需對投票者的投票內(nèi)容進(jìn)行有效性驗證,驗證過程調(diào)用交互式零知識集合成員關(guān)系證明協(xié)議ZSMPP,協(xié)議經(jīng)過兩輪交互對投票內(nèi)容有效性進(jìn)行驗證.在交互過程中,投票者相當(dāng)于協(xié)議中的證明者,合約發(fā)起者相當(dāng)于協(xié)議中的驗證者.接下來對投票階段的參數(shù)生成、承諾生成、兩輪交互以及驗證給出具體介紹.
圖10 智能合約投票系統(tǒng)投票階段Fig.10 Voting of the smart-contract voting system
令M={m1,m2,···,mn}投票內(nèi)容(候選者)組成的集合,其中mi是候選者的編號,接下來投票者vi證 明自己的投票內(nèi)容numi屬于投票集合M.投票者首先利用自己的公私鑰生成承諾,如表5 中算法所示,輸入投票者的地址address 以及投票者的投票號num,其中地址作為投票者的身份標(biāo)識,根據(jù)地址判斷投票者是否在注冊者名單內(nèi),若不在名單內(nèi),則算法終止;若在注冊名單中,則可以開始投票.投票者生成自己的私鑰 sk=(sk1,sk2)以及公鑰 pk=(pk1,pk2),其中 pk1=gsk1,pk2=gsk2,根據(jù)投票者的投票號對應(yīng)候選者編號,newNum 函數(shù)返回一個整數(shù)z且 滿足 2z>n,例如,當(dāng)投票者的投票號為2 時,對應(yīng)的候選者的編號wid 為 22·z.最后,該算法生成承諾Commit=(x,y)=(pk1,pk2·gwid)并將其以交易的形式存放到區(qū)塊鏈中.
表5 generateCommit 算法Table 5 generateCommit algorithm
合約發(fā)起者在查詢區(qū)塊鏈得到承諾后,開始執(zhí)行ZSMPP 中的第一輪交互并生成對應(yīng)挑戰(zhàn)碼其中 γj,μj∈Zp.如圖11 所示,在智能合約輸入中,generateChallenge1 為函數(shù),輸入?yún)?shù)為合約發(fā)起者的地址,在合約輸出字段中,“userResult”表示第一輪挑戰(zhàn)碼,其中R={γ1,γ2,···γn-1},U={μ1,μ2,···μn-1}.挑戰(zhàn)碼生成后將發(fā)布到區(qū)塊鏈中.
圖11 第一輪挑戰(zhàn)碼對應(yīng)的交易Fig.11 Transaction of the first challenge
如表6 中算法所示,算法generateChallenge2 計算集合A中 所有元素與x的和,利用哈希函數(shù)對和求哈希,最后返回第二輪的挑戰(zhàn)碼miuN,然后發(fā)布交易到區(qū)塊鏈.投票者從區(qū)塊鏈中獲取第二輪的挑戰(zhàn)碼之后,利用自身私鑰 sk=(sk1,sk2)計 算γn=sk1-sk2μn并 生成第二輪挑戰(zhàn)碼gamaN(γn).如圖12所示,在合約輸入中,generateResponse2 為函數(shù),輸入?yún)?shù)是投票者的地址,合約將輸出第二輪的響應(yīng)碼gamaN.最后,合約發(fā)起者收到第二輪響應(yīng)碼之后,會驗證等式
表6 generateChallenge2 算法Table 6 generateChallenge2 algorithm
圖12 第二輪響應(yīng)碼對應(yīng)的交易Fig.12 Transaction of the second response
對投票者投票內(nèi)容的有效性進(jìn)行驗證.若驗證失敗,則終止投票;否則,投票者對投票內(nèi)容進(jìn)行加密并將投票狀態(tài)改為true.
當(dāng)選票有效性通過驗證后,投票者將通過BGN 同態(tài)加密算法[26]對其進(jìn)行加密處理.如圖13所示,BGN(wj)表示第i位投票者對第j位候選者投票結(jié)果對應(yīng)的密文.當(dāng)所有投票者完成投票后,合約將執(zhí)行計票程序.
圖13 智能合約投票系統(tǒng)計票階段Fig.13 Vote-counting of the smart-contract voting system
表7 中算法描述了投票者對投票內(nèi)容加密以及合約計票過程.其中BGN 算法滿足加法同態(tài)性,即BGN(w1)+BGN(w2)=BGN(w1+w2).合約統(tǒng)計所有候選者wj的 最終投票結(jié)果表示為result(wj)=BGN1(wj)+BGN2(wj)+···+BGNs(wj)并上傳到區(qū)塊鏈上.
表7 voteResult 算法Table 7 voteResult algorithm
接下來將對本文提出的基于零知識證明的智能合約投票系統(tǒng)安全特性進(jìn)行分析,具體如下:
(1)選票有效性.
指選票內(nèi)容是候選者集合中的一員,通過執(zhí)行零知識集合成員證明協(xié)議,判定選票內(nèi)容有效性,若選票內(nèi)容不屬于候選者集合,則終止投票活動.
(2)選票隱私性.
主要考慮所選候選人的隱私.在有效性驗證階段,ZSMPP 協(xié)議的零知識性可以保證驗證過程不泄露選票信息.此外,計票是對密文狀態(tài)下的選票進(jìn)行同態(tài)運(yùn)算,選票的隱私性基于安全的BGN同態(tài)加密算法實(shí)現(xiàn).
(3)唯一性.
每個注冊投票者初始投票狀態(tài)都是false,在完成投票之后該狀態(tài)變成true,整個過程都以交易的形式被記錄在區(qū)塊鏈中,由區(qū)塊鏈的不可篡改性保證了每個投票者只能參與一次投票.
(4)無監(jiān)督性.
投票協(xié)議以智能合約的形式被部署到區(qū)塊鏈平臺并按照預(yù)定規(guī)則自動執(zhí)行,由于區(qū)塊鏈的不可篡改性和共識機(jī)制保證預(yù)定規(guī)則不變性和規(guī)則執(zhí)行的正確性,從而確保投票合約中僅需發(fā)起者和投票者兩個實(shí)體,無需可信監(jiān)票人參與.
(5)自計票性.
協(xié)議計票過程由智能合約按照事先制定的規(guī)則自動化執(zhí)行,當(dāng)觸發(fā)計票條件,即所有投票者完成投票后,合約自動執(zhí)行voteResult 算法對密文狀態(tài)的選票進(jìn)行同態(tài)運(yùn)算并將密態(tài)計票結(jié)果上傳至區(qū)塊鏈.
表8 展示了本文提出的投票協(xié)議與現(xiàn)有4 個投票方案之間關(guān)于安全特性的對比,從結(jié)果中不難發(fā)現(xiàn),僅有文獻(xiàn)[10]和本文提出的方案能夠?qū)崿F(xiàn)對投票內(nèi)容的有效性驗證,然而該文投票過程需要在可信監(jiān)票人的參與下完成.文獻(xiàn)[11]提出的投票方案雖然能夠追蹤到實(shí)施重復(fù)投票的攻擊者,但犧牲了投票的唯一性特征.此外,本文計票過程由智能合約程序自動完成,而文獻(xiàn)[10~12]則需要投票發(fā)起者或監(jiān)票人參與才能實(shí)現(xiàn).
表8 不同方案之間安全特性對比Table 8 Comparison of security features
本節(jié)將通過仿真實(shí)驗對提出的智能合約投票協(xié)議的性能進(jìn)行分析,實(shí)驗運(yùn)行在2.6 GHz 英特爾CPU 和8 GB 內(nèi)存的64 位Ubuntu 16.04 操作系統(tǒng)上.基于交互式零知識證明的的智能合約投票系統(tǒng)運(yùn)算效率主要取決于投票階段和計票階段,本節(jié)將從以下兩方面來對投票系統(tǒng)進(jìn)行性能評估,一是針對不同的投票者數(shù)量,對投票系統(tǒng)的投票和計票階段進(jìn)行耗時對比;二是針對不同的候選人數(shù)量,對投票系統(tǒng)的投票和計票階段進(jìn)行耗時對比.
圖14 展示的是當(dāng)候選者數(shù)量為5 時,對不同數(shù)量投票者在投票階段和計票階段的耗時對比圖,從圖中可以發(fā)現(xiàn),當(dāng)投票者數(shù)量達(dá)到500 時,投票和計票過程均能在8000~9000 ms 之間完成.圖15 展示的是當(dāng)投票者數(shù)量為100 時,針對不同數(shù)量的候選者,投票階段和計票階段的耗時對比圖,當(dāng)候選者數(shù)目為20 時,投票和計票時間分別是7784 ms 和9218 ms.實(shí)驗結(jié)果表明,隨著投票者或候選者數(shù)量的增加,投票與計票階段的耗時均呈線性增長,智能合約投票系統(tǒng)能夠高效實(shí)施.
圖14 不同數(shù)量投票者耗時對比Fig.14 Time cost of different numbers of voters
圖15 不同數(shù)量候選者耗時對比Fig.15 Time cost of different numbers of candidates
本文設(shè)計了基于交互式零知識證明的智能合約投票系統(tǒng),實(shí)現(xiàn)投票過程的去中心化以及計票過程的自動化.基于離散對數(shù)困難假設(shè),本文構(gòu)造了一個新的交互式零知識集合成員關(guān)系證明協(xié)議,通過將該協(xié)議引入到投票合約的設(shè)計中,實(shí)現(xiàn)投票者在不透露投票內(nèi)容的前提下向發(fā)起者證明投票內(nèi)容的有效性.此外,通過將投票合約編譯成JAR 包,實(shí)現(xiàn)智能合約投票系統(tǒng)在區(qū)塊鏈中的部署和自動化執(zhí)行,保證了投票數(shù)據(jù)的有效性和隱私性.實(shí)驗結(jié)果表明,本文提出的智能合約投票系統(tǒng)在投票和計票階段均可高效實(shí)施.