基于区块链的一人多票电子投票方法及系统与流程

文档序号:18272140发布日期:2019-07-27 09:47阅读:449来源:国知局
基于区块链的一人多票电子投票方法及系统与流程

本发明属于计算机通信,密码学和区块链领域,涉及一种基于区块链的一人多票电子投票系统。



背景技术:

电子投票发展到现在也有不少年头了,但是一些安全问题仍然不能很好的解决,服务器一旦受到攻击,投票结果很容易被修改,投票的公平性就荡然无存。区块链作为比特币的底层技术实现,以其去中心化不可篡改等特点被用在电子投票系统中,增强了投票系统的安全性。但是,如今很多基于区块链的电子投票系统还有很多的不足。比如,由于每个投票人对应一个区块链账户,所以每个投票人只能对一个候选项投一票,从而导致可以根据每个区块链账户的交易信息的不同倒推出投票人的信息,这就不能保证投票信息的匿名性。而每个投票人只能对一个候选项投一票,制约了很多投票场景。并且现在的很多投票系统都是单方向的身份验证,即只能服务器验证用户的身份,而用户却不能验证服务器是否正确,这又大大增加了投票系统的安全隐患。



技术实现要素:

本发明的目的是针对如今基于区块链的电子投票系统的不足,设计了一种基于区块链的一人多票电子投票方法及系统。这个投票系统解决了每个投票人只能对一个候选项投一票以及用户不能验证服务器是否正确的问题。

基于区块链的一人多票电子投票系统包含了投票工具包模块,前端服务器模块,认证服务器模块,投票服务器模块,计票服务器模块,普通关系型数据库模块,区块链模块。其中:

投票工具包模块包括代表投票人身份的id、投票人的公钥和私钥、认证服务器的公钥和私钥、投票服务器的公钥和私钥、计票服务器的公钥和私钥、随机字符串生成器,用于辅助投票。

前端服务器模块,用于投票人的双向身份认证,生成选票,显示投票结果。

认证服务器模块,用于投票人的双向身份认证,选票签名。

投票服务器模块,用于验证选票签名,将选票第一次解密,以及将验证成功后的选票保存到区块链中。

普通关系型数据库模块,用于保存投票人的id哈希值,最大投票数,认证服务器的公钥和私钥,投票人的公钥,投票服务器的公钥和私钥、计票服务器的公钥和私钥。

区块链模块,用于保存选票。

计票服务器,用于从区块链中取出选票,计算投票结果,并将结果发送给前端服务器显示。

基于区块链的一人多票电子投票方法包含了双向身份认证,选票生成,对选票进行签名,将选票保存到区块链中,投票结果显示等多个部分流程。

双向身份认证流程包含如下步骤:

步骤1:投票人输入自己的id和一个随机数ru;前端服务器接收到id后使用单向哈希函数计算上述id的哈希值hid;前端服务器接收到随机数ru,调用投票工具包中的认证服务器的公钥,对ru进行加密得到eru;最后前端服务器将(hid,eru)发送给认证服务器。

上述投票人输入的id为事先从投票工具包中获取的。

上述加密为现有成熟技术,故不详解。

步骤2:认证服务器首先判断hid是否在普通关系型数据库中,若不存在,验证失败,结束。若存在,认证服务器调用普通关系型数据库中认证服务器的私钥,将eru解密得到dru;然后使用单向哈希函数计算dru得到hdru;同时认证服务器选择一个随机数rs,调用普通关系型数据库中的投票人的公钥,对其进行加密得到ers;最后认证服务器将(hdru,ers)发送给前端服务器。

步骤3:前端服务器将投票人输入的随机数ru采用单向哈希函数计算其的哈希值,然后与hdru比较,若不同,验证失败,结束。若相同,前端服务器调用投票工具包中的投票人的私钥,对ers解密得到drs,再使用单向哈希函数计算drs得到hdrs,最后将hdrs发送给认证服务器。

步骤4:认证服务器使用单向哈希函数计算随机数rs的哈希值,然后与接收到的数据hdrs比较,若不同,验证失败,结束。若相同,验证成功,允许用户登陆投票。

选票生成流程包含如下步骤:

