基于隐私保护与身份验证的网络投票系统

时间:2022-05-14 02:52:24

基于隐私保护与身份验证的网络投票系统

摘 要:网络投票具有便捷高效的优点,但是由于投票人对个人隐私的担忧,阻碍了网络投票的现实应用。为此,本文实现一套保护隐私的安全投票协议,来解决投票环节中第三方攻击导致的数据泄密以及投票过程未匿名化的问题,从而实现集成安全技术的隐私保护机制[1],实现信息的安全采集与提交。

关键词:协议算法;加密解密;网络投票;匿名化

中图分类号:TN918.2

随着互联网科技的飞速发展,信息化已成为人们生活必不可缺的一部分。信息化技术使社会活动变得简单,提高了生活和工作效率,但同时也使得安全性降低。网络投票系统作为典型的数据采集系统,其安全性一直为人所诟病。典型的网络投票系统由计票人端S端和多个投票人C端组成。S端接收C端传送来的投票数据,然后进行统计得出结果。显而易见,投票过程容易受到黑客的攻击,攻击者既可能来自第三方,也可能来自计票人:

(1)第三方通过对通信链路的攻击,获取通信链路上传输的选票内容;

(2)第三方对计票人端的攻击,获取或者更改从投票端得到的选票内容;

(3)计票人通过监控,可以知道某个特定的投票人的选票内容。

第三方攻击主要发生在使用明文传输数据的场合,攻击者可以轻易地获取甚至篡改投票内容和结果。计票人攻击主要是将收到的选票与其通信源(如IP地址)关联,从而确定各个投票人的投票内容。换言之,投票人的匿名化在当前的网络投票系统中也是并未真正实现的。

为解决这些安全问题,本文的投票系统采用了多项安全措施:(1)使用RSA非对称加密算法[2];(2)CA认证;(3)签名算法;(4)匿名化过程[3]。我们将在讨论这些措施的基础上完成安全协议相关的软件设计,并在Windows平台下采用Java实现保障安全和匿名性的投票系统。

1 安全机制设计

1.1 RSA非对称加密算法

RAS非对称加密算法的重要特征是它所用的加密和解密的密钥不同,他们是关联的一对,相互之间不能替换,两个密钥中公钥是公开的,私钥由用户秘密保存。它们产生于两个大素数,所以要想破解密钥必须先知晓两个素数,因此该种加密算法很难被破解。RSA非对称加密算法在通信网络中的使用模型如图1所示:

图1 RSA非对称加密算法模型

2.2 CA(Certificate Authority)认证

为了解决密钥管理的问题,我们设计采用CA认证方式为每个需要使用密钥对的用户发放密钥对,并对外公布公钥。这个过程将保证协议中所有的密钥对均是经过CA中心认证可靠安全的。一旦发现任何密钥的来源不是CA中心,则此次投票即是无效的。

2.3 安全协议

每个投票者已有两对钥匙:用于签名的私钥对(ui,vi)以及用于加解密的私钥公钥对(xi,yi)。此外,计票人有用于加解密的私钥公钥对(XDM,YDM)。这些钥匙对中的公钥是人人皆知的。

2.3.1 协议第一阶段――密钥生成阶段

每个投票者首先从CA中心获取各自的签名密钥对和加解密的密钥对,然后随机生成一个临时的密钥对(wi,zi)。投票人i使用ui签名其临时公钥,得到zi并发给计票人,然后计票人再把zi发给所有投票人,任何人都可以用已知的公钥vi来验证这是用ui签名的结果,从而相信zi即为投票者i所发。如果签名没有被核实,那么就要终止本协议。

2.3.2 协议第二阶段――数据提交阶段

每个投票者通过计票人的公钥YDM来加密其投票数据,然后再用第一阶段所生成的临时辅助公钥zi来进行循环加密(按zN,zN-1,…,z1序逐次加密)。

Ci′={di}YDM

Ci″={Ci′}zN:z1

其次,每个投票者先保存经过两次加密后的密文Ci″,然后用每个投票者初始公钥yi再次进行循环加密(按yN,yN-1,…,y1序逐次加密)。

Di={Ci″}yN:y1

然后,每个投票者把最后加密的密文发给计票人,此时计票人得到的数据为(D1,…,DN),顺序对应投票人(1…N)。

2.3.3 协议第三阶段――匿名化阶段

