国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于數(shù)字簽名和加密二維碼技術(shù)的電子投票系統(tǒng)的實現(xiàn)

2020-08-21 01:01:24蔡群英
現(xiàn)代計算機 2020年20期
關(guān)鍵詞:計票數(shù)字簽名私鑰

蔡群英

(韓山師范學(xué)院計算機與信息工程學(xué)院,潮州521000)

0 引言

隨著計算機和網(wǎng)絡(luò)技術(shù)的發(fā)展,信息化程度越來越高。很多社會活動和事務(wù),都可以通過計算機來完成,代替人工操作。比如各級選舉投票,傳統(tǒng)的選舉投票使用的是紙質(zhì)的選票,不便于調(diào)整候選人名單;填寫紙質(zhì)選票一旦筆跡不清晰或涂改便會造成廢票;還要在現(xiàn)場集中進行投票,經(jīng)過計票然后才能出結(jié)果。整個過程,既浪費時間也容易泄露投票內(nèi)容,計票環(huán)節(jié)也容易造假。

針對傳統(tǒng)選舉投票的種種問題,本文考慮采用數(shù)字簽名和加密二維碼技術(shù),通過分析投票的業(yè)務(wù)流程,設(shè)計并實現(xiàn)一個電子投票系統(tǒng)[1]。從發(fā)放選票、驗證選票、進行投票、計票到查驗選票內(nèi)容都在網(wǎng)絡(luò)上進行,利用非對稱密碼算法RSA 對選票進行加密,然后生成二維碼,選民進行投票后投票內(nèi)容使用SHA512WithRSA 算法進行數(shù)字簽名,確保所選內(nèi)容不被篡改。通過密碼學(xué)的技術(shù)和網(wǎng)絡(luò)技術(shù),使得整個投票過程順利進行[2-4]。

1 QR碼簡介

QR 碼(Quick Response Code)即快速響應(yīng)矩陣碼,是日本Denso 公司于1994 年9 月研制的一種矩陣二維碼,能夠有效地表示各種英文字符和漢字,具有信息容量大、可靠性高、高速識讀性和全方位(360°)識讀等特點,目前,已廣泛地應(yīng)用于移動支付、農(nóng)產(chǎn)品溯源、各種導(dǎo)航宣傳鏈接上,開發(fā)方通過Web 平臺將信息加密、編制成二維碼圖像,用戶通過手機掃描進行識讀認證,作為交易或身份識別的憑證來支撐各種應(yīng)用[5]。

2 RSA算法與數(shù)字簽名

2.1 RSA算法

RSA 算法是美國麻省理工學(xué)院(MIT)的Rivest、Shami 和Adleman 于1987 年提出的非對稱密碼算法,是第一個理論上最為成功的公開密鑰密碼體制,目前廣泛地應(yīng)用于信息交換和身份認證,本系統(tǒng)使用RSA進行二維碼的信息加密。RSA 算法對信息進行加解密的過程:首先,通過程序產(chǎn)生一對密鑰對:公鑰PK={e,n}和私鑰SK={d,n};然后使用公鑰對信息進行加密,形成密文,進行發(fā)送;接收時使用私鑰對密文進行解密,得到原來的信息。在RSA 算法中,數(shù)據(jù)都要轉(zhuǎn)換為整數(shù),然后利用整數(shù)的求余運算進行加解密[6]。加密:Y=Xemod n,解密:X=Ydmod n,具體如圖1 所示。

圖1 RSA密碼體制圖

2.2 SHA512WithRSA數(shù)字簽名

作為電子投票系統(tǒng),我們既要保證投票人所投選的信息不被篡改,同時又要投票人對自已的投票內(nèi)容確認,不能事后抵賴,就要采用相應(yīng)的技術(shù)來保障。在計算機中模仿現(xiàn)實中的簽名和蓋章的技術(shù)稱為數(shù)字簽名。我們采用RSA 技術(shù)來實現(xiàn)數(shù)字簽名,當RSA 算法用于數(shù)字簽名時,不同于加密,簽名者用私鑰參數(shù)d 加密,也就是簽名;驗證者用簽名者的公鑰參數(shù)e 解密來完成認證[7-9]。

