楊亞濤,劉德莉,劉培鶴,曾萍,肖嵩
(1.西安電子科技大學(xué)通信工程學(xué)院,陜西 西安 710071;2.北京電子科技學(xué)院電子與通信工程系,北京 100070)
電子投票為目前的紙質(zhì)投票提供了一種方便且成本效益高的替代方案。早在1981 年Chaum[1]就首次提出了電子投票技術(shù),電子投票的安全保障也被認(rèn)為是最難被解決的問題之一[2]。當(dāng)前的電子投票系統(tǒng)大多以密碼學(xué)為基礎(chǔ)保障,根據(jù)所依據(jù)的密碼學(xué)工具不同主要分為三類:基于混合網(wǎng)絡(luò)的電子投票方案[3-5]、基于盲簽名的電子投票方案[6-8]以及基于同態(tài)加密的電子投票方案[9-11]。其中,同態(tài)加密技術(shù)逐漸被越來越多的電子投票方案所采用,其構(gòu)造過程更加清晰簡單,且加密過程具有同態(tài)性,可以較好地解決遠(yuǎn)程電子投票中的隱私保護和數(shù)據(jù)安全問題。
目前,大多數(shù)電子投票系統(tǒng)都依賴第三方機構(gòu)的管理和計票,選票面臨被黑客攻擊或被第三方機構(gòu)篡改的風(fēng)險,這也給投票系統(tǒng)帶來較大的安全隱患,甚至使投票失敗。區(qū)塊鏈中的存儲信息去中心化、不可篡改性和公開透明等特點,非常適合安全電子投票系統(tǒng)中公開不可篡改的公告板的要求,因此將區(qū)塊鏈技術(shù)應(yīng)用于電子投票領(lǐng)域具有非常廣闊的應(yīng)用前景。
同態(tài)加密技術(shù)應(yīng)用于電子投票系統(tǒng)中,允許在不解密的情況下計算選票。目前,由于ElGamal和Paillier 加密算法具有加法同態(tài)特性,因此在電子投票中的應(yīng)用較多。其中,ElGamal 加密算法在Helios[12]系統(tǒng)中得到了較好實踐。文獻[13]提出了具有乘法同態(tài)性質(zhì)的ElGamal 加密方案的增強形式,乘法群生成器的使用保證了投票方案的安全性。文獻[14]提出了一種分布式同態(tài)簽密的電子投票方案,該方案可以快速完成簽名驗證,同時提高選舉的可信度。文獻[15]利用同態(tài)加密對選民信息進行加密來保證選民信息的隱私安全,但這種加密方式?jīng)]有發(fā)揮同態(tài)加密的最大優(yōu)勢,造成算力資源的浪費。文獻[16]分別將ElGamal 算法和Paillier 算法應(yīng)用于電子投票系統(tǒng),并對2 種算法的性能進行對比。文獻[17]將Ducas 等[18]設(shè)計的自舉全同態(tài)加密方案應(yīng)用于電子投票系統(tǒng),將全域密文轉(zhuǎn)換成具有特定語義的密文,避開了零知識證明架構(gòu)的煩瑣交互。文獻[19]提出的Schulze 投票方案使用BGV(Brakerski-Gentry-Vaikuntanathan)全同態(tài)加密算法來加密選票,實現(xiàn)計票過程中的隱私保護。文獻[11]提出一種基于SEAL 庫的同態(tài)加權(quán)電子投票系統(tǒng),使用 BFV(Brakerski-Fan-Vercauteren)全同態(tài)加密方案保證系統(tǒng)的抗量子攻擊特性和安全性,同時對電子投票方案性能也進行了分析。
區(qū)塊鏈技術(shù)替代可信第三方應(yīng)用于電子投票系統(tǒng)中,可以避免投票系統(tǒng)出現(xiàn)單點故障,增強系統(tǒng)的安全性。文獻[20]展示了一個基于區(qū)塊鏈投票系統(tǒng)的概念框架,提出的方案可以解決拒絕服務(wù)攻擊問題,但不具備抗脅迫性等安全屬性。文獻[21]提出了一種基于以太坊的輕量級遠(yuǎn)程區(qū)塊鏈電子投票系統(tǒng),并采用變化的哈希值來增加系統(tǒng)的抗脅迫性。文獻[22]使用Hyperledger Fabric 來部署投票系統(tǒng),使用Paillier 加密算法、零知識證明和可鏈接環(huán)簽名等密碼技術(shù)來提供獨立于區(qū)塊鏈平臺的安全和隱私保護功能。文獻[23]將區(qū)塊鏈與ElGamal算法相結(jié)合,利用ElGamal 加法同態(tài)性質(zhì)來保證選票安全。區(qū)塊鏈應(yīng)用于電子投票解決了系統(tǒng)依賴第三方機構(gòu)的弊端,而同態(tài)加密算法的引入又能保證投票過程的不可操縱性。目前,應(yīng)用在電子投票領(lǐng)域的同態(tài)加密算法多為部分同態(tài)加密算法,不滿足同時進行加法和乘法操作的客觀需要,在安全性和運算效率上也有所不足。
本文設(shè)計的投票系統(tǒng)使用了由我國國家密碼管理局發(fā)布的商用密碼標(biāo)準(zhǔn)算法SM2、SM4 和文獻[24]提出的BFV 全同態(tài)加密算法,并選擇基于SEAL庫的BFV 同態(tài)加密方案。SEAL 庫是微軟公司基于C++開發(fā)的開源全同態(tài)加密軟件庫。
本文的主要貢獻如下。
1) 提出了一個基于BFV 全同態(tài)加密和區(qū)塊鏈相結(jié)合的電子投票系統(tǒng)方案BFV-Blockchainvoting。該方案使用SM2 算法對投票者的注冊信息進行簽名處理,使用SM4 算法加密選票,結(jié)合可以互相監(jiān)督的兩方共同監(jiān)管完成選票的獲取,可以保證投票過程具有不可操縱性、匿名性、可驗證性、不可重用性、不可脅迫性和抗量子攻擊等安全屬性。使用BFV 全同態(tài)加密算法對選票加密,利用同態(tài)加密密文可計算的性質(zhì),實現(xiàn)計票過程的隱私保護。使用區(qū)塊鏈替代第三方機構(gòu),利用智能合約實現(xiàn)安全性驗證和自計票功能,有效避免了因過分依賴第三方機構(gòu)而產(chǎn)生的安全隱患。
2) 對方案進行了初步構(gòu)建和性能測試。基于Golang 編寫的公鏈系統(tǒng)作為底層架構(gòu),通過測試分析,本文系統(tǒng)單張選票的計票時間平均為1.69 ms。相比于Pandey 等[20]提出的VoteChain 投票系統(tǒng)的計票時間減少了98.87%;相比于楊亞濤等[11]提出的基于SEAL 庫的同態(tài)加權(quán)電子投票系統(tǒng)的計票時間減少了9.62%;相比于Panja 等[25]提出的基于區(qū)塊鏈的端到端的電子投票系統(tǒng)的計票時間減少了32.4%。該方案適用于多種投票場景,可以滿足大型投票場景的效率要求。
本文系統(tǒng)由5 個主要實體組成,具體說明如下。
投票者Vi:具有投票權(quán)的投票者集合,其中
管理員A:負(fù)責(zé)生成一組唯一且隨機的電子選票,并以匿名的方式將選票與投票者共享。
主持人M:負(fù)責(zé)保護投票者的隱私,將選票匿名后分發(fā)給投票者。
候選人Ck:合格的選舉對象集合,其中
區(qū)塊鏈網(wǎng)絡(luò):一個基于國密算法的公鏈系統(tǒng),是一個公開、可訪問、不可篡改的公告板,通過智能合約實現(xiàn)票據(jù)合法性檢驗、自計票。
系統(tǒng)關(guān)鍵參數(shù)及含義如表1 所示。