步骤1:投票人使用投票工具包中的随机字符串生成器生成一串随机字符串s,然后传送到前端服务器;前端服务器使用s作为基础分别向s末尾追加一位数字,数字为从1到m,m为投票人的最大投票数,最后生成一组数量为m的新字符串。

步骤2:前端服务器使用单向哈希函数分别计算组内的新字符串得到一组哈希值。

步骤3:前端服务器将投票人所投的候选项编号分别追加到这组哈希值的最后得到未加密的一组选票。

步骤4:前端服务器调用投票工具包中的投票服务器和计票服务器的公钥;首先使用计票服务器的公钥对选票进行第一次加密,然后使用投票服务器的公钥对选票进行第二次加密。自此选票生成完毕。

对选票进行签名的步骤如下:

步骤1:前端服务器将id哈希值与选票发送给认证服务器。

步骤2:认证服务器判断接收到的id哈希值是否在普通关系型数据库中,若不存在,认证服务器拒绝签名,若存在,认证服务器判定这一组选票是否小于等于当前id的最大投票数,若是则对这一组选票进行签名,每签一个,都会将最大投票数减一,直到最大投票数为0。若不是,则拒绝签名。

步骤3:认证服务器将签名之后的这一组选票发送给前端服务器,前端服务器调用投票工具包中认证服务器的公钥验证签名是否正确,若正确,签名结束,否则,再次请求认证服务器签名。

上述验证签名为现有成熟技术,故不详解。

将验证成功后的选票保存到区块链流程的步骤如下:

步骤1:前端服务器将未签名的选票,以及签过名的选票发送给投票服务器。

步骤2:投票服务器调用普通关系型数据库中认证服务器的公钥解密签名后的这一组选票,并与未签名的选票进行比较,若有一个选票不同,验证签名失败,投票服务器拒绝投票。

步骤3:若全部相同,验证签名成功,投票服务器调用普通关系型数据库中投票服务器的私钥将这一组选票第一次解密,然后随机选择一组区块链账户,分别将选票写入到区块链中。

投票结果显示流程的步骤如下:

步骤1:计票服务器判断投票是否结束,若未结束,则循环等待投票结束。

步骤2:若投票结束,计票服务器从区块链中取出选票,调用普通关系型数据库中计票服务器的私钥对选票进行解密,并计算每个候选项的票数,最后将选票与票数发送给前端服务器。

步骤3:前端服务器展示接收到的选票以及每个后选项所得票数,用于投票人进行投票结果的验证。

本发明的有益效果:

1.采用挑战/响应认证方式,使投票人和服务器可以双向认证,大大增强了安全性。

2.可以根据投票人所投的候选项生成多个选票,实现了一人多票的功能,并且每个选票都是可以验证的。

3.对所投的票进行两次加密之后再签名,提高了匿名性。

4.将服务器分为前端,认证,投票,计票四个,使权力分散,安全性大大提高。

5.本发明与当前别的投票系统相别,实现了一人多票功能,并增强了投票过程的匿名性,投票结果的公开可验证,整体的安全性。

附图说明

图1为投票系统整体架构图

图2为双向身份验证流程图

图3为选票生成流程图;

图4为对选票进行签名流程图;

图5为保存选票到区块链流程图;

图6为投票结果显示流程。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了方便,以下所有文字中,投票人用u表示,前端服务器用fs,认证服务器用as表示,投票服务器用vs表示,计票服务器用cs表示。

实施例一,参见图1所示,基于区块链的一人多票电子投票方法及系统包含了投票工具包模块,前端服务器模块,认证服务器模块,投票服务器模块,计票服务器模块,普通关系型数据库模块,区块链模块。其中:

投票工具包模块包括代表投票人身份的id、投票人的公钥和私钥、认证服务器的公钥和私钥、投票服务器的公钥和私钥、计票服务器的公钥和私钥、随机字符串生成器,用于辅助投票。

前端服务器模块,用于投票人的双向身份认证,生成选票,显示投票结果。

认证服务器模块,用于投票人的双向身份认证,选票签名。

投票服务器模块,用于验证选票签名,将选票第一次解密,以及将验证成功后的选票保存到区块链中。

普通关系型数据库模块,用于保存投票人的id哈希值,最大投票数,认证服务器的公钥和私钥,投票人的公钥,投票服务器的公钥和私钥、计票服务器的公钥和私钥。