计票人把经过加密的密文发给每个投票人(1…N),而每个投票人验证其密文在(D1,…,DN)中是否正确出现,如果没有出现或者出现多于一次,那么就终止本次协议。

计票人把数据(D1,…,DN)发给投票人1。投票人1用自己的私钥x1对数据进行解密,剥去自己所加的一层密,并重新随机排列投票数据,随后将解密后的数据交还计票人。计票人继续将得到数据发给投票人2,重复上述步骤至投票人N解密和打乱结束。

Rj=decωi[Dπ(j)]

计票人最终得到(R1,…,RN),此时与投票者之间已经不存在对应关系,实现了投票人的匿名化。

2.3.4 协议第四阶段――验证阶段

首先,计票人保留(R1,…,RN),如果没有恶意攻击,那么(R1,…,RN)就应该和(C1″,…,CN″)这一组数据相同。然后计票人把(R1,…,RN)发给每个投票者,每个投票者确认自己保存过的密文Ci″是(R1,…,RN)中的一个,如果是的话,就签名(R1,…,RN)并发给计票人。在计票人验证了收到的N组签名过的(R1,…,RN)的签名正确后,每个投票者就把他的临时私钥wi,发给计票人。

2.3.5 协议第五阶段――解密阶段

计票人先用临时私钥wi按(w1,…,wN)的顺序进行解密,然后用计票人的私钥XDM,来解刚开始用YDM所加的密,这样就恢复为最原始的未加密的数据。

3 软件系统实现

投票系统由JAVA中的C/S通信方式实现。作为投票系统,计票人端应该实现最基本的功能:投票内容的读取,投票结果的显示和保存;投票端实现的功能:投票。本系统为了达到简便,在密钥管理上,我们假设密钥绝对安全可靠,所有密钥对均由自己产生。

从协议来看,C端除自身密钥外所有数据均来自于S端,并且每完成一次操作之后数据将回传给S端,因此需要在S端设计程序响应操作系统来完成最核心的所有交互功能(与C端的数据传输功能)。通过对各种交互功能的调用来一步步完成安全协议,安全协议中的匿名化阶段的打乱操作,我们使用JDK中自带的函数Collections.shuffle()来实现,保证打乱数据的随机化。

以下从S端和C端分别介绍各自的模块信息。

图2 Server端软件模块图

3.1 Server端5个模块及其函数实现

如图2所示,Server端由准备模块、CS连接模块、投票监听模块、程序回应操作模块、数据存储模块组成,各模块分别实现不同的功能。

3.1.1 准备模块

程序开始运行便调用该模块,主要任务是完成S端操作界面的生成以及对voteFile.txt文件中投票内容的读取。同时通过GetMyOwnKeys()函数生成自身的密钥等待处理。运行完毕后生成两个线程模块:C/S连接模块和投票监听模块。

3.1.2 C/S连接模块

实现C端的连接请求的监听和C/S连接的建立,并为每个C/S连接绑定独立的程序回应模块操作模块。

3.1.3 投票监听模块

此模块同步检测是否所有投票人均已投票。一旦所有投票都已完成,则拒绝接受新的C/S连接请求,停止C/S连接模块的运行,然后开始调用协议模块。

3.1.4 程序回应操作模块

每个C/S连接均拥有独立的该模块。此模块通过switch语句实现根据Client端的不同指令代码进行相应操作。主要实现与C端之间各种的数据传送,根据指令所选择执行的函数及其功能有:sendText():发送投票内容;getClientSignPublicKeyAndAdd():接收client端的签名公钥并加入到公钥列表;getClientPublicKeyAndAdd():接收client端的公钥,并加入公钥列表;getClientTempPublicKeyAndCheck():接收client端的签名过的临时公钥,进行验证并加入临时公钥、列表;sendOwnPublicKey():发送自己的公钥;sendPublicKeyList():向当前client端发送所有client端的公钥(包括临时公钥);getChoice():接收Client端的加密后的投票内容。

3.1.5 协议模块

在所有投票人均投完票后,开始进行安全协议的实现。根据协议的具体步骤,通过编排调用程序响应模块中的具体函数,来辅助完成实现协议的过程。协议第一阶段调用程序回应操作模块中的相应函数完成密钥的传输。server端协议第二阶段secondPeriod(),实现加密数据的传输;server端协议第三阶段thirdPeriod(),验证是否所有投票人内容均在数据中(完整性检测);协议第四阶段fourthPeriod(),解密最后的临时密钥,获得最原始数据。在协议模块中上述阶段依次执行,一旦发现任何不安全的因素,则立即将警告信息显示在S端界面中,并将信息反馈给各C端,同时停止投票过程。

