亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        顏春輝,游 林

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

        0 引 言

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

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

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

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

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

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

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

        1 預(yù)備知識(shí)

        1.1 區(qū)塊鏈

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

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

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

        1.2 以太坊與智能合約

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        對(duì)于 ∑ixiyi=0具體證明過(guò)程如下。

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

        可得:

        最終,可得:

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

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

        圖2 投票方案的流程時(shí)序

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

        具體的實(shí)施過(guò)程如下。

        (1)登錄賬戶

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

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

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

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

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

        TfinishRegistration:表示所有投票者一定要在這個(gè)時(shí)間點(diǎn)前完成注冊(cè);

        TbeginVote:表示投票發(fā)起者通知系統(tǒng)在這個(gè)時(shí)間開(kāi)始進(jìn)行投票;

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

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

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

        (3)注冊(cè)

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

        步驟2:投票者向投票發(fā)起者發(fā)送注冊(cè)ID來(lái)發(fā)起注冊(cè)請(qǐng)求,投票發(fā)起者通過(guò)智能合約驗(yàn)證投票者的注冊(cè)ID是否匹配,通過(guò)認(rèn)證的合格投票者名單被寫(xiě)入投票合約中;

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

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

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

        (4)投票

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

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

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

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

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

        (5)計(jì)票

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

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

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

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

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

        投票流程結(jié)束。

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

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

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

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

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

        表2 智能合約功能介紹

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

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

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

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

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

        4 性能分析與安全性分析

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

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

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

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

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

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

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

        整個(gè)投票方案的執(zhí)行流程都是按照智能合約的執(zhí)行順序進(jìn)行。實(shí)驗(yàn)結(jié)果表明,整個(gè)投票方案最耗時(shí)的地方是零知識(shí)證明協(xié)議和統(tǒng)計(jì)投票結(jié)果,涉及驗(yàn)證選票的合法性知識(shí)證明協(xié)議和離散對(duì)數(shù)知識(shí)證明協(xié)議兩個(gè)步驟。此外,還有計(jì)算投票結(jié)果的離散對(duì)數(shù)運(yùn)算,主要是因?yàn)槟壳耙蕴恢悄芎霞s缺乏公鑰加密體制的原生支持。

        4.2 安全性分析

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

        4.2.1 選票完全保密性

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

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

        4.2.2 公平性

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

        4.2.3 無(wú)爭(zhēng)議性

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

        4.2.4 可驗(yàn)證性

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

        4.2.5 合格性

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

        4.2.6 抗重播攻擊

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

        5 結(jié) 語(yǔ)

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

        猜你喜歡
        投票者計(jì)票以太
        以太極為旗,開(kāi)啟新時(shí)代“黃河大合唱”
        少林與太極(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
        百通推出入門級(jí)快速工業(yè)以太網(wǎng)絡(luò)交換器系列
        以太互聯(lián) 高效便捷 經(jīng)濟(jì)、可靠、易用的小型可編程控制器
        英國(guó)人家有空房少拿養(yǎng)老金
        中國(guó)戲劇家協(xié)會(huì)第七屆理事會(huì)理事選舉計(jì)票人名單
        中國(guó)戲劇家協(xié)會(huì)第七屆主席、副主席選舉計(jì)票人名單
        塔利班割鼻懲罰投票者
        中文字幕女优av在线| 精品无码久久久九九九AV| 国产日韩精品一区二区在线观看播放 | aa视频在线观看播放免费| 午夜桃色视频在线观看| 日韩人妻另类中文字幕| 毛片无码国产| 天天躁日日躁狠狠躁av中文| 亚洲AV无码日韩综合欧亚| 亚洲国产精品av麻豆一区| 国产一区二区视频免费在线观看| 国产一区二区三区乱码| 永久免费av无码网站性色av| 国产日韩三级| 久久婷婷综合激情亚洲狠狠 | 久久99精品中文字幕在| 国产精品毛片av一区二区三区 | 亚洲黄片高清在线观看| 亚洲午夜经典一区二区日韩| 色欲色香天天天综合vvv| 欧美精品v国产精品v日韩精品| 国产真人无遮挡作爱免费视频| 亚洲精品二区在线观看| 九九精品国产亚洲av日韩| 免费国产黄网站在线观看视频| 亚洲欧美一区二区三区 | 天天弄天天模| 国产自产c区| 蜜桃视频一区二区三区| 精品一区二区三区芒果| 熟女性饥渴一区二区三区| 伊人久久大香线蕉在观看| 日本在线免费一区二区三区| 国产桃色一区二区三区| 人妻少妇中文字幕乱码| 国内揄拍国内精品| 亚洲性码不卡视频在线| 亚洲一区二区三区综合免费在线| 无码aⅴ免费中文字幕久久| 亚洲妓女综合网99| 国产精品不卡在线视频|