区块链模块,用于保存选票。

计票服务器,用于从区块链中取出选票,计算投票结果,并将结果发送给前端服务器显示。

实施例二,参见图2,3,4,5,6所示,基于区块链的一人多票电子投票方法及系统包含了双向身份认证,选票生成,对选票进行签名,将选票保存到区块链中,投票结果显示5个部分,下面结合图示,对这5部分进行具体的说明,其中,

双向身份认证流程包含如下步骤:

步骤1:u输入自己的id和一个随机数ru;fs接收到id后使用单向哈希函数计算上述id的哈希值hid;fs接收到随机数ru,调用投票工具包中的认证服务器的公钥pas,对ru进行加密得到eru;最后前端服务器将(hid,eru)发送给认证服务器。

步骤2:as首先判断hid是否在普通关系型数据库中(数据库保存着所有投票人id的哈希值以及公钥),若不存在,验证失败,结束。若存在,as调用普通关系型数据库中as的私钥pas,将eru解密得到dru;然后使用单向哈希函数计算dru得到hdru;同时as选择一个随机数rs,调用普通关系型数据库中的投票人的公钥,对其进行加密得到ers;最后as将(hdru,ers)发送给fs。

步骤3:fs将投票人输入的随机数ru采用单向哈希函数计算其哈希值,然后与hdru比较,若不同,验证失败,结束。若相同,fs调用投票工具包中的投票人的私钥,对ers解密得到drs,再使用单向哈希函数计算drs得到hdrs,最后将hdrs发送给as。

步骤4:as使用单向哈希函数计算随机数rs的哈希值,然后与接收到的数据hdrs比较,若不同,验证失败,结束。若相同,验证成功,允许用户登陆投票。

选票生成流程包含如下步骤:

步骤1:u使用投票工具包中的随机字符串生成器生成一串随机字符串s,然后传送到fs;fs使用s作为基础分别向s末尾追加一位数字,数字为从1到m,m为投票人的最大投票数,最后生成一组数量为m的新字符串ss。

步骤2:fs使用单向哈希函数分别计算ss得到一组哈希值hss。

步骤3:fs将投票人所投的候选项编号vi分别追加到这组哈希值的最后得到未加密的一组选票vs。

步骤4:fs调用投票工具包中的vs和cs的公钥pvs和pcs;首先使用pcs对选票进行第一次加密得到evs1,然后使用pvs对evs1进行第二次加密得到evs2。自此选票生成完毕。

对选票进行签名的步骤如下:

步骤1:fs将hid与选票evs2发送给as。

步骤2:as判断接收到的hid是否在数据库中,若不存在,as拒绝签名,若存在,as判定这一组选票是否小于等于当前id的最大投票数,若是则对这一组选票进行签名,每签一个,都会将最大投票数减一,直到最大投票数为0。若不是,则拒绝签名。

步骤3:as将签名之后的这一组选票发送给fs,fs使用as的公钥验证签名是否正确,若正确,签名结束,否则,再次请求as签名。

将选票保存到区块链中的步骤如下:

步骤1:fs将(evs2,sevs2)发送给vs。

步骤2:vs使用as的公钥pas解密sevs2,并与evs2进行比较,若有一个选票不同,验证签名失败,vs拒绝投票。

步骤3:若全部相同,验证签名成功,vs使用自己的私钥将evs2第一次解密得到evs1,然后随机选择一组区块链账户,分别将evs1写入到区块链中。

投票结果显示流程的步骤如下:

步骤1:cs判断投票是否结束,若未结束,则循环等待投票结束。

步骤2:若投票结束,cs从区块链中取出evs1,使用自己的私钥对evs1进行解密得到vs,并计算每个候选项的票数result,最后将(vs,result)发送给fs。

步骤3:fs展示接受到的vs以及result,用于u进行投票结果的验证。

本发明设计了一种基于区块链的一人多票电子投票方法及系统,与现有基于区块链的投票系统相比,解决了每个投票人只能对一个候选项投一票以及用户不能验证服务器是否正确的问题。

本发明不局限于上述具体实施方式,本领域技术人员还可据此做出多种变化,但任何与本发明等同或者类似的变化都应涵盖在本发明权利要求的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1