表1 系統(tǒng)關(guān)鍵參數(shù)及含義
2.2.1 系統(tǒng)架構(gòu)
通過分析電子投票系統(tǒng)的基本流程,可以得到該系統(tǒng)網(wǎng)絡(luò)架構(gòu),如圖1 所示。

圖1 電子投票系統(tǒng)網(wǎng)絡(luò)架構(gòu)
傳統(tǒng)的電子投票系統(tǒng)需要依賴第三方機構(gòu)與中心服務(wù)器進行數(shù)據(jù)管理,這種結(jié)構(gòu)容易造成第三方機構(gòu)篡改選票或中心服務(wù)器被攻擊癱瘓的潛在風(fēng)險。本文系統(tǒng)采用區(qū)塊鏈的P2P 網(wǎng)絡(luò)結(jié)構(gòu),不需要第三方機構(gòu)進行計票,通過調(diào)用智能合約實現(xiàn)票據(jù)合法性檢驗與自計票功能,可以提升系統(tǒng)的安全性與穩(wěn)健性。
在本文系統(tǒng)中,根據(jù)權(quán)限不同,區(qū)塊鏈節(jié)點分為普通節(jié)點和特殊節(jié)點,普通節(jié)點是具有投票資格的投票者,而特殊節(jié)點包括管理員和主持人。各節(jié)點通過區(qū)塊鏈網(wǎng)絡(luò)連接,共同訪問鏈上數(shù)據(jù),并通過瀏覽器訪問Web 前端的可視化投票界面。
2.2.2 智能合約設(shè)計
基于同態(tài)加密的智能合約架構(gòu)主要分為上下兩層:網(wǎng)絡(luò)層和智能合約層。網(wǎng)絡(luò)層是整個系統(tǒng)的核心,采用基于國密算法的公鏈系統(tǒng),鏈上的節(jié)點根據(jù)權(quán)限不同分為普通節(jié)點和特殊節(jié)點,其中,普通節(jié)點是具有投票資格的投票者,而特殊節(jié)點包括管理員和主持人。智能合約層主要負(fù)責(zé)整個投票系統(tǒng)的運轉(zhuǎn),包括生成BFV 同態(tài)加密算法的密鑰對、廣播BFV 算法公私鑰、收集選票、驗證選票是否合法、計票和廣播選票結(jié)果等環(huán)節(jié)。智能合約執(zhí)行生成創(chuàng)世區(qū)塊、設(shè)置節(jié)點以及監(jiān)聽端口等工作,然后被部署在鏈上,時刻監(jiān)聽鏈上信息。一旦投票者點擊提交選票,區(qū)塊鏈中便會新增一個區(qū)塊,智能合約通過區(qū)塊獲取投票信息,收集選票進行驗證和計票,在計票時間結(jié)束后,解密選票信息同時廣播結(jié)果。
本文設(shè)計的投票系統(tǒng)BFV-Blockchainvoting的區(qū)塊鏈底層架構(gòu)為自建的基于國密算法的公鏈系統(tǒng),該系統(tǒng)是基于 REST/JSON API、TCP服務(wù)器、國密算法和工作量證明(PoW,proof of work)共識算法的區(qū)塊鏈系統(tǒng)。相比于Hyperledger Fabric 和以太坊等架構(gòu),本文系統(tǒng)使用的架構(gòu)更為安全可靠,減少了由于頻繁更新應(yīng)用系統(tǒng)經(jīng)常面臨崩潰等問題。Blockchain.go為支撐底層架構(gòu)的主要代碼,其數(shù)據(jù)結(jié)構(gòu)如表2所示。