但是,由于RSA 算法存在計算方法本身同構(gòu)造成簽名易被偽造和計算時間長的弱點,所以在實際的運用中,通常是先對消息進行SHA-512 變換,SHA-512函數(shù)是一種散列函數(shù),它將任意長度的消息壓縮成512位的消息摘要。SHA-512 具有兩個方面的特性:一是單向性,給定散列值,計算消息很難;二是抗碰撞性,即給定消息M,要找到另一消息M'并滿足兩者的散列值很難?;谶@個特性,可以配合RSA 實現(xiàn)數(shù)字簽名。實現(xiàn)過程如圖2 所示。

圖2 SHA512WithRSA算法實現(xiàn)數(shù)字簽名的過程

3 系統(tǒng)架構(gòu)及投票流程的分析

3.1 系統(tǒng)架構(gòu)

傳統(tǒng)投票的流程是發(fā)放選票、進行投票、驗證選票和計票,公布投票結(jié)果。根據(jù)傳統(tǒng)投票的流程,開發(fā)電

子投票系統(tǒng)涉及的對象有選民、投票管理機構(gòu)和計票中心[2]。系統(tǒng)采用JSP+Servlet+Javabean 架構(gòu),服務(wù)器采用Tomcat,數(shù)據(jù)庫采用MySQL,使用JavaBean 實現(xiàn)業(yè)務(wù)邏輯,Servlet 進行流程控制。為了符合安全性方面的要求,把投票管理機構(gòu)和計票中心的數(shù)據(jù)分別存放于兩臺獨立的數(shù)據(jù)庫服務(wù)器。

3.2 投票流程

(1)身份注冊(發(fā)放選票):用戶在注冊頁面進行注冊,填寫有關(guān)的注冊項目,通過手機號來標識不同的用戶,連接投票管理機構(gòu)的數(shù)據(jù)庫服務(wù)器,查詢手機號,如果沒有注冊過,則使用系統(tǒng)統(tǒng)一的一對密鑰對,使用公鑰對注冊信息(手機號和姓名)進行加密,形成密文,再將密文生成二維碼,此二維碼為“選票二維碼”,作為選票憑證。

(2)用戶驗證(驗證選票):使用識讀設(shè)備來識讀選票的二維碼圖片,解密出二維碼的信息,讀出用戶手機號,然后連接投票管理機構(gòu)的數(shù)據(jù)庫服務(wù)器進行查詢,如果有此手機號,說明選票合法,則給此選票生成一個臨時ID,否則,則說明選票不合法,驗證通不過。

(3)進行投票:選票驗證通過后,進入投票界面,用戶可以進行投票,投票內(nèi)容(所選的候選人姓名和選民的臨時ID)使用SHA512WithRSA 算法進行數(shù)字簽名,同時,對有關(guān)的表進行更新。最后投票內(nèi)容的數(shù)字簽名、投票內(nèi)容和公鑰進行QR 編碼,生成“投票二維碼”,發(fā)送給客戶端。

(4)公布投票結(jié)果:整個投票過程結(jié)束后,計票中心公布投票結(jié)果,選民如果對投票結(jié)果有質(zhì)疑,則持“投票二維碼”進行檢驗。首先解碼,得到投票內(nèi)容的數(shù)字簽名、投票內(nèi)容和公鑰,然后用公鑰對投票內(nèi)容的數(shù)字簽名進行RSA 解密,得到消息摘要①,再連接到計票中心數(shù)據(jù)庫,根據(jù)投票內(nèi)容中的選民臨時ID 得到所選的候選人姓名,再將選民臨時ID 和候選人姓名使用SHA512 算法提取消息摘要②,消息摘要①和②如果不一致,表示投票內(nèi)容被篡改。

4 關(guān)鍵技術(shù)

4.1 加密二維碼的生成和識別

