• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于區(qū)塊鏈的安全投票系統(tǒng)設(shè)計與實現(xiàn)*

      2018-09-03 09:53:58顏春輝
      通信技術(shù) 2018年8期
      關(guān)鍵詞:投票者計票以太

      顏春輝,游 林

      (杭州電子科技大學(xué) 通信工程學(xué)院,浙江 杭州 310018)

      0 引 言

      隨著互聯(lián)網(wǎng)、通信技術(shù)以及現(xiàn)代密碼學(xué)技術(shù)的發(fā)展,電子投票成為一種新的投票方式,逐漸得到了社會的關(guān)注。自從Chaum[1]在1981年提出第一個電子投票協(xié)議以來,許多密碼學(xué)研究者提出了不同密碼體制的電子投票方案,目的是在互聯(lián)網(wǎng)環(huán)境下實現(xiàn)安全、方便、高效的公平投票機制。這些成熟的解決方案也被應(yīng)用到了政府選舉、企業(yè)董事會投票以及重要決策投票中。

      目前,電子投票方案主要有三類:基于盲簽名、環(huán)簽名的電子投票方案[2-3]、基于全同態(tài)加密的電子投票方案[4-5]和基于混合網(wǎng)絡(luò)的電子投票方案[6-7]。這三類投票方案都存在各自的不足?;诿ず灻?、環(huán)簽名的電子投票方案一般需要假設(shè)匿名信道和可信的簽名機構(gòu);基于混合網(wǎng)絡(luò)的電子投票方案從理論上可以實現(xiàn)解密計票的公開可驗證性,但算法過于復(fù)雜,效率較低;基于同態(tài)加密的電子投票方案雖然可以實現(xiàn)密文計算保護選票的隱私性,但當(dāng)前全同態(tài)加密的計算復(fù)雜度太高,并不能有效實用。

      近年來,隨著比特幣等數(shù)字貨幣的逐漸流行,其底層賬本技術(shù)——區(qū)塊鏈技術(shù)也受到許多研究學(xué)者的關(guān)注。區(qū)塊鏈的本質(zhì)是一個公開透明的數(shù)據(jù)庫賬本,記錄所有的交易記錄。它的特點是沒有第三方中介機構(gòu)的情況下,可以提供去中心化、不可篡改、公開透明的安全特性。目前,已提出不少結(jié)合區(qū)塊鏈技術(shù)的電子投票方案,如2015年Zhao和Chan等人[8]提出了一種結(jié)合比特幣的電子投票協(xié)議,該協(xié)議對選民的投票行為引入了獎罰制度。盡管該協(xié)議有一些限制,但這是第一個嘗試將電子投票與區(qū)塊鏈相結(jié)合的方法。2016年,Lee、James、Ejeta和Kim等人[9]提出了另一種電子投票協(xié)議。該協(xié)議提出在區(qū)塊鏈電子投票協(xié)議中利用TTP(可信第三方)來保護投票者的選票。2017年,Cruz等人[10]提出了一種利用盲簽名技術(shù)結(jié)合區(qū)塊鏈的電子投票方案。該方案是將盲化的選票內(nèi)容寫入比特幣交易中附加了80 Byte信息中。另外,該方案還引入第三方計票機構(gòu)來統(tǒng)計選票結(jié)果。

      上述的方案都存在TTP來執(zhí)行投票過程中計票與監(jiān)督的職責(zé),要求投票參與者都信任這個TTP。但是,無法排除第三方計票機構(gòu)與管理者發(fā)生共謀攻擊,導(dǎo)致投票過程中投票者的選票和投票結(jié)果發(fā)生篡改,還有計票機構(gòu)提前泄露投票結(jié)果控制整個投票結(jié)果發(fā)生改變。另外,在比特幣交易中附加信息空間的限制,也使該方案具有一定的缺陷性。

      McCorry等人[11]使用區(qū)塊鏈實現(xiàn)了一種分布式且具有自我計票功能的互聯(lián)網(wǎng)電子投票方案,并最大化地保護選民的隱私。通過以太坊智能合約編寫投票協(xié)議,有效取代了第三方計票機構(gòu),在投票過程中通過兩輪零知識證明(ZKP)的方式保護投票者的選票隱私信息。但是,該投票方案只允許投票者選擇兩個候選者(yes/no),無法滿足一次投票過程中出現(xiàn)多候選者的情況。

      除了這些基于區(qū)塊鏈電子投票協(xié)議外,目前也有不少在區(qū)塊鏈上的電子投票應(yīng)用被推廣使用,如區(qū)塊鏈投票機(Blockchain Voting Machine)[12]和Follow My Vote[13]。這些應(yīng)用基本都是使用區(qū)塊鏈作為一個投票箱,因此需要依賴第三方組織來保護投票者的隱私。

      本文針對目前投票系統(tǒng)中的一些缺陷,提出了一種結(jié)合區(qū)塊鏈的多候選者投票方案,通過智能合約實現(xiàn)本方案使其具有自我計票功能。其次,通過Node.js的Electron前端框架設(shè)計了本方案的投票系統(tǒng)web界面,使用web3.js提供JavaScript API來調(diào)用部署在智能合約中投票方案的方法實現(xiàn)與合約交互。最后,從本方案的安全性分析和實驗結(jié)果分析中說明本方案結(jié)合區(qū)塊鏈智能合約具有可行性,具有多候選者投票、保護投票者的隱私、具備自我計票的功能等特點。

      1 預(yù)備知識

      1.1 區(qū)塊鏈

      區(qū)塊鏈是隨著比特幣等[14]數(shù)字加密貨幣而興起的一種全新技術(shù),本質(zhì)是一個點對點網(wǎng)絡(luò)(peerto-peer)的分布式賬本數(shù)據(jù)庫,通過建立一個共同維護且不可篡改的數(shù)據(jù)庫來記錄過去的所有交易幾輪和歷史數(shù)據(jù)。所有的數(shù)據(jù)都是分布式存儲且公開透明的。這種技術(shù)下,任何互不相識的網(wǎng)絡(luò)用戶都可以通過合約、點對點記賬、數(shù)字加密等方式達成信用共識,而不需要任何中央信任機構(gòu)。

      區(qū)塊鏈分為公共鏈(Public Blockchain)、聯(lián)盟鏈(Consortium Blockchain)和私有鏈(Private Blockchain)。而隨著區(qū)塊鏈技術(shù)的演進,依據(jù)不同架構(gòu),區(qū)塊鏈可分為三個階段:

      (1)區(qū)塊鏈1.0架構(gòu):比特幣區(qū)塊鏈;

      (2)區(qū)塊鏈2.0架構(gòu):以太坊區(qū)塊鏈;

      (3)區(qū)塊鏈3.0架構(gòu):超越貨幣、金融范圍的區(qū)塊鏈應(yīng)用。

      區(qū)塊鏈1.0的典型應(yīng)用是比特幣應(yīng)用,也是現(xiàn)在最受歡迎的數(shù)字貨幣,設(shè)計目的是允許兩個區(qū)塊鏈地址賬戶進行點對點的交易,而不通過第三方可信機構(gòu)。2013年,比特幣的協(xié)議中引進了一項功能,即創(chuàng)建一種名為OP_RETURN的交易[15],允許用戶在一筆交易中嵌入40 Byte的數(shù)據(jù)(目前是80 Byte),因此可以向比特幣的區(qū)塊鏈中寫入任意信息。不少研究人員利用此特點相繼提出了不少結(jié)合區(qū)塊鏈的應(yīng)用[16-17]。這些方案有很多弊端,一方面在一筆交易中寫入的信息量有限,另一方面隨著比特幣的交易數(shù)量增大,區(qū)塊鏈的數(shù)據(jù)也會變得越來越龐大,交易確認時間也會變得越來越慢。

      1.2 以太坊與智能合約

      比特幣的區(qū)塊鏈架構(gòu)主要圍繞支持虛擬貨幣的實現(xiàn),雖然具有一定的靈活性,但用來支持虛擬貨幣意外的應(yīng)用存在局限性。區(qū)塊鏈2.0架構(gòu)的以太坊則提供了一套新的協(xié)議,核心是采用圖靈完備的計算環(huán)境——以太坊虛擬機(EVM),可以實行任意復(fù)雜算法的編程,把區(qū)塊鏈作為一個可編程的去中心化應(yīng)用平臺支撐智能合約應(yīng)用。另外,以太坊區(qū)塊鏈上寫入的數(shù)據(jù)沒有限制且交易確認相對較快。

      以太坊有兩種類型的賬戶:

      (1)外部所有賬戶(EOA),一般意義上的用戶賬戶,由用戶的私鑰控制;

      (2)合約(Contract)賬戶,一種特殊的可編程賬戶。合約是代碼(功能)和數(shù)據(jù)(狀態(tài))的集合,受代碼控制,并由外部賬戶激活。

      智能合約(Smart Contract)是一個由計算機處理的、可執(zhí)行合約條款的交易協(xié)議[18]。以太坊的智能合約是一段可被以太坊虛擬機執(zhí)行的代碼。以以太坊特有二進制形式存儲在區(qū)塊鏈上,并由以太坊虛擬機解釋,被稱為以太坊虛擬機碼(Bytecode)。智能合約像一個可以被信任的人,可以臨時保管資產(chǎn),總是按照事先的規(guī)則執(zhí)行操作。它對接收的信息進行回應(yīng),可以接收和存儲價值,也可以向外發(fā)送信息價值。目前,主要使用一種類似JavaScript語言的Solidity語言進行智能合約開發(fā)。智能合約部署和調(diào)用流程如圖1所示。

      圖1 以太坊智能合約的部署和調(diào)用流程

      2 一種具有自我計票的多候選人投票方案

      文獻[11]提出,只允許投票者選擇兩個候選者,即“yes/no”。本文針對多候選者投票場景,提出一種應(yīng)用于小規(guī)模的董事會投票場景的“1-outof-m”(即投票人可以從m位候選項中選擇1個)類型的投票方案。第一輪中,所有選民向管理者注冊后擁有投票資格,投票前還需要進行身份驗證;第二輪中,合格的投票者選擇投票意向后向系統(tǒng)廣播自己的選票內(nèi)容。使用區(qū)塊鏈作為一個投票者認證的安全信道,通過運行在區(qū)塊鏈上的智能合約實現(xiàn)整個投票流程和自我計票功能,通過多方共識后將投票數(shù)據(jù)寫入?yún)^(qū)塊鏈,可以讓任何人都能驗證投票的數(shù)據(jù)及結(jié)果。對于投票者隱私保護,在方案中采用了兩輪零知識證明向系統(tǒng)證明自己的秘密信息和投票意向但不泄露任何信息。

      2.1 兩輪零知識證明協(xié)議

      本投票方案的參與者主要包括n位合格投票者(V1,V2,…,Vn)和一個投票管理機構(gòu),對多位候選者(C1,C2,…,Ck)進行多選一形式表決投票,其中兩輪零知識證明協(xié)議詳細步驟如下。

      2.1.1 第一輪零知識證明協(xié)議

      (1)所有投票者一致同意選取滿足安全要求的大素數(shù)p,Z*p為p階有限乘法循環(huán)群,g為Z*p的生成元。每位投票者Vi選擇一個隨機數(shù)xi∈Zp作為他們的私鑰,然后在本地計算得到gxi作為公鑰并公開。

      (2)每位投票者Vi廣播他們的gxi,然后向系統(tǒng)的智能合約進行離散對數(shù)知識證明協(xié)議DKPP(xi)用于驗證投票者的私鑰有效性,即gxi的指數(shù)xi是否正確。投票者Vi發(fā)送(gv,r=v-xic),其中v∈RZp,c=H(g||gv||gxi||Ai)。智能合約驗證 gv與 grgc·xi是否相等,如果相等則證明投票者知道g的指數(shù)xi正確合法性,從而相信投票者的身份。然后,投票者Vi從系統(tǒng)中得到重構(gòu)的投票公鑰:

      2.1.2 第二輪零知識證明協(xié)議

      (1)假定n位投票者,系統(tǒng)選取一個最小的正整數(shù)m,滿足2m>n。然后,對k位候選項分別進行編碼表示。投票者選擇其中一個選項vi∈{20,2m2(k-1)m}進行投票表決,具體如下:

      (2)投票者在本地表決完后發(fā)送自己的選票內(nèi)容vi,并向智能合約進行一輪選票的合法性知識證明協(xié)議VKPP(vi)來證明自己選票的合法性。

      關(guān)于加密選票的合法性知識證明協(xié)議具體執(zhí)行過程如表1所示。實際執(zhí)行過程中,先將選票內(nèi)容vi轉(zhuǎn)換成EIGamal密碼體制的形式,即(x,y)=(gxi,(gyi)xi·gvi)=(gxi,hxi·ei), 其 中 ei∈ {g20,g2m,…,g2(k-1)m}。 例如:當(dāng)選票內(nèi)容為vi=20時,代表投票者選擇第一個候選者,投票者的選票的EIGamal加密形式表示為(x,y)=(gxi,(gyi)xi·g20)。投票者在根據(jù)VKPP協(xié)議計算得到如下參數(shù):(ai,bi)、c=H(Ai,g,x,y,ai,bi)、di和ri。其中,H為安全的哈希函數(shù),Ai為投票者的賬號索引值。之后,將(x,y,ai,bi,di,ri)作為驗證條件發(fā)送到智能合約上進行驗證,而智能合約驗證H(Ai,g,x,y,ai,bi)=d1+d2+,…,dn是否成立來判斷投票者選票內(nèi)容的合法性,從而決定是否接受投票者的選票內(nèi)容。此協(xié)議是為了表明投票者發(fā)送的加密選票gxiyigvi是對候選人列表{20,2m,…,2(k-1)m}其中之一的選擇進行加密而不泄露具體的信息,也是實現(xiàn)“1-out-of-m”類型投票的關(guān)鍵所在。另一個目的,是防止破壞者進行重復(fù)投票的行為。此外,利用EIGamal加密體制的同態(tài)屬性,配合智能合約的自動執(zhí)行操作可以依據(jù)設(shè)計好的規(guī)則實現(xiàn)自我計票,有效取代第三方計票機構(gòu),使投票系統(tǒng)更具安全性。

      (3)智能合約自動判斷投票者加密選票的合法性知識證明協(xié)議過程,驗證判斷每一位投票者的選票內(nèi)容是否正確、合法。如果正確,則接受投票者提交的選票內(nèi)容;否則,放棄。當(dāng)最后一位投票者提交選票后,計算所有選票的統(tǒng)計結(jié)果:

      這里g∑ivi為離散對數(shù)。式(4)的值可以通過小步大步算法(Baby-step Giant-step)和指數(shù)積分法(Index Calculus)得到,表示為投票統(tǒng)計的結(jié)果,其中系數(shù)(c1,c2,…,ck)分別是k位候選者相對應(yīng)票數(shù)。

      對于 ∑ixiyi=0具體證明過程如下。

      由上述重構(gòu)密鑰:

      可得:

      最終,可得:

      2.2 投票方案的設(shè)計及流程說明

      本文設(shè)計的投票方案采用EIGamal加密體制和兩輪零知識證明協(xié)議,并運行在以太坊區(qū)塊鏈上,通過以太坊智能合約取代傳統(tǒng)可信第三方計票機構(gòu)(TTP)實現(xiàn)自我計票功能。通過區(qū)塊鏈的共識機制將投票過程的數(shù)據(jù)寫入?yún)^(qū)塊鏈賬本中,能夠滿足用戶的信任需求。通過EIGamal密碼體制保護投票數(shù)據(jù)的隱私,經(jīng)過兩輪零知識證明協(xié)議一方面可以有效防止惡意攻擊者的仿造冒充有效投票者進行假投票,另一方面投票者向系統(tǒng)驗證自己的有效加密選票的正確性而不泄露具體內(nèi)容,保護了投票者的隱私。本投票方案總共分為5個過程,由投票發(fā)起者、智能合約和投票者三部分組成。圖2展示了整個投票方案的流程。

      圖2 投票方案的流程時序

      表1 選票內(nèi)容的合法性知識證明協(xié)議流程

      具體的實施過程如下。

      (1)登錄賬戶

      步驟1:投票發(fā)起者和每位投票者登錄投票系統(tǒng)的賬號都是自己的以太坊賬號和密碼;

      步驟2:要保證每一個投票者賬戶里至少有少部分代幣用于投票時所需的花費,如果投票者賬戶余額不足,可以向系統(tǒng)索要。

      (2)系統(tǒng)設(shè)置

      步驟1:投票發(fā)起者設(shè)置投票項目的名稱、問題的數(shù)量及內(nèi)容;

      步驟2:投票發(fā)起者設(shè)置計時器,設(shè)置投票各個環(huán)節(jié)的起止時間,確保投票能順利進行,具體時間參數(shù)如下:

      TfinishRegistration:表示所有投票者一定要在這個時間點前完成注冊;

      TbeginVote:表示投票發(fā)起者通知系統(tǒng)在這個時間開始進行投票;

      TfinishVote:表示所有投票者一定要在這個時間前投出他們的選票內(nèi)容;

      Tπ:最小的時間間隔,投票期間讓投票者有足夠時間進行投票,保證合約正常運行并寫入?yún)^(qū)塊鏈。

      步驟3:投票發(fā)起者設(shè)置完上述參數(shù)后,通知系統(tǒng)開始進入注冊階段,并更新智能合約。

      (3)注冊

      步驟1:投票發(fā)起者為每一位登記的投票者生成唯一的注冊ID并發(fā)送給投票者;

      步驟2:投票者向投票發(fā)起者發(fā)送注冊ID來發(fā)起注冊請求,投票發(fā)起者通過智能合約驗證投票者的注冊ID是否匹配,通過認證的合格投票者名單被寫入投票合約中;

      步驟3:如果匹配通過,投票者需要生成隨機數(shù)xi作為私鑰,然后計算他們的投票公鑰gxi,通過智能合約進行DKPP(xi)(離散對數(shù)知識證明協(xié)議)來驗證投票者私鑰xi的有效性;

      步驟4:投票者從系統(tǒng)中得到計算后的重構(gòu)密鑰gyi。

      投票發(fā)起者認證每一個投票者的賬號,只有通過認證的合格投票者名單寫入投票合約中。注冊階段,應(yīng)該在規(guī)定的注冊時間TfinishRegistration內(nèi)完成,否則系統(tǒng)不接受任何人的注冊。同時,投票發(fā)起者確認后通知智能合約進入投票階段。

      (4)投票

      投票階段,投票者在投票界面中選擇自己選項,然后生成自己的正式選票,通過系統(tǒng)的智能合約的投票方法發(fā)送他們的加密后選票內(nèi)容,具體步驟如下:

      步驟1:投票者將投票內(nèi)容轉(zhuǎn)化為加密后的形式gxiyigvi;

      步驟2:投票者需執(zhí)行VKPP(vi)(選票內(nèi)容合法性知識證明協(xié)議)向系統(tǒng)的智能合約證明自己的投票內(nèi)容合法,即vi∈{20,2m,…,2(k-1)m},且選票內(nèi)容的加密形式是正確的;

      步驟3:如果有人選擇投棄權(quán)票,系統(tǒng)也會將此票作為棄權(quán)選票并統(tǒng)計到最終投票結(jié)果中。

      投票工作必須在系統(tǒng)規(guī)定的投票時間TfinishVote內(nèi)完成,當(dāng)最后一個投票者提交選票后,投票發(fā)起者通知智能合約進入計票階段。

      (5)計票

      系統(tǒng)調(diào)用智能合約中寫好的統(tǒng)計投票結(jié)果的方法,無需任何第三方計票機構(gòu)對選票進行統(tǒng)計。智能合約會驗證每一張選票的有效性,然后統(tǒng)計所有選票包括棄權(quán)票生成最終的投票結(jié)果,寫入?yún)^(qū)塊鏈賬本并在投票系統(tǒng)上公布。

      步驟1:系統(tǒng)調(diào)用智能合約中計票的方法,統(tǒng)計所有有效的選票內(nèi)容,即執(zhí)行:

      步驟2:要得到投票的最終結(jié)果就是計算得到統(tǒng)計結(jié)果的離散對數(shù)的值:

      這里(c1,c2,…ck)分別代表相對應(yīng)候選者的投票數(shù)量。另外,對棄權(quán)票進行單獨統(tǒng)計并計入投票結(jié)果中。

      步驟3:系統(tǒng)公布每一個候選者對應(yīng)的統(tǒng)計結(jié)果和棄權(quán)票的結(jié)果,任何人都可以驗證投票結(jié)果的正確性。

      投票流程結(jié)束。

      3 投票系統(tǒng)設(shè)計及實現(xiàn)

      本文提出的投票方案實現(xiàn)方法基于以太坊智能合約,通過Web3.js庫的JavaScript API接口調(diào)用部署在區(qū)塊鏈上智能合約的相應(yīng)方法,實現(xiàn)了整個投票過程。對于智能合約開發(fā),使用目前應(yīng)用最廣泛的編程語言——Solidity語言。Solidity是一種語法與JavaScript相似的高級語言,為以太坊虛擬機編譯代碼而設(shè)計。另外,設(shè)計了基于Nodejs的Electron前端框架開發(fā)了投票系統(tǒng)的DApp,用于展示整個投票系統(tǒng)的交互過程。圖3為投票系統(tǒng)架構(gòu)圖。

      圖3 投票系統(tǒng)架構(gòu)

      3.1 投票方案智能合約設(shè)計

      將整個投票方案設(shè)計成三個智能合約,分別為 LocalCrypt.sol、Vote.sol和 VoteContractRegistery.sol。這三個合約的功能介紹如表2所示。

      表2 智能合約功能介紹

      3.2 投票系統(tǒng)設(shè)計及實現(xiàn)

      基于區(qū)塊鏈的多候選人投票系統(tǒng)DApp整體實現(xiàn)是通過web前端頁面使用Web3.js庫提供的JavaScript API接口調(diào)用部署在區(qū)塊鏈上智能合約的相應(yīng)方法,實現(xiàn)了投票交互的整個過程。該設(shè)計開發(fā)實現(xiàn)了管理員和投票者兩個客戶端,圖4展示了投票系統(tǒng)DApp的界面功能和投票過程。

      投票發(fā)起者客戶端(admin.html):管理員管理、控制、監(jiān)督整個投票過程,包括部署投票項目智能合約、認證投票者、建立合格投票者列表、發(fā)起投票問題、設(shè)置注冊環(huán)節(jié)的起止時間、設(shè)置投票環(huán)節(jié)的起止時間、啟動計票環(huán)節(jié)和強制關(guān)閉投票項目等功能。

      投票者客戶端(voter.html):選民登錄注冊成為合格投票者進行投票,包括登錄注冊、參與投票、提交選票和查詢投票結(jié)果等功能。

      圖4 投票系統(tǒng)界面

      4 性能分析與安全性分析

      4.1 系統(tǒng)性能分析

      本文實驗平臺使用Intel Core i5-3470 3.2GHz的CPU,8 GB內(nèi)存,運行64位Windows10操作系統(tǒng);采用以太坊作為區(qū)塊鏈的框架,通過創(chuàng)世區(qū)塊文件在本地搭建以太坊私鏈環(huán)境,以太坊geth客戶端為1.7.2版本,以太坊錢包為win64-0.8.10版本。將以太坊錢包連接到本地私有鏈網(wǎng)絡(luò)后,通過錢包將投票方案的智能合約部署在本地私鏈上,獲取LocalCrypto.sol和Vote.sol的合約地址address和二進制文件ABI,把它們發(fā)送到主合約VoteContractRegistry.sol上,實現(xiàn)調(diào)用這兩份合約的方法。另外,通過Web3.js庫提供的JavaScript API接口與合約互動,設(shè)計了前端頁面,實現(xiàn)整個投票的交互過程。

      表3為一次投票過程中統(tǒng)計每項操作所需消耗的Gas和消耗的Gas總量。此次投票過程中包含40位投票者進行模擬投票,投票過程中產(chǎn)生的費用是由GasUsed(消耗量)和GasPrice(價格)兩個因素決定,即Cost=GasPrice*GasUsed。其中GasUsed由交易(或執(zhí)行合約代碼)的計算量來決定,而GasPrice由交易的發(fā)起者來設(shè)置。

      將投票方案的智能合約分成三份,一方面是為了區(qū)分彼此之間功能關(guān)系,如LocalCrypto. Sol主要涉及基本的加密解密方法和零知識證明協(xié)議的運行,這樣模塊化設(shè)計可以提高代碼的重復(fù)使用。另一方面,考慮到以太坊上部署智能合約受GasLimit限制,無法將整個投票方案的合約代碼通過一份合約上執(zhí)行。采取的方案是通過主合約VoteContractRegistery.sol調(diào)用另外兩個合約中的方法。通過表3中統(tǒng)計的Gas消耗顯示,部署這三個智能合約都是在以太坊公鏈中單筆交易Gas最大限制值(8 000 000 Gas)之內(nèi),證明投票方案可以在本地私鏈中運行,同樣可以讓其在公鏈中正常運行。

      表3 投票中每項操作所需Gas消耗統(tǒng)計表

      表4列出了投票方案中一些方法計算所需的平均時間。投票協(xié)議合約Vote.sol主要包括注冊投票、計算重構(gòu)公鑰、提交選票和計票這幾個主要步驟。使用Web3框架提供的接口方法讓W(xué)eb瀏覽器和以太坊守護進程之間進行通信,所有智能合約中可執(zhí)行的方法都可用.Call()來調(diào)用執(zhí)行而不會產(chǎn)生Gas消耗,可以在本地的守護進程中測量代碼執(zhí)行時所需的計算時間。其中,加密合約LocalCrypto.Sol主要包括創(chuàng)建和認證零知識證明的兩個步驟。在投票注冊過程中,創(chuàng)建零知識協(xié)議所耗時為81 ms,驗證零知識協(xié)議所耗時為180 ms;投票過程中,提交選票時創(chuàng)建選票合法性知識證明協(xié)議所耗時為356 ms,驗證選票合法性知識證明協(xié)議耗時為548 ms。

      表4 投票方案不同方法執(zhí)行消耗平均時間

      整個投票方案的執(zhí)行流程都是按照智能合約的執(zhí)行順序進行。實驗結(jié)果表明,整個投票方案最耗時的地方是零知識證明協(xié)議和統(tǒng)計投票結(jié)果,涉及驗證選票的合法性知識證明協(xié)議和離散對數(shù)知識證明協(xié)議兩個步驟。此外,還有計算投票結(jié)果的離散對數(shù)運算,主要是因為目前以太坊智能合約缺乏公鑰加密體制的原生支持。

      4.2 安全性分析

      本文改進的具有自我計票的多候選投票方案是通過區(qū)塊鏈上的智能合約實現(xiàn)的,投票者使用以太坊賬號進行認證,在投票過程將自己加密后的選票提交到區(qū)塊鏈上,投票系統(tǒng)調(diào)用智能合約計票方法實現(xiàn)自動計票并計算出投票結(jié)果,可以做到無需第三方計票機構(gòu)。本方案的投票系統(tǒng)基于區(qū)塊鏈的安全性,可以實現(xiàn)投票過程的公開可驗證、數(shù)據(jù)防篡改特點。下面對投票系統(tǒng)進行以下幾個方面的安全性分析。

      4.2.1 選票完全保密性

      本文設(shè)計的投票系統(tǒng)中,每一位投票者投出的選票內(nèi)容gxiyigvi都是經(jīng)過加密的,且投票者向系統(tǒng)發(fā)送兩輪零知識證明協(xié)議驗證選票內(nèi)容的正確性。第一輪中,投票者發(fā)送自己的投票密鑰gxi;第二輪中,投票者發(fā)送自己的選擇內(nèi)容vi。投票者的密鑰xi是一個隨機數(shù),而yi也是一個隨機值,所以對于攻擊者來說無法確定。根據(jù)Diffie-Hellman假設(shè),任何人無法區(qū)分gxiyi在群中所對應(yīng)的階數(shù),其中間環(huán)節(jié)投票者沒有透露一點關(guān)于自己投票的詳細信息,所以任何人無法區(qū)分加密選票gxiyigvi所選擇的投票內(nèi)容vi,最大化保護選票的保密性。

      智能合約的本質(zhì)是運行在區(qū)塊鏈上的具有特定業(yè)務(wù)邏輯的一段代碼。智能合約的狀態(tài)和內(nèi)容是公開的,鏈上的用戶可以對代碼進行審查,從而判斷合約的功能。智能合約的運行結(jié)果會寫入賬本并公開可驗證,不會發(fā)生合約創(chuàng)建者規(guī)定之外的行為。區(qū)塊鏈本身具有匿名性,即使攻擊者獲取投票者的數(shù)據(jù),也無法確定投票者的身份和投票信息。

      4.2.2 公平性

      統(tǒng)計選票階段,只有在規(guī)定投票時間內(nèi),當(dāng)最后一位投票者廣播了自己的投票結(jié)果vi后,系統(tǒng)的智能合約才能被管理者執(zhí)行統(tǒng)計投票結(jié)果的方法并得到計票結(jié)果。所以,只要存在未在正確時間內(nèi)廣播選票的投票者,投票結(jié)果將無法被預(yù)先計算。因此,該方案具有公平性。

      4.2.3 無爭議性

      本文方案中以區(qū)塊鏈作為身份認證的通道,對于投票者的以太坊賬號進行有效性驗證,任何無效的賬號都不能在投票系統(tǒng)中進行投票。此外,限定一人投一票,每一張選票選擇一個候選者,保證了投票結(jié)果的準確性,投票方案是無爭議的。

      4.2.4 可驗證性

      投票者在提交選票后在系統(tǒng)統(tǒng)計投票結(jié)果前,可以在自己的客戶端查詢確認選票是否被篡改?;趨^(qū)塊鏈上的數(shù)據(jù)具有公開性可驗證。在統(tǒng)計結(jié)果出來后,每一位投票者也獲取到所有投票者的選票gxiyigvi去驗證計算的值與系統(tǒng)給出的結(jié)果是否一致。本方案具有投票結(jié)果的可驗證性。

      4.2.5 合格性

      方案中,投票者都在管理員那里進行登記注冊。管理員會在投票智能合約中建立一份有效的投票者名單,確保登錄到投票系統(tǒng)中的投票者都是合法的。之后在投票過程中,投票者還需要驗證由管理者發(fā)送的唯一驗證碼進行雙重驗證,確保每一位投票者都是合格的,每一張選票都是合格有效的。

      4.2.6 抗重播攻擊

      所有的投票密鑰gxi和零知識證明DKPP(xi)被公開發(fā)送到以太坊區(qū)塊鏈。因此,另外的合格投票者可能會嘗試使用另一組gxi和DKPP(xi)來獲得再一次的投票權(quán)。而在零知識證明過程中,要求投票者在哈希函數(shù)中包含msg.sender(即投票者的以太坊賬號)。如果msg.sender與調(diào)用合約的賬戶不匹配,智能合約將不接受DKPP(xi)的驗證。因此,在沒有共謀的情況下,攻擊者想重播攻擊另一位投票者的投票密鑰gxi來獲得另一次投票是不可能的。同樣,在對選票的零知識證明VKPP(vi)驗證過程也是不能通過。

      5 結(jié) 語

      本文介紹了一種基于以太坊區(qū)塊鏈的多候選人的電子投票方案,用特定業(yè)務(wù)邏輯的智能合約實現(xiàn)自我計票功能而取代了傳統(tǒng)的第三方計票機構(gòu)。同時,在投票方案的智能合約引入了兩輪零知識證明,有效保護了投票者的隱私問題。從對投票方案的安全性分析中證明,投票方案是安全可靠的。另外,在本地的私有鏈節(jié)點上部署智能合約,模擬了40位投票者進行投票。從實驗的數(shù)據(jù)中可知,投票系統(tǒng)在保護投票者隱私的前提下能做到公開可驗證,可適用于小規(guī)模的董事會投票場景。

      猜你喜歡
      投票者計票以太
      以太極為旗,開啟新時代“黃河大合唱”
      少林與太極(2023年7期)2023-08-25 05:27:52
      車易鏈:做汽車業(yè)的“以太坊”
      汽車觀察(2018年9期)2018-10-23 05:46:24
      微信投票亂局與治道變革
      新聞眼
      金融博覽(2016年7期)2016-08-16 18:44:41
      百通推出入門級快速工業(yè)以太網(wǎng)絡(luò)交換器系列
      以太互聯(lián) 高效便捷 經(jīng)濟、可靠、易用的小型可編程控制器
      自動化博覽(2014年6期)2014-05-29 09:40:16
      英國人家有空房少拿養(yǎng)老金
      中國戲劇家協(xié)會第七屆理事會理事選舉計票人名單
      中國戲劇家協(xié)會第七屆主席、副主席選舉計票人名單
      塔利班割鼻懲罰投票者
      南阳市| 望都县| 梓潼县| 托克托县| 启东市| 醴陵市| 十堰市| 铁岭市| 娄烦县| 许昌市| 聂荣县| 凤翔县| 建始县| 潮安县| 忻城县| 额尔古纳市| 藁城市| 葫芦岛市| 麻城市| 赞皇县| 车致| 平凉市| 丰镇市| 承德县| 长海县| 武平县| 无锡市| 通城县| 牡丹江市| 杭州市| 广元市| 新营市| 三河市| 乐平市| 玉溪市| 顺平县| 吐鲁番市| 宁阳县| 汾阳市| 根河市| 乾安县|