表2 Blockchain.go 數(shù)據(jù)結(jié)構(gòu)
Voting.go 為本文系統(tǒng)的底層智能合約,智能合約中涉及的主要方法及功能如表3 所示。

表3 智能合約方法及功能
基于BFV 全同態(tài)加密算法的智能合約主要算法如算法1 所示。首先,獲得選票bi后,初始化檢查bi是否屬于選票名單γ,如果屬于,智能合約則通過檢查投票者是否被標(biāo)記來確認(rèn)投票者是否已經(jīng)投過票,如果voters[i]=false,說明投票者為首次進行投票,符合計票要求,再通過調(diào)用SEAL 庫的全同態(tài)加法運算進行計票。其次,該選票計票結(jié)束后,對選票進行標(biāo)記,設(shè)置voters[i]=true,避免雙重投票。最后,對全部選票計票結(jié)束后,調(diào)用SEAL 庫全同態(tài)加法的解密算法,將計票結(jié)果解密,恢復(fù)最終計票結(jié)果。


在統(tǒng)計選票時,通過執(zhí)行智能合約,使用BFV 全同態(tài)加密算法進行密文計票,最終在計票時間結(jié)束后,自動解密選票并公布結(jié)果。智能合約主要通過全同態(tài)加密機制及其密碼協(xié)議來保障其安全性,每張選票都以密文形式計入智能合約并參與計算,在整個計票過程中選票信息始終保密,保證了計票過程的安全性。
本文提出的BFV-Blockchainvoting 方案主要包括4 個連續(xù)的階段,每個階段都發(fā)生在投票組織者預(yù)先確定的特定時間范圍內(nèi)。設(shè)G是橢圓曲線上的一個點,其階為素數(shù)q,G的坐標(biāo)為和a2是有限域上定義一條橢圓曲線的元素是消息摘要為vbit 的密碼雜湊函數(shù)。圖2 為電子投票系統(tǒng)流程。

