[0003] 本发明的目的是针对如今基于区块链的电子投票系统的不足,设计了一种基于区块链的一人多票电子投票方法及系统。这个投票系统解决了每个投票人只能对一个候选项投一票以及用户不能验证服务器是否正确的问题。
[0004] 基于区块链的一人多票电子投票系统包含了投票工具包模块,前端服务器模块,认证服务器模块,投票服务器模块,计票服务器模块,普通关系型数据库模块,区块链模块。其中:
[0005] 投票工具包模块包括代表投票人身份的ID、投票人的公钥和私钥、认证服务器的公钥和私钥、投票服务器的公钥和私钥、计票服务器的公钥和私钥、随机字符串生成器,用于辅助投票。
[0006] 前端服务器模块,用于投票人的双向身份认证,生成选票,显示投票结果。
[0007] 认证服务器模块,用于投票人的双向身份认证,选票签名。
[0008] 投票服务器模块,用于验证选票签名,将选票第一次解密,以及将验证成功后的选票保存到区块链中。
[0009] 普通关系型数据库模块,用于保存投票人的ID哈希值,最大投票数,认证服务器的公钥和私钥,投票人的公钥,投票服务器的公钥和私钥、计票服务器的公钥和私钥。
[0010] 区块链模块,用于保存选票。
[0011] 计票服务器,用于从区块链中取出选票,计算投票结果,并将结果发送给前端服务器显示。
[0012] 基于区块链的一人多票电子投票方法包含了双向身份认证,选票生成,对选票进行签名,将选票保存到区块链中,投票结果显示等多个部分流程。
[0013] 双向身份认证流程包含如下步骤:
[0014] 步骤1:投票人输入自己的ID和一个随机数ru;前端服务器接收到ID后使用单向哈希函数计算上述ID的哈希值hID;前端服务器接收到随机数ru,调用投票工具包中的认证服务器的公钥,对ru进行加密得到eru;最后前端服务器将(hID,eru)发送给认证服务器。
[0015] 上述投票人输入的ID为事先从投票工具包中获取的。
[0016] 上述加密为现有成熟技术,故不详解。
[0017] 步骤2:认证服务器首先判断hID是否在普通关系型数据库中,若不存在,验证失败,结束。若存在,认证服务器调用普通关系型数据库中认证服务器的私钥,将eru解密得到dru;然后使用单向哈希函数计算dru得到hdru;同时认证服务器选择一个随机数rs,调用普通关系型数据库中的投票人的公钥,对其进行加密得到ers;最后认证服务器将(hdru,ers)发送给前端服务器。
[0018] 步骤3:前端服务器将投票人输入的随机数ru采用单向哈希函数计算其的哈希值,然后与hdru比较,若不同,验证失败,结束。若相同,前端服务器调用投票工具包中的投票人的私钥,对ers解密得到drs,再使用单向哈希函数计算drs得到hdrs,最后将hdrs发送给认证服务器。
[0019] 步骤4:认证服务器使用单向哈希函数计算随机数rs的哈希值,然后与接收到的数据hdrs比较,若不同,验证失败,结束。若相同,验证成功,允许用户登陆投票。
[0020] 选票生成流程包含如下步骤:
[0021] 步骤1:投票人使用投票工具包中的随机字符串生成器生成一串随机字符串s,然后传送到前端服务器;前端服务器使用s作为基础分别向s末尾追加一位数字,数字为从1到M,M为投票人的最大投票数,最后生成一组数量为M的新字符串。
[0022] 步骤2:前端服务器使用单向哈希函数分别计算组内的新字符串得到一组哈希值。
[0023] 步骤3:前端服务器将投票人所投的候选项编号分别追加到这组哈希值的最后得到未加密的一组选票。
[0024] 步骤4:前端服务器调用投票工具包中的投票服务器和计票服务器的公钥;首先使用计票服务器的公钥对选票进行第一次加密,然后使用投票服务器的公钥对选票进行第二次加密。自此选票生成完毕。
[0025] 对选票进行签名的步骤如下:
[0026] 步骤1:前端服务器将ID哈希值与选票发送给认证服务器。
[0027] 步骤2:认证服务器判断接收到的ID哈希值是否在普通关系型数据库中,若不存在,认证服务器拒绝签名,若存在,认证服务器判定这一组选票是否小于等于当前ID的最大投票数,若是则对这一组选票进行签名,每签一个,都会将最大投票数减一,直到最大投票数为0。若不是,则拒绝签名。
[0028] 步骤3:认证服务器将签名之后的这一组选票发送给前端服务器,前端服务器调用投票工具包中认证服务器的公钥验证签名是否正确,若正确,签名结束,否则,再次请求认证服务器签名。
[0029] 上述验证签名为现有成熟技术,故不详解。
[0030] 将验证成功后的选票保存到区块链流程的步骤如下:
[0031] 步骤1:前端服务器将未签名的选票,以及签过名的选票发送给投票服务器。
[0032] 步骤2:投票服务器调用普通关系型数据库中认证服务器的公钥解密签名后的这一组选票,并与未签名的选票进行比较,若有一个选票不同,验证签名失败,投票服务器拒绝投票。
[0033] 步骤3:若全部相同,验证签名成功,投票服务器调用普通关系型数据库中投票服务器的私钥将这一组选票第一次解密,然后随机选择一组区块链账户,分别将选票写入到区块链中。
[0034] 投票结果显示流程的步骤如下:
[0035] 步骤1:计票服务器判断投票是否结束,若未结束,则循环等待投票结束。
[0036] 步骤2:若投票结束,计票服务器从区块链中取出选票,调用普通关系型数据库中计票服务器的私钥对选票进行解密,并计算每个候选项的票数,最后将选票与票数发送给前端服务器。
[0037] 步骤3:前端服务器展示接收到的选票以及每个后选项所得票数,用于投票人进行投票结果的验证。
[0038] 本发明的有益效果:
[0039] 1.采用挑战/响应认证方式,使投票人和服务器可以双向认证,大大增强了安全性。
[0040] 2.可以根据投票人所投的候选项生成多个选票,实现了一人多票的功能,并且每个选票都是可以验证的。
[0041] 3.对所投的票进行两次加密之后再签名,提高了匿名性。
[0042] 4.将服务器分为前端,认证,投票,计票四个,使权力分散,安全性大大提高。
[0043] 5.本发明与当前别的投票系统相别,实现了一人多票功能,并增强了投票过程的匿名性,投票结果的公开可验证,整体的安全性。