1.一种基于环签名和区块链的电子投票方法,其特征在于,包括以下步骤:步骤1,公民在客户端验证身份并生成密钥对;
步骤2,通过验证的公民发送ID与公钥映射至身份源服务器;
步骤3,公民选择候选人并向身份源服务器请求公钥集合;
步骤4,身份源服务器产生带有签名的随机公钥集合并发送给公民;
步骤5,公民对投票进行环签名并将签名后的投票发送给系统;
所述步骤5中,公民对投票进行环签名并将签名后的投票发送给系统;其步骤如下:步骤5.1:系统用基于投票信息的伪随机数作为环签名中对称密钥k=SHA256(msg),其中SHA256()为固定输出256位的哈希函数;
步骤5.2:系统利用密码学安全伪随机数生成算法生成随机数v;
步骤5.3:系统为用户在步骤4中选取的公钥集合(P1,P2,…,Pn)利用密码学安全伪随机数生成算法生成随机数集合(x1,x2,…,xn),但其中不包括自己公钥Ps对应的xs;并计算相应的yi=gi(xi),其中,yi为加密后的内容,gi()为用第i个成员的公钥Pi对内容用RSA进行加密;
步骤5.4:系统解方程 得到ys,其中, 为异或
操作,yn为用第i个成员公钥加密后的内容,n=1、2、3、…、n,Ek()为用高级加密标准AES‑
256和密钥k对内容进行加密;
‑1 ‑1
步骤5.5:系统计算xs=gs (ys),gs ()为用签名者的私钥Ss对内容用RSA解密;
步骤5.6:投票信息的环签名为2n+1个元组,即,RING_SGN=(P1,P2,…,Pn;v;x1,x2,…,xn);
步骤5.7:客户端发送带有环签名投票信息作为交易TX={CAND_ID,TS,RING_SGN}给系统当前的主备份节点,其中CAND_ID代表候选人,TS代表时间戳,RING_SGN为{CAND_ID,TS}的信息摘要的环签名;
步骤6,主备份服务器首先验证环签名的合法性,然后将一段时间内收集到的合法投票打包成区块;
步骤7,主副备份服务器之间通过PBFT共识机制对主备份服务器打包的区块达成共识;
所述步骤7中,主副备份服务器之间通过PBFT共识机制对主备份服务器打包的区块达成共识;其步骤如下:步骤7.1:主备份节点进入预准备阶段,为当前区块分配序列号n,广播预准备信息{{PRE‑PREPARE,v,n,MD(BLK)}σp,BLK}给所有副备份节点,PRE‑PREPARE代表这是预准备信息;v为当前的视图,当系统中主备份节点出现错误时,视图需要更换;BLK为打包好的区块;
MD(BLK)为BLK的信息摘要;σp为主备份节点的签名;
步骤7.2:当收到步骤7.1主备份节点发送的预准备信息,副备份节点进入准备阶段,副备份节点首先验证区块中的交易是否全部合法,若合法则广播准备信息{PREPARE,v,n,MD(BLK),i}σi给其它所有备份节点,包括主备份节点,PREPARE代表这是准备信息;i为第i个备份节点的ID;σi为第i个副备份节点的签名,然后等待超过系统节点数量2/3的准备信息或承诺信息;
步骤7.3:所有节点检查每一个收到的准备信息,检查签名的正确性,视图号是否等于当前的视图号且序列号n和信息摘要d是否匹配预准备信息,当收到符合条件的准备信息超过2/3节点数量时,节点进入承诺阶段,节点i广播承诺信息{COMMIT,v,n,MD(BLK),i}σi给其它节点;COMMIT为承诺信息;
步骤7.4:所有备份节点检查每一个收到的承诺信息,检查签名的正确性且视图号是否等于当前的视图号,当收集到的合法承诺消息数量超过2/3备份节点数量时,备份节点将此区块加入区块链;
步骤7.5:公民可根据交易哈希值在区块链上查询自己的交易是否已经写入了区块链;
步骤8,投票截止后,系统从区块链中统计各个候选人总票数,并确定胜选者。
2.根据权利要求1所述的一种基于环签名和区块链的电子投票方法,其特征在于:所述步骤1中,公民在客户端验证身份并生成密钥对的步骤如下:步骤1.1:公民在客户端提交身份证正反面照片,系统识别出其中的身份证号;
步骤1.2:系统提示输入绑定身份证号的手机号码并点击获取验证码,系统根据运营商提供的数据库检查输入的手机号码是否绑定了上传的身份证中的身份证号,如果是绑定过的,则发送验证码;否则让公民检查是否输错;
步骤1.3:如果公民输入的验证码正确,则注册成功;否则重新申请验证码进行验证。
3.根据权利要求1所述的一种基于环签名和区块链的电子投票方法,其特征在于:所述步骤4中,身份源服务器产生带有签名的随机公钥集合并发送给公民;身份源服务器产生的随机公钥集合中应包含申请者的公钥并将公钥集合签名以防公民自己寻找公钥集合进行多次投票,此外,系统每次应检查该公民是否已经申请过以防公民再次申请以进行多次投票。
4.根据权利要求1所述的一种基于环签名和区块链的电子投票方法,其特征在于:所述步骤6中,主备份服务器首先验证环签名的合法性,然后将一段时间内收集到的合法投票打包成区块;其步骤如下:步骤6.1:主备份服务器计算随机数集合(x1,x2,…,xn)对应的yi=gi(xi);
步骤6.2:主备份服务器计算对称密钥k=SHA256(msg);
步骤6.3:主备份服务器验证方程Ek(yn⊕Ek(yn‑1⊕Ek(…⊕Ek(y1⊕v)…)))=v是否成立;
步骤6.4:若步骤6.3成立,则主备份服务器将此交易放入区块中,主备份节点在一定时间内收集合法交易,这些交易组成默克尔树,也就是merkle tree,所有交易组成区块体,默克尔树根哈希值和前一个区块的哈希值作为区块头,并打包好整个区块。