圖2 電子投票系統(tǒng)流程
2.3.1 注冊階段
在注冊階段,管理員A使用由國家密碼管理局發(fā)布的SM2 簽名算法對投票者的公鑰進行簽名。具體簽名過程如下。
1) 管理員簽名密鑰生成。管理員A需要一組簽名密鑰對,以便將合格的投票者添加到投票者名冊時對其進行簽名。注冊器隨機選取密鑰根據(jù)此密鑰計算出與之對應(yīng)的公鑰為
2) 投票者密鑰生成和注冊。投票者Vi必須擁有與其身份對應(yīng)的選舉密鑰對,Vi選擇一個密鑰與之對應(yīng)的公鑰為PV=Gxv。在注冊階段,投票者Vi和管理員A共享其公鑰。
3) 管理員對投票者的公鑰簽名。為了授予Vi投票權(quán),管理員A事先要驗證投票者的資格,對于符合資格的投票者,對其公鑰進行SM2 簽名后再添加到投票者名冊中。簽名的生成過程為

其中,IDA是管理員A的可辨別標(biāo)識,本文選用管理員的地址值作為標(biāo)識,IDA的長度為entlAbit;ENTLA是由整數(shù)entlA轉(zhuǎn)換而成的2 個字節(jié)。式(1)將橢圓曲線中各種參數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為比特串,然后對投票者Vi的公鑰PV進行簽名,計算

選擇隨機數(shù)k∈[1,q-1],計算橢圓曲線上的點(x1,y1)=kG,然后計算

其中,(r,s) 是簽名值。
在注冊階段結(jié)束時,管理員A公布投票者名冊。
2.3.2 獲取選票
1) 選票生成。管理員A生成n個唯一且隨機的數(shù)字選票bi,i∈[1,n]。
2) 請求投票。投票者Vi的公鑰對主持人M公開,Vi向M請求投票后,M通過驗證Vi的簽名確認(rèn)他們是否符合投票資格。
3) 驗證投票者身份。主持人M收到投票者Vi的公鑰PV后,通過SM2 驗簽算法進行驗證,檢查Vi是否存在于投票者名冊中并且驗證簽名(r,s) 是否有效。
首先,檢查r,s∈[1,q-1]是否成立,如果成立,設(shè)計算如果t=0,則驗證不通過;否則,計算橢圓曲線上的點

4) 主持人請求選票。如果驗證通過,主持人M將投票者的公鑰PV發(fā)送給管理員A,請求獲得選票。
5) 選票分配和加密。管理員A收到主持人M的投票請求后,將選票按照特定的置換順序隨機分配給投票者Vi。
在將選票分配給主持人M以發(fā)送給Vi之前,A與Vi利用SM2 的密鑰交換協(xié)議協(xié)商出SM4 的加密密鑰ki,ki為128 bit。然后利用SM4 算法對選票進行加密。
使用ki生成輪密鑰后對選票進行如下加密

其中,SM4-Enc是SM4 加密函數(shù),enbi是加密后的選票。對選票進行加密的目的是向主持人M隱藏選票,Vi拿到的選票是匿名的。管理員A將enbi發(fā)送給M。
6) 加密選票傳輸。主持人M將加密后的選票enbi打亂順序,然后發(fā)送給投票者Vi。
7) 解密選票。Vi收到enbi后,將其解密

其中,SM4-Dec 是SM4 的解密函數(shù)。
2.3.3 投票階段
持有選票的已經(jīng)登記的投票者Vi可以對候選人Ck進行投票。
1) 智能合約生成BFV 公私鑰對
私鑰sk 是隨機生成的一個系數(shù)為-1、0 或1 的多項式,公鑰pk=([ -ask +e]p,a)。其中,a為在密文空間中隨機生成的一個多項式,其系數(shù)模為p;e為噪聲多項式,是在離散高斯分布中隨機選取的一組小系數(shù),e在此處只用一次,用完后丟棄。
生成BFV 公私鑰對后,私鑰由本地數(shù)據(jù)庫保留,公鑰pk 通過區(qū)塊鏈分享給所有投票者Vi。
2) 雙重加密

其中,vote=(c1,c2,···,cm)表示候選人Ck的序列。cm=BFV-Enc(candm)表示加密后的選票,BFV-Enc 表示BFV 同態(tài)加密函數(shù)。

BFV 全同態(tài)加密是建立在環(huán)上的同態(tài)加密方案,密文由2 個多項式組成,加密過程為

