本发明涉及可追踪的电子投票技术领域,具体涉及一种基于区块链的可追踪的完全匿名电子投票方法及系统。
背景技术:
匿名电子投票方案一般基于隐私保护技术。当前基于区块链的电子投票方案,一般采用加密方案、盲签名、群签名、环签名等技术;同时,针对“双投”的问题,已经存在基于可链接环签名、可链接群签名的投票方案应用在区块链上,实现检查双投选票的效果。
现有的实现隐私保护的区块链投票方案,虽然可以实现一定的匿名性,也具有一定的可链接性或可追踪性,但仅仅考虑了投票时的匿名,不能实现完全匿名,即匿名注册和匿名投票;而且对于部分方案只能检测双投是否存在,或者依赖权威机构去追踪双投者的身份,也未能实现公开可追踪。此外,完全匿名这一强隐私保护需求还未在当前的投票方案中实现。因此,实现完全匿名的公开可追踪的基于区块链的投票方案,亟待解决。
技术实现要素:
为了克服现有技术存在的缺陷与不足,本发明针对完全匿名和可追踪的需求,提出了一种基于区块链的可追踪的完全匿名电子投票方法;
本发明的第二目的在于提出了一种基于区块链的可追踪的完全匿名电子投票系统。
为了达到上述目的,本发明采用以下技术方案:
一种基于区块链的可追踪的完全匿名电子投票方法,包括以下步骤:
投票初始化,生成主公钥和主私钥;
用户注册,结合主私钥通过注册机构为用户模块中每个用户生成匿名凭证;
发布投票任务,通过选举委员会设定并公开投票要求;
投票处理,结合主公钥生成选票并通过认证操作对选票进行认证,生成认证令牌,并投出该选票和认证令牌;
验证选票,通过验证操作检查得到的认证令牌是否有效;
追踪双投用户,判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
计票,筛选有效选票并计算投票结果。
作为优选的技术方案,所述投票初始化,包括以下具体步骤:
令φ=(φ.setup,φ.gen,φ.verify)为具有属性的匿名凭证处理,即φ处理;其中,φ.setup为φ处理的设置操作,用户初始化匿名凭证处理;φ.gen为φ处理的证书生成操作,用于生成用户的匿名凭证;φ.verify为φ处理的验证操作,根据证书编号、匿名凭证、公开参数验证匿名凭证的有效性;
令π=(π.setup,π.prover,π.verifier)为zk-snark零知识证明处理,即π处理;其中,π.setup为π处理的设置操作,用于初始化zk-snark零知识证明处理;π.prover为π处理的证明操作,用于生成一个有效的证明;π.verifier为π处理的验证操作,用于验证认证令牌的有效性;
令e=(e.setup,e.encrypt,e.decrypt)为cpa安全的加密处理,即e处理;其中,e.setup为e处理的设置操作,用于初始化加密处理;e.encrypt为e处理的加密操作,用于加密明文生成密文;e.decrypt为e处理的解密操作,用于解密生成明文。
作为优选的技术方案,所述生成主公钥和主私钥,包括以下具体步骤:
通过注册机构执行φ处理的设置操作,根据安全参数进行初始化匿名凭证处理得到公开参数和主私钥;
通过注册机构执行π处理的设置操作,根据安全参数、第一np语言进行初始化zk-snark零知识证明处理得到公共参考字符串;
通过注册机构选择两个hash函数,h1:{0,1}*×{0,1}*→hs,
h2:{0,1}*×{0,1}*→hs;其中h1和h2为不同的函数,用于构造主公钥;hs为属性空间;
令主公钥mpk=(pk,crs,h1,h2),输出主公钥mpk、主私钥msk;其中pk表示公开参数,crs表示公共参考字符串、h1和h2表示为两个哈希函数;
将主公钥放进一笔交易中,并将该交易发送到区块链网络。
作为优选的技术方案,所述用户注册,包括以下具体步骤:
注册机构执行φ处理的证书生成操作,根据用户和注册机构的共同输入、用户的私有输入、注册机构的私有输入生成用户的匿名凭证;
注册机构输出第一标识或第二标识,用户输出一个带有证书编号的匿名凭证;其中所述第一标识代表完成,所述第二标识代表未完成。
作为优选的技术方案,所述发布投票任务,包括以下具体步骤:
通过选举委员会设定投票编号、候选对象列表、截止时间、访问策略;
通过选举委员会执行e处理的设置操作,根据安全参数进行初始化加密处理得到用于加解密的公私钥对,编译智能合约;其中智能合约包括计票规则、访问策略、截止时间;
通过选举委员会生成一个选举委员会区块链账户地址,将投票编号、访问策略和智能合约放进一笔交易中,并通过选举委员会区块链账户地址将该交易发送到区块链网络。
作为优选的技术方案,所述投票处理,包括以下具体步骤:
用户从候选对象列表中选择一个候选对象,通过e处理的加密操作根据明文、加密秘钥进行加密明文生成密文;
通过用户执行π处理的证明操作,根据声明、证据、公共参考字符串生成一个有效的证明;
基于有效的证明进行构造认证令牌;
生成第i个用户区块链账户地址,将密文和认证令牌放进一笔交易中,并通过第i个用户区块链账户地址将该交易发送到区块链网络。
作为优选的技术方案,所述验证选票,通过π处理的验证操作进行验证认证令牌的有效性,所述π处理的验证操作根据声明、认证令牌、公共参考字符串进行验证认证令牌的有效性,输出第一验证输出信号或第二验证输出信号;
所述第一验证输出信号用于表示验证通过,所述第二验证输出信号用于表示验证不通过。
作为优选的技术方案,所述追踪双投用户,包括以下具体步骤:
令
若
根据两个认证令牌中的第二认证参数、第一密文和第二密文得出双投用户的身份信息id,其中双投用户的身份信息id满足关系式:
作为优选的技术方案,所述计票,包括以下具体步骤:
通过选举委员会筛选出所有验证无效和双投的选票,
执行与e.decrypt(bi,esk)相同的操作解密剩余的有效选票,得到对应明文信息,针对每一个候选对象计算k个候选对象的最终得票数r=(r1,...,rk);
对于第二np语言:
将k个候选对象的最终得票数和对计票结果的零知识证明放进一笔交易中,并通过选举委员会区块链账户地址将该交易发送到区块链网络。
为了达到上述第二目的,本发明采用以下技术方案:
一种基于区块链的可追踪的完全匿名电子投票系统,包括投票初始化模块、用户注册模块、发布投票任务模块、投票模块、验证选票模块、追踪双投用户模块、计票模块、参与对象;
所述参与对象包括注册机构、选举委员会、用户模块;其中用户模块设有多个用户;
所述投票初始化模块用于生成主公钥和主私钥;
所述用户注册模块用于结合主私钥通过注册机构为用户模块中每个用户生成匿名凭证;
所述发布投票任务模块用于通过选举委员会设定并公开投票要求;
所述投票模块用于结合主公钥生成选票并通过认证操作对选票进行认证、生成认证令牌、投出该选票和认证令牌;
所述验证选票模块用于通过验证操作检查得到的认证令牌是否有效;
所述追踪双投用户模块用于判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
所述计票模块用于筛选有效选票并计算投票结果。
本发明与现有技术相比,具有如下优点和有益效果:
(1)本发明在注册阶段采用了匿名凭证方案,保证了注册时不泄露用户隐私;在投票阶段采用了cpa安全的加密处理和zk-snark零知识证明处理,保证了投票时不透露选票内容和用户身份信息;利用这三个处理构造的投票方法,解决了传统投票方案只考虑保护投票过程隐私而忽略注册过程隐私保护的技术问题,达到了保证用户在整个投票过程中都是完全匿名的技术效果,具有高度的创新性。
(2)本发明在实现投票的完全匿名性时,又兼顾了传统电子投票方案中的不可伪造性和可验证性等基本需求,使得任意敌手不能通过伪造合法用户身份以参与投票,又能在完全匿名的环境下验证选票的有效性,实现投票方案的可操作性和可兼容性,具有高度的实用性。
(3)本发明考虑了投票的访问控制功能,采用了类似于匿名凭证处理的访问策略机制,实现了只允许符合访问策略的用户投出有效选票的效果,而不满足访问策略的用户即使投出了选票,但因不能通过验证而被视为无效选票,使得投票方案具有访问控制权限的功能,从而筛选出有效选票。
(4)本发明采用了电子现金防双花的技术,解决了当前投票方案不能有效公开追踪双投用户的难题,达到了在不依赖权威机构的前提下,允许任何人检测双投选票并追踪该双投用户身份的效果(即公开可追踪),进而平衡了匿名性和责任性,具有较高的创新价值和应用价值。
附图说明
图1为本发明实施例1中的基于区块链的可追踪的完全匿名电子投票方法流程图;
图2为本发明实施例2中基于区块链的可追踪的完全匿名电子投票系统的参与对象交互示意图。
具体实施方式
在本公开的描述中,需要说明的是,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现在该词前面的元素或者物件涵盖出现在该词后面列举的元素及其等同,而不排除其他元素。
对于本领域的普通技术人员而言,可以具体情况理解上述术语在本公开中的具体含义。此外,下面所描述的本公开不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例
实施例1
如图1所示,本实施例提供了一种基于区块链的可追踪的完全匿名电子投票方法,包括以下步骤:
投票初始化,生成系统所需主公钥和主私钥;
用户注册,结合主私钥通过注册机构(ca)为用户模块中每个用户生成匿名凭证;
发布投票任务,通过选举委员会(ec)设定并公开投票要求;
投票处理,结合主公钥生成选票并通过认证操作对选票进行认证,生成认证令牌,并投出该选票和认证令牌;
验证选票,通过验证操作检查得到的认证令牌是否有效;
追踪双投用户,判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
计票,筛选有效选票并计算投票结果。
在本实施例中,投票初始化,包括以下具体步骤:
令φ=(φ.setup,φ.gen,φ.verify)为具有属性的匿名凭证处理,即φ处理;
令π=(π.setup,π.prover,π.verifier)为zk-snark零知识证明处理,即π处理;
令e=(e.setup,e.encrypt,e.decrypt)为cpa安全的加密处理,即e处理。
在本实施例中,φ.setup为φ处理的设置操作,用于初始化匿名凭证处理,具体为φ.setup(λ)→(pk,msk),其中λ表示输入安全参数,pk表示输出公开参数,msk表示主私钥;
φ.gen为φ处理的证书生成操作,用于根据用户和注册机构的共同输入、用户的私有输入、注册机构的私有输入生成用户的匿名凭证;其中用户和注册机构的共同输入包括公开参数pk和承诺ci=commit(li,ri,pk),用户的私有输入包括用户属性集合{id,l1,...,ln}、随机数ri以及输入证书编号cid,注册机构的私有输入包括主私钥msk,最终,证书颁发机构输出“完成”或“未完成”,用户输出一个匿名凭证
φ.verify为φ处理的验证操作,用于验证匿名凭证的有效性,具体为φ.verify(cid,σi,pk)→0/1,其中cid表示证书编号,σi表示匿名凭证,pk表示公开参数,0/1表示输出0或1。
在本实施例中,π.setup为π处理的设置操作,用于初始化zk-snark零知识证明处理,具体为π.setup(λ,£)→crs,输入安全参数λ和第一np语言£,输出公共参考字符串crs;
π.prover为π处理的证明操作,用于生成一个有效的证明,具体为π.prover(x,w,crs)→η,输入声明x、证据w和公共参考字符串crs,输出证明η;
π.verifier为π处理的验证操作,用于验证认证令牌π的有效性,具体为π.verifier(x,π,crs)→0/1,输入声明x、认证令牌π和公共参考字符串crs,输出0或1。
在本实施例中,e.setup为e处理的设置操作,用于初始化加密处理,具体为e.setup(λ)→(epk,esk),输入安全参数λ,输出用于加解密的公私钥对(epk,esk);其中,epk为加密秘钥,esk为解密秘钥;
e.encrypt为e处理的加密操作,用于加密明文生成密文,具体为e.encrypt(bi,epk)→bi,输入明文bi和加密秘钥epk,输出密文bi;
e.decrypt为e处理的解密操作,用于解密密文生成明文,具体为e.decrypt(bi,esk)→bi,输入密文bi和解密秘钥esk,输出明文bi。
在本实施例中,生成系统所需主公钥和主私钥,包括以下具体步骤:
通过注册机构执行φ.setup(λ)操作,生成公开参数pk和主私钥msk;
通过注册机构执行π.setup(λ,£)操作,生成公共参考字符串crs;
通过注册机构选择两个hash函数,h1:{0,1}*×{0,1}*→hs,
h2:{0,1}*×{0,1}*→hs;其中两个哈希函数为不同的函数,用于构造主公钥;hs为属性空间;
令主公钥mpk=(pk,crs,h1,h2),输出主公钥mpk、主私钥msk;
将主公钥mpk放进一笔交易中,并发送该交易到区块链网络;在本实施例中,用户在投票处理时构造认证令牌的过程中需要用到mpk。
在本实施例中,用户注册,包括以下具体步骤:
注册机构执行φ.gen操作,由用户和注册机构进行生成匿名凭证,根据用户和注册机构的共同输入、用户的私有输入、注册机构的私有输入生成用户的匿名凭证;
最终注册机构输出第一标识或第二标识,用户输出一个证书编号为cid的匿名凭证
在本实施例中,发布投票任务,包括以下具体步骤:
通过选举委员会设定投票编号vid、k个候选对象列表、截止时间dl、访问策略λ;此外访问策略λ可根据实际应用情况设置,例如年龄必须18岁以上等与个人信息有关的条件,用于对投票进行访问控制;
通过选举委员会执行e.setup(λ)生成加解密选票用的公私钥对(epk,esk),编译智能合约sc,其中智能合约包括计票规则、访问策略、截止时间等相关信息,此外编译智能合约可根据实际情况进行调整;
通过选举委员会生成一个选举委员会区块链账户地址addec,将投票编号vid、访问策略λ和智能合约sc代码放进一笔交易中,并通过选举委员会区块链账户地址addec将该交易发送到区块链网络。
在本实施例中,投票处理包括以下具体步骤:
用户从候选对象列表中选择一个候选对象,执行e.encrypt(bi,epk)操作生成密文bi;其中,bi表示第i个用户选择的候选对象的明文;
计算t1=h1(vid||λ,li),t2=h2(vid||λ,id) bi·id;
令x=(vid||λ||bi,t1,t2,mpk)为一个声明,w=(li,ri,ci,σi)为一个证据,对第一np语言
其中,||为连接符,∧表示逻辑与符号;
通过用户执行π.prover(x,w,crs)操作生成一个有效的证明η,完成对选票的认证;
构造认证令牌π=(t1,t2,η);
生成第i个用户区块链账户地址addi,将密文bi和认证令牌π放进一笔交易中,并通过第i个用户区块链账户地址addi将该交易发送到区块链网络。
在本实施例中,验证选票,具体通过选举委员会执行π.verifier(x,π,crs)操作验证认证令牌π的有效性;如果验证通过,输出1,否则输出0。
在本实施例中,追踪双投用户包括以下具体步骤:
设
在πi和πj中,若
根据认证令牌的认证参数、密文得出双投用户的身份信息id,其中双投用户的身份信息id满足关系式:
在本实施例中,计票包括以下具体步骤:
通过选举委员会筛选出所有验证无效和双投的选票,
执行与e.decrypt(bi,esk)相同的操作解密剩余的有效选票,得到对应明文信息,针对每一个候选对象计算k个候选对象的最终得票数r=(r1,...,rk);
对于第二np语言:
将k个候选对象的最终得票数r和对计票结果的零知识证明πr放进一笔交易中,并通过选举委员会区块链账户地址addec将该交易发送到区块链网络。
实施例2
如图2所示,本实施例提供了一种基于区块链的可追踪的完全匿名电子投票系统,该系统包括投票初始化模块、用户注册模块、发布投票任务模块、投票模块、验证选票模块、追踪双投用户模块、计票模块、参与对象;
在本实施例中,参与对象包括注册机构、选举委员会、用户模块;其中用户模块设有多个用户;在本实施例中,用户以选民的形式参与,此外可根据其实际情况替换为其他形式的投票者作为参与对象中的用户。
投票初始化模块用于生成系统所需主公钥和主私钥;
用户注册模块用于通过注册机构为用户模块中每个用户生成匿名凭证;
发布投票任务模块用于通过选举委员会设定并公开投票要求;
投票处理模块用于生成选票并通过认证操作对选票进行认证、生成认证令牌、投出该选票和认证令牌;
验证选票模块用于通过验证操作检查得到的认证令牌是否有效;
追踪双投用户模块用于判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
计票模块用于筛选有效选票并计算投票结果。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
1.一种基于区块链的可追踪的完全匿名电子投票方法,其特征在于,包括以下步骤:
投票初始化,生成主公钥和主私钥;
用户注册,结合主私钥通过注册机构为用户模块中每个用户生成匿名凭证;
发布投票任务,通过选举委员会设定并公开投票要求;
投票处理,结合主公钥生成选票并通过认证操作对选票进行认证,生成认证令牌,并投出该选票和认证令牌;
验证选票,通过验证操作检查得到的认证令牌是否有效;
追踪双投用户,判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
计票,筛选有效选票并计算投票结果。
2.根据权利要求1所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述投票初始化,包括以下具体步骤:
令φ=(φ.setup,φ.gen,φ.verify)为具有属性的匿名凭证处理,即φ处理;其中,φ.setup为φ处理的设置操作,用户初始化匿名凭证处理;φ.gen为φ处理的证书生成操作,用于生成用户的匿名凭证;φ.verify为φ处理的验证操作,根据证书编号、匿名凭证、公开参数验证匿名凭证的有效性;
令π=(π.setup,π.prover,π.verifier)为zk-snark零知识证明处理,即π处理;其中,π.setup为π处理的设置操作,用于初始化zk-snark零知识证明处理;π.prover为π处理的证明操作,用于生成一个有效的证明;π.verifier为π处理的验证操作,用于验证认证令牌的有效性;
令e=(e.setup,e.encrypt,e.decrypt)为cpa安全的加密处理,即e处理;其中,e.setup为e处理的设置操作,用于初始化加密处理;e.encrypt为e处理的加密操作,用于加密明文生成密文;e.decrypt为e处理的解密操作,用于解密生成明文。
3.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述生成主公钥和主私钥,包括以下具体步骤:
通过注册机构执行φ处理的设置操作,根据安全参数进行初始化匿名凭证处理得到公开参数和主私钥;
通过注册机构执行π处理的设置操作,根据安全参数、第一np语言进行初始化zk-snark零知识证明处理得到公共参考字符串;
通过注册机构选择两个hash函数,h1:{0,1}*×{0,1}*→hs,
h2:{0,1}*×{0,1}*→hs;其中h1和h2为不同的函数,用于构造主公钥;hs为属性空间;
令主公钥mpk=(pk,crs,h1,h2),输出主公钥mpk、主私钥msk;其中pk表示公开参数,crs表示公共参考字符串、h1和h2表示为两个哈希函数;
将主公钥放进一笔交易中,并将该交易发送到区块链网络。
4.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述用户注册,包括以下具体步骤:
注册机构执行φ处理的证书生成操作,根据用户和注册机构的共同输入、用户的私有输入、注册机构的私有输入生成用户的匿名凭证;
注册机构输出第一标识或第二标识,用户输出一个带有证书编号的匿名凭证;其中所述第一标识代表完成,所述第二标识代表未完成。
5.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述发布投票任务,包括以下具体步骤:
通过选举委员会设定投票编号、候选对象列表、截止时间、访问策略;
通过选举委员会执行e处理的设置操作,根据安全参数进行初始化加密处理得到用于加解密的公私钥对,编译智能合约;其中智能合约包括计票规则、访问策略、截止时间;
通过选举委员会生成一个选举委员会区块链账户地址,将投票编号、访问策略和智能合约放进一笔交易中,并通过选举委员会区块链账户地址将该交易发送到区块链网络。
6.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述投票处理,包括以下具体步骤:
用户从候选对象列表中选择一个候选对象,通过e处理的加密操作根据明文、加密秘钥进行加密明文生成密文;
通过用户执行π处理的证明操作,根据声明、证据、公共参考字符串生成一个有效的证明;
基于有效的证明进行构造认证令牌;
生成第i个用户区块链账户地址,将密文和认证令牌放进一笔交易中,并通过第i个用户区块链账户地址将该交易发送到区块链网络。
7.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述验证选票,通过π处理的验证操作进行验证认证令牌的有效性,所述π处理的验证操作根据声明、认证令牌、公共参考字符串进行验证认证令牌的有效性,输出第一验证输出信号或第二验证输出信号;
所述第一验证输出信号用于表示验证通过,所述第二验证输出信号用于表示验证不通过。
8.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述追踪双投用户,包括以下具体步骤:
令
若
根据两个认证令牌中的第二认证参数、第一密文和第二密文得出双投用户的身份信息id,其中双投用户的身份信息id满足关系式:
9.根据权利要求2所述的基于区块链的可追踪的完全匿名电子投票方法,其特征在于,所述计票,包括以下具体步骤:
通过选举委员会筛选出所有验证无效和双投的选票,
执行与e.decrypt(bi,esk)相同的操作解密剩余的有效选票,得到对应明文信息,针对每一个候选对象计算k个候选对象的最终得票数r=(r1,...,rk);
对于第二np语言:
将k个候选对象的最终得票数和对计票结果的零知识证明放进一笔交易中,并通过选举委员会区块链账户地址将该交易发送到区块链网络。
10.一种基于区块链的可追踪的完全匿名电子投票系统,其特征在于,包括投票初始化模块、用户注册模块、发布投票任务模块、投票模块、验证选票模块、追踪双投用户模块、计票模块、参与对象;
所述参与对象包括注册机构、选举委员会、用户模块;其中用户模块设有多个用户;
所述投票初始化模块用于生成主公钥和主私钥;
所述用户注册模块用于结合主私钥通过注册机构为用户模块中每个用户生成匿名凭证;
所述发布投票任务模块用于通过选举委员会设定并公开投票要求;
所述投票模块用于结合主公钥生成选票并通过认证操作对选票进行认证、生成认证令牌、投出该选票和认证令牌;
所述验证选票模块用于通过验证操作检查得到的认证令牌是否有效;
所述追踪双投用户模块用于判断用户投票次数,当用户投票次数达到两次时,允许任何人通过追踪操作定位该用户的认证令牌并推断出其身份信息;
所述计票模块用于筛选有效选票并计算投票结果。
技术总结