本系統(tǒng)使用一對密鑰對選民信息進行加密,在項目部署到服務(wù)器時,進行初始化,如果檢測到?jīng)]有公鑰文件和私鑰文件,則產(chǎn)生公鑰文件和私鑰文件,保存在服務(wù)器項目的RSAKey 目錄中,以Skey_RSA_pri.dat 和Skey_RSA_pub.dat 命名,使用java.security 包的相應(yīng)類來實現(xiàn)RSA 加解密。

產(chǎn)生公鑰和私鑰的算法如下:創(chuàng)建密鑰對生成器KeyPairGenerator,指定加密和解密算法為RSA,指定密鑰的長度1024,初始化密鑰對生成器。通過gen?KeyPair()得到密鑰對,getPublic()得到公鑰,getPrivate()得到私鑰,公鑰和私鑰都是對象,寫入文件中[9]。

加密算法如下:首先,通過讀取服務(wù)器的公鑰文件,取得公鑰對象RSAPublicKey,通過getPublicExpo?nent()得到公鑰中的e,通過getModulus()得到公鑰中的n,然后對明文進行URL 編碼,以解決中文亂碼問題,接著將編碼后的明文轉(zhuǎn)換為字節(jié)數(shù)組,再將字節(jié)數(shù)組轉(zhuǎn)換為BigInteger 類型c,然后通過c.modPow(e,n),得到密文的BigInteger 類型m,再轉(zhuǎn)換為字符形式,即得到密文。

解密算法如下:將要解密的密文轉(zhuǎn)換成對應(yīng)的BigInteger 類型c,然后從服務(wù)器讀取私鑰文件,得到RSAPrivateKey 對象,通過getPrivateExponent()得到私鑰中的d,通過getModulus()得到私鑰中的n,這樣就得到私鑰{d,n},通過c.modPow(d,n)得到明文的BigIn?teger 類型m,將m 的每個字節(jié)轉(zhuǎn)換成字符,連接起來,就得到明文。涉及到中文字符,則要進行URL 解碼,得到最終的明文,避免了中文亂碼。

進行二維碼的編碼:實現(xiàn)QR 碼的編碼和解碼需要使用兩個類庫:Qrcode_swetake.jar 和qrcode.jar,這兩個類庫在網(wǎng)上可以下載。編寫一個TwoDimensionCo?deImage 類用于設(shè)置二維碼圖片,編寫QRCodeEncoder?Handler 類和QRCoderDecoderHandler 類,用于實現(xiàn)編碼和解碼。生成的二維碼圖片的大小由所壓縮的信息量來確定,默認情況下圖片的大小是139×139,這個大小是比較適合QrcodeVersion 為7 的情況,通過new BufferedImage(139,139,BufferedImage.TYPE_INT_RGB)創(chuàng)建圖像對象。但針對密鑰的長度是1024,Qrcode?Version 就要設(shè)置為20,糾錯等級設(shè)置為M,編碼模式設(shè)置為B,這個版本的數(shù)據(jù)容量是666 個8 位字節(jié),圖片的大小要設(shè)置為300×300,才可能正常的解碼[10]。

4.2 SHA512WithRSA算法的簽名和驗證簽名

用SHA512WithRSA 算法進行數(shù)字簽名是用于檢驗服務(wù)器端有沒有篡改投票信息,所以把服務(wù)器端做為發(fā)送方,由發(fā)送方產(chǎn)生RSA 的公鑰和私鑰。

選民進行投票時,將投票內(nèi)容(即所選的候選人姓名和選民的臨時ID)使用SHA512WithRSA 算法進行數(shù)字簽名,在具體的處理上是每個選民有一對密鑰,首先對投票內(nèi)容使用SHA512 算法提取消息摘要,然后使用私鑰對消息摘要進行RSA 加密,這樣就實現(xiàn)了簽名,投票內(nèi)容的數(shù)字簽名、投票內(nèi)容和公鑰進行QR 編碼,保存在二維碼中,稱為“投票二維碼”。