其中,rlk 為計算密鑰,用于BFV 中的密文計算;m為明文,本文方案中投票者的選票bi中對某個候選人的candk即需要加密的明文;T為分解模數(shù),為系數(shù)為-1、0 或1 的多項式;t為遠(yuǎn)小于系數(shù)模p的整數(shù);e1、e2取自相同的高斯離散分布,這些多項式只在加密過程中使用,使用完后丟棄;pk 為 BFV 的公鑰,pk0=pk[0],pk1=pk[1]。
3) 提交選票
投票者Vi提交選票觸發(fā)智能合約,一旦智能合約的結(jié)果被附加到區(qū)塊鏈,投票將被永久保存。
2.3.4 計票階段
投票階段結(jié)束后,智能合約將收集此階段內(nèi)出現(xiàn)在區(qū)塊鏈上的選票,以進行驗證和計數(shù)。為了驗證,管理員A公開分配給投票者Vi所有選票γ。智能合約收到后進行驗證,如果∈γ
ib,將檢查所附的投票順序,依次將選票密文計入候選人Ck的票數(shù)。

其中,Add(cim,cjm,rlk)表示將投票者vi和vj對候選人candm的投票情況密文相加的結(jié)果,利用全同態(tài)加密密文可計算的性質(zhì),即可計算出所有候選人的密文票數(shù)總和;cti[0]和cti[1]分別表示明文mi加密后得到的兩位密文;ctj[0]和ctj[1]分別表示明文mj加密后得到的兩位密文。
計票階段結(jié)束后,智能合約用生成的BFV 私鑰sk 解密選票結(jié)果,并將選票結(jié)果在區(qū)塊鏈上發(fā)布。

其中,m′為BFV 解密后的計票結(jié)果,c0=cm[0],c1=cm[1]。
表4 總結(jié)了BFV 同態(tài)加密算法在本文方案中各個階段的具體應(yīng)用。