3.1.6 数据存储模块(附加模块,包含在模块5中)

以上模块都完成后,进入最终数据存储模块。此模块通过不同按钮的事件响应来显示和存储最终投票结果。

3.2 Client端2个模块及其函数实现

如图3所示,C端由准备模块,连接以及投票模块和协议模块组成。三个模块顺序执行。

图3 Client端软件模块图

3.2.1 准备模块

此模块用以绘制C端操作界面以及自身密钥生成。

3.2.2 连接以及投票模块

首先进行C/S的连接,之后通过向S端程序回应操作模块发送不同的指令代码向S端请求获取相应的密钥,如S端的密钥和其他C端的密钥,完成协议开始前的准备。与S端进行交互的主要函数有getServerPublicKey():获得Server的公钥;sendSignPublicKey():发送自己的签名公钥;sendPublicKey():发送自己的公钥。

3.2.3 协议进行模块

此模块在当前投票提交后执行协议模块。通过执行firstPeriod()方法实现协议数据提交阶段,对投票内容进行加密;执行secondPeriod()方法实现投票匿名化;执行thirdPeriod()方法实现协议验证阶段;执行fourthPeriod()方法实现协议的解密阶段,接收server端反馈,是否投票成功。投票成功后,C端程序任务完成,关闭程序。

每个阶段最后均会接收S端反馈信息,确认协议安全正确进行。

4 操作流程

下文将具体介绍该系统的操作流程。本系统分为服务器和客户机两个模块,投票人为客户机,计票人为服务器。客户机和服务器通过网络进行通信。软件采用java语言编写,运行前需要安装JDK1.6或以上版本。

4.1 文件说明

图4 安装和初始化文件目录

如图4为安装和初始化文件。voteclient.jar为客户机端软件,放在投票人PC上。其余3个文件放到服务机端,3个文件必须在同一目录下。

投票内容保存在VoteFile.txt文件中,如果想更改投票内容,可打开此文件进行编辑。选项必须使用大小写字母和英文符号“.”(如A.)标识。

4.2 Server端操作

如图5(a)为Server端操作界面,软件名为voteserver.jar,直接双击打开即可。打开后,将自动读取votefile.txt文件中的投票内容发送到Client端并显示在Server端界面上,以确保发送内容无误。图5(b..d)为server端不同功能的操作结果。

图5(a) 图5(b)

图5(c) 图5(d)

4.3 Client端操作

如图5(e),在IP文本框中输入服务器的IP进行连接,连接成功将会自动读取投票内容显示在界面中。

如图5(f)连接完成后,在选票框中填入选项,点击提交后,只有出现thanks for voting才表示投票成功,否则说明投票过程还在继续,不能关闭软件。

图5(e) 图5(f)

5 结论与致谢

在信息化时代下,网络投票是如此的普遍,如果不加管制和维护,将会造成网络信息的混乱和隐私的泄露。当前环境下,虽然只是加强了网络投票系统这一种系统的安全性,但是考虑到如今互联网用户的数量以及网络投票的普遍性,我们实现了数据加密和匿名化的网络投票系统将会有相当的使用价值。

参考文献:

[1]William Stallings.Cryptography and network security principles and practice (5th Edition). Prentice Hall, 2011.

[2]Z.Yang,S.Zhong,and R.N.Wright. Anonymity-preserving data collection. In Proc. of the 11th ACM SIGKDD, 2005, 334343.

[3]J. Brickell and V. Shmatikov. Efficient anonymity preserving data collection. In Proc. of the ACM SIGKDD, 2006, 76-85.

作者简介:陈桥(1992.11.07-),男,江苏丹阳人,在读本科生,研究方向:网络软件开发及网络安全研究。

作者单位:浙江工商大学 信息与电子工程学院,浙江杭州 310018

*感谢浙江工商大学学生创新活动基金对本课题研究的支持。同时,感谢刘君强老师的悉心指导。

上一篇:数独游戏的难度划分及创建算法设计 下一篇:探究计算机基础和教学评价体系