選民如果對投票結(jié)果有質(zhì)疑,可持“投票二維碼”進行檢驗,首先解碼,得到投票內(nèi)容的數(shù)字簽名、投票內(nèi)容和公鑰,然后用公鑰對投票內(nèi)容的數(shù)字簽名進行RSA 解密,得到消息摘要①。再連接到計票中心數(shù)據(jù)庫,根據(jù)投票信息中的選民臨時ID 得到所投的候選人姓名,再將選民臨時ID 和候選人姓名使用SHA512 算法提取消息摘要②,消息摘要①和②如果不一致,表示投票內(nèi)容被篡改。

5 系統(tǒng)部署和測試

將系統(tǒng)部署到Tomcat 服務(wù)器,如圖3 所示,運行,進行測試。

圖3 系統(tǒng)部署圖

選民在注冊時,填寫手機號和姓名,即生成一張“選票二維碼”,作為一種身份的憑證,這是一張加密的二維碼,如圖4 所示,在其他的系統(tǒng)中識別不了。

圖4 生成“選票二維碼”圖

進行投票時,選民拿著“選票二維碼”在投票終端進行身份識別,驗證通過后則進入投票界面。如已投過票,則顯示“您已投過票,不能再投”,并且投票按鈕失效,投票頁面如圖5 所示。

圖5 投票頁面圖

投票完成后,則得到一個“投票二維碼”,如圖6所示。

圖6 生成“投票二維碼”

最后,計票中心公布投票結(jié)果,選民如果對投票結(jié)果有質(zhì)疑,則持“投票二維碼”進行檢驗。當顯示“數(shù)字簽名驗證通過”,則表示你的投票內(nèi)容沒有被纂改,如圖7 所示。

圖7 驗證投票結(jié)果圖

6 結(jié)語

本文通過對傳統(tǒng)投票系統(tǒng)的業(yè)務(wù)流程進行分析,針對現(xiàn)有的一些電子投票系統(tǒng)存在的不足,設(shè)計并實現(xiàn)了一種基于數(shù)字簽名和加密二維碼技術(shù)的電子投票系統(tǒng),并對系統(tǒng)的工作流程、功能和關(guān)鍵技術(shù)進行詳細介紹,最后進行系統(tǒng)的部署和測試。該系統(tǒng)通過數(shù)字簽名和加密二維碼技術(shù)達到了投票系統(tǒng)的安全要求,可用于各類評優(yōu)評獎的投票,還可以用于單位的年度考核,整個過程實現(xiàn)無紙化,投票過程全程自動化,不受人工干預(yù),做到了評選的公平公正。

猜你喜歡
計票數(shù)字簽名私鑰
比特幣的安全性到底有多高
基于改進ECC 算法的網(wǎng)絡(luò)信息私鑰變換優(yōu)化方法
淺析計算機安全防護中數(shù)字簽名技術(shù)的應(yīng)用
一種基于虛擬私鑰的OpenSSL與CSP交互方案
基于數(shù)字簽名的QR碼水印認證系統(tǒng)
基于數(shù)字簽名和HSM的數(shù)據(jù)庫篡改檢測機制
中國戲劇家協(xié)會第七屆理事會理事選舉計票人名單
中國戲劇家協(xié)會第七屆主席、副主席選舉計票人名單
復(fù)制數(shù)字簽名,巧妙偽裝病毒
LeeB私鑰分發(fā)協(xié)議的改進方案
光山县| 禹城市| 台前县| 武夷山市| 淅川县| 遂昌县| 台中县| 临朐县| 德昌县| 南涧| 隆安县| 平山县| 武穴市| 长寿区| 石柱| 彭阳县| 区。| 临高县| 田林县| 慈利县| 河池市| 娄底市| 罗源县| 浮山县| 长顺县| 扶沟县| 金秀| 南江县| 万安县| 托克托县| 台北县| 临安市| 夹江县| 杭锦后旗| 万源市| 肃宁县| 东台市| 桂东县| 门头沟区| 化德县| 娱乐|