表4 BFV 同態(tài)加密算法在本文方案中各個階段的具體應(yīng)用
chainvoting 的方案設(shè)計,方案中涉及的加密算法有SM2、SM4 和BFV 全同態(tài)加密算法,接下來,分別對這幾種算法在方案中的密鑰管理過程和必要性進行解釋。
1) 密鑰生成
SM4 的密鑰ki由管理員A和投票者Vi通過SM2 的密鑰交換協(xié)議協(xié)商得到,ki為128 bit。
BFV 算法的密鑰由智能合約調(diào)用SEAL 庫生成,其中安全參數(shù)設(shè)置為λ=2 048。
2) 密鑰分發(fā)與更新
SM2 的私鑰xa由管理員A保存,公鑰PA公開。
SM4 算法的密鑰ki由投票者Vi和管理員A各自保存,分別用來加密和解密。
BFV 算法的私鑰sk 由本地數(shù)據(jù)庫保存,公鑰pk 由智能合約廣播,投票者Vi保存。
每次啟動BFV-Blockchainvoting 系統(tǒng)組織一次投票時,都將進行密鑰更新,SM2、SM4、BFV 的密鑰全部重新生成。
3) 密鑰銷毀
本文提出的BFV-Blockchainvoting 方案主要包括4 個連續(xù)的階段,每個階段都發(fā)生在投票組織者預(yù)先確定的特定時間范圍內(nèi)。時間段由智能合約通過方法TimeSetup()設(shè)置,在選票公布結(jié)束后,SM2、SM4、BFV 的密鑰全部回歸初始化配置。
SM2 算法應(yīng)用在投票者注冊階段,在此階段管理員對投票者的公鑰進行簽名,標(biāo)記合法的投票者,形成投票者名冊,以便主持人在分發(fā)選票時識別合法的投票者。SM4 算法應(yīng)用在獲取選票階段,為了保證傳輸過程中選票信息的機密性,管理員將選票使用SM4 加密后分發(fā)給主持人,主持人再將加密后的選票分發(fā)給投票者,投票者解密選票信息后進行投票,通過上述流程保證了投票過程的不可操縱性。相比于國外的RSA、ECC、AES 等算法,我國的SM2 和SM4 算法自主可控、安全可靠、處理速度快、使用方便快捷。
本文提出的電子投票系統(tǒng)BFV-Block chainvoting是以區(qū)塊鏈為底層框架的投票系統(tǒng),該系統(tǒng)基于未花費交易輸出(UTXO,unspent transaction output)[26]安全模型進行選票的分發(fā)與投出。UTXO 模型的概念來源于比特幣,用來處理關(guān)聯(lián)在某個比特幣地址上的比特幣交易金額,是一個包含了數(shù)據(jù)與可執(zhí)行代碼的數(shù)據(jù)結(jié)構(gòu)。UTXO 模型中的每一筆輸入都來自上一筆UTXO 的輸出,直到交易結(jié)束。本文方案中每張選票的分發(fā)或投出都依據(jù)UTXO 模型的輸入輸出原理進行。UTXO 模型的使用可以減輕鏈上計算負(fù)擔(dān)、抵御重放攻擊、增強投票的隱私性。
本文提出的電子投票方案主要分為4 個階段:注冊、獲取選票、投票和計票。在投票者注冊階段,使用SM2 簽名算法對投票者的注冊信息進行簽名處理,標(biāo)記投票者信息。在獲取選票階段,使用SM4算法加密選票,選擇互相監(jiān)督的機構(gòu)(管理員和主持人)執(zhí)行安全的多方監(jiān)管,而互相監(jiān)督的雙方不會出現(xiàn)串通行為,從而保證選票在由主持人轉(zhuǎn)交給投票者的過程中,主持人不知道選票信息。因此本文方案在注冊階段和獲取選票階段是安全的。
計票階段由區(qū)塊鏈的智能合約進行自動計票,智能合約的計票功能由底層代碼設(shè)計,同時在計票過程中沒有任何一方的參與,所以計票階段也是安全的。
因此,證明本文提出的電子投票方案的安全性可以歸約為證明方案中投票階段的安全性。本文參考文獻[27],選用Game Model 來證明投票階段的安全性,在該模型中,允許對手通過預(yù)言機查詢加密后的選票信息。
BS 安全性:如果在下面的博弈中,沒有多項式有界對手A 對挑戰(zhàn)者C具有不可忽略的優(yōu)勢,那么稱該投票方案是BS[27]安全的。
1) C運行公鑰生成算法PublicKey(sk)生成公鑰,并將公鑰pk 交給A。
2) A 通過預(yù)言機選擇明文mi,i∈ [1,…,n],并查詢不同明文的密文ci,i∈ [1,…,n]。
3) A 發(fā)送相同長度的明文m0、m1給C,C隨機的選擇b∈{0,1},加密mb發(fā)送給A。
4) A 輸出猜測b′∈{0,1},如果b=b′ 則攻擊成功。但在投票階段,本文方案選用BFV 全同態(tài)加密算法對選票進行加密,BFV 算法是基于環(huán)上錯誤學(xué)習(xí)(RLWE,learning with error over ring)問題的算法,所以A 的優(yōu)勢可以規(guī)約為解決RLWE 問題的優(yōu)勢,因此

其中,A 的優(yōu)勢可以忽略不計。對于任意多項式時間A 獲勝的概率定義為

綜上所述,本文方案在投票階段是BS 安全的,同時本文提出的電子投票方案是安全的。
1) 不可重用性(防止雙重投票)
不同場景下投票政策不同,有些政策允許投票者使用同一張選票進行多次投票,只計算他們的第一張選票。但是有些政策只允許投票者提交一次選票,取消多次提交選票的投票者的投票資格。
在這2 種情況下,本文方案都是抵制雙重選票的,因為本文方案選用區(qū)塊鏈系統(tǒng)作為公告板。對于前者,智能合約掃描區(qū)塊鏈,所有多次出現(xiàn)的選票,只計算第一次出現(xiàn)的選票。對于后者,智能合約取消多次出現(xiàn)選票的投票者的投票資格。
2) 不可脅迫性
投票者收到有效的選票bi才可以進行投票,在本文提出的方案中,投票者并沒有直接獲得選票,投票者收到的是經(jīng)過密鑰ki加密后的選票enbi。這意味著威脅者要求投票者解密選票后,才可以拿到投票者的投票憑證。投票者可以用解密enbi,然后將假選票 ′ib分享給威脅者。根據(jù)DDH(decisional diffie-hellman)假設(shè),不可能在一個概率多項式時間內(nèi)通過暴力破解區(qū)分出(g,g a,g b,g c,k i=gabc)和其中假設(shè)為

3) 不可操縱性
投票者投出的選票在區(qū)塊鏈上公開永久地存儲,本文方案使用BFV 同態(tài)加密算法加密選票,因此投票在整個過程中都是被隱藏的。投票者無法在勢均力敵的競選中通過投票來支持某位候選人從而操縱選舉結(jié)果。
4) 匿名性
本文方案利用互相監(jiān)督的機構(gòu)來保護選民的隱私,使各方無法同時擁有選民和選票的信息,避免通過某張選票的信息而關(guān)聯(lián)到投票者投票的內(nèi)容,使投票者的匿名性得到保證。
5) 可驗證性
計票階段結(jié)束時,智能合約會在區(qū)塊鏈上發(fā)布投票結(jié)果,投票者可以驗證他們的選票是否被正確清點。
6) 抗量子攻擊安全性
BFV 全同態(tài)加密運算的安全性基于RLWE 上的格困難問題,可以抵抗量子計算攻擊,保證了系統(tǒng)的抗量子攻擊安全性。
本文測試的實際測試環(huán)境為Intel 酷睿i5 處理器、8 GB 內(nèi)存、2.3 GHz、Windows 10 64 位操作系統(tǒng)的筆記本電腦。
本文提出的電子投票系統(tǒng)使用區(qū)塊鏈替代可信第三方,其中區(qū)塊鏈的底層架構(gòu)為自建的基于國密算法的公鏈系統(tǒng),相比于Hyperledger Fabric 和以太坊區(qū)塊鏈的頻繁更新或升級而造成的系統(tǒng)不穩(wěn)定,本文系統(tǒng)不僅能夠可靠運行,還可以滿足投票系統(tǒng)的性能要求。下面,對本文系統(tǒng)的通信開銷和存儲開銷進行分析和測試。
本文系統(tǒng)的底層區(qū)塊鏈框架采用PoW 共識算法,本節(jié)選用生成一個有效區(qū)塊所需要的平均通信次數(shù)來衡量其通信開銷,文獻[28]中給出了區(qū)塊鏈通信開銷的計算方法,如式(19)所示。

其中,CPoW表示基于PoW 共識算法的區(qū)塊鏈通信開銷,α表示全網(wǎng)節(jié)點的交易到達率表示正常生成一個區(qū)塊所需要的平均時間,N表示節(jié)點個數(shù),r1表示節(jié)點算力,D表示目標(biāo)難度值。
為評估本文系統(tǒng)的通信開銷,根據(jù)式(19),本節(jié)測試了系統(tǒng)中的關(guān)鍵參數(shù)。全網(wǎng)節(jié)點的交易到達率α=5 TPS(transaction per second),節(jié)點算力1r=7.5 MH/s(每秒106次Hash 運算),PoW 的難度值D=2.0。圖3 為節(jié)點傳輸成功概率Ps為0 和0.85這2 種情況下的通信開銷。從圖3 可以看出,通信次數(shù)(通信開銷)與節(jié)點個數(shù)成正比,當(dāng)節(jié)點個數(shù)為150 時,通信次數(shù)(通信開銷)為174。本文系統(tǒng)的節(jié)點傳輸成功率較高,所產(chǎn)生的通信開銷對系統(tǒng)正常運行產(chǎn)生的影響很小。

圖3 不同節(jié)點個數(shù)下的通信開銷
每名投票者的存儲開銷包括個人公/私鑰、地址、未花費證明數(shù)據(jù)和區(qū)塊鏈上投票數(shù)據(jù)等。每名投票者由于存儲個人公/私鑰以及地址值約帶來3 KB 的存儲開銷。每名投票者只有一張選票,所以其未花費證明數(shù)據(jù)所占的存儲開銷也較小。隨著投票人數(shù)的增加,影響存儲開銷的主要因素為區(qū)塊鏈上的投票數(shù)據(jù)。
為評估本文系統(tǒng)的存儲開銷,本節(jié)在1 名候選人的情況下,分別設(shè)置了1 次投票、25 次投票和50 次投票的投票環(huán)境,得到不同投票次數(shù)下的存儲開銷,如圖4所示,并依此評估了5 000次投票時的存儲開銷。根據(jù)評估可知,每次投票鏈上數(shù)據(jù)約增長2 KB,進行5 000 次投票所產(chǎn)生的存儲開銷約為9.8 MB,該存儲開銷滿足投票系統(tǒng)的性能需求。

圖4 不同投票次數(shù)下的存儲開銷
本文提出的BFV-Blockchainvoting 方案主要包括4 個連續(xù)的階段,每個階段都發(fā)生在投票組織者預(yù)先確定的特定時間范圍內(nèi)。投票者注冊、選票分發(fā)以及投票者投出選票的過程為并發(fā)進行,其效率對系統(tǒng)的運行影響不大,而計票效率是決定系統(tǒng)能否在規(guī)定時間內(nèi)完成計票的關(guān)鍵。為測試計票效率,本節(jié)設(shè)置了50 名投票者、1 名候選人的投票環(huán)境。圖5 展示了50 次計票的測試結(jié)果。經(jīng)過測試,本文系統(tǒng)單張選票的計票時間平均為1.69 ms。通過對10 組密文狀態(tài)的計票結(jié)果進行解密測試,進而得到明文狀態(tài)的計票結(jié)果,平均每次解密時間為163.70 ms。

圖5 單張選票的計票時間測試
將本文方案與其他基于區(qū)塊鏈或同態(tài)加密技術(shù)的電子投票系統(tǒng)進行對比,結(jié)果如表5 所示。目前,國內(nèi)外大多數(shù)學(xué)者沒有將區(qū)塊鏈與全同態(tài)加密算法相融合的技術(shù)引入電子投票系統(tǒng)的設(shè)計中,并很少進行實際環(huán)境下的效率測試。表5 中,文獻[22]和文獻[29]都采用了區(qū)塊鏈與同態(tài)加密算法相結(jié)合的方案,但其采用Pallier 部分同態(tài)加密算法,其同態(tài)性計算通過冪運算實現(xiàn),相比于本文提出的投票系統(tǒng)BFV-Blockchainvoting 所采用的BFV 全同態(tài)加密算法來說效率較低。文獻[30]也采用Pallier 部分同態(tài)加密算法,但沒有依托區(qū)塊鏈環(huán)境,投票效率較低。相比于采用以太坊架構(gòu)且包含6個節(jié)點的文獻[29],本文方案的計票時間減少了99.79%。相比于文獻[30],本文方案的計票時間減少了95.77%。文獻[31]和文獻[11]也選用了具有抗量子計算攻擊特性的全同態(tài)加密算法,但同樣也沒有依托區(qū)塊鏈環(huán)境。相比于文獻[11]中借助第三方機構(gòu)與BFV 全同態(tài)加密算法相結(jié)合的投票方案,本文方案的計票時間減少了9.63%。文獻[20]和文獻[25]使用了區(qū)塊鏈架構(gòu),但其沒有使用同態(tài)加密算法。相比于文獻[20],本文方案的計票時間減少了98.87%。文獻[25]使用投票者的指紋作為登記認(rèn)證信息,系統(tǒng)為降低指紋識別的錯誤拒絕率需要消耗較長時間,相比于采用以太坊架構(gòu)且包含50 個節(jié)點的文獻[25],本文方案的計票時間減少了32.4%。

表5 本文方案與其他方案的性能比較
本文提出的電子投票系統(tǒng)將區(qū)塊鏈和BFV 全同態(tài)加密算法相結(jié)合,利用全同態(tài)加密算法加密選票信息,使選票可以在密文情況下被統(tǒng)計,候選人的獲票情況直到解密最終計票結(jié)果后才會公布,保證了投票過程的抗操縱性。在注冊與獲取選票階段,使用SM2 數(shù)字簽名算法對投票者的注冊信息進行簽名,使用SM4 算法來加密選票,選擇具有能夠互相監(jiān)督的雙方共同監(jiān)管選票,確保投票者與選票信息分離。投票者提交選票后,利用區(qū)塊鏈上的智能合約實現(xiàn)對投票者的合法性驗證和自計票功能。使用區(qū)塊鏈替代可信第三方,避免第三方虛假計票或服務(wù)器被攻擊后的信息泄露風(fēng)險,計票效率也得到提升。通過測試,本文系統(tǒng)單張選票的計票時間平均為1.69 ms,相比于文獻[29]中使用區(qū)塊鏈和Pallier 部分同態(tài)加密算法相結(jié)合的投票方案的計票時間減少了99.79%;相比于文獻[11]中借助第三方機構(gòu)與BFV 全同態(tài)加密算法相結(jié)合的投票方案的計票時間減少了9.62%;相比于文獻[25]未使用同態(tài)加密算法,只使用區(qū)塊鏈架構(gòu)的投票方案的計票時間減少了32.4%。本文方案總體計算開銷合理,計票效率較高,可以為大規(guī)模電子投票場景提供借鑒。下一步的研究思路是探討全同態(tài)簽密技術(shù)在區(qū)塊鏈電子投票中的應(yīng)用,并進行智能合約的安全性測試與分析。