一种基于区块链技术的不记名电子投票方法技术

技术编号:20683559 阅读:25 留言:0更新日期:2019-03-27 19:45
本发明专利技术公开了一种基于区块链技术的不记名电子投票方法,该方法利用了同态加密算法隐藏投票内容,同时使用零知识证明技术保证选票的有效性,选票的收集、计票过程和结果公开均在区块链系统上进行,其中,投票结果的解密利用了可信计算环境,解决了传统方式下投票结果解密过程私钥触网的问题,真正意义上保护了投票的不记名属性。

【技术实现步骤摘要】
一种基于区块链技术的不记名电子投票方法
本专利技术涉及区块链技术,尤其涉及一种基于区块链技术的不记名电子投票方法。
技术介绍
不记名投票是一种运用在选举中的投票形式。投票者在投票时,不用在选票上写下自己的名字或者身份识别,从而在投票的同时,避免非自愿让他人知道自己的投票内容。这种形式的投票可以确保投票者更多地出于个人意愿做出选择,是世界上普遍采用的选举方法。从投票结果上看,不记名投票可以分为单一获胜者与多重获胜者两种情况,单一获胜者可以看作多重获胜者的一个特例。多重获胜者的另一种特殊情况是全部选项均为获胜者,对应选举行为中的比例制与其他场景下的调查问卷。在要求获胜者的场景下,往往还需要设计多轮投票,常见的有决赛投票制与随机投票制。从选票形式上看,不记名投票可以分为二元投票制、排序投票制和计分投票制等,其中,二元投票制,即选票由“是/否”、“同意/反对”之类的二元选项构成的投票方式,应用最为广泛。本方法使用基于二元投票制的选票形式。从投票者的来源上看,可以分为开放投票制与封闭投票制,后者即事先指定投票者范围的投票方式。传统的投票方式存在高成本、低效率等缺点,并且投票结果的可信程度高度依赖一个中心化的组织机构;随着互联网时代的到来,电子投票技术应运而生。电子投票技术一定程度上降低了投票成本,提高了效率,但仍存在诸多不足:针对特定需求进行投票系统的开发与维护,成本较高;投票过程仍然需要依赖中心化的系统,单点风险高且容易被操纵;难以实现不记名的方式。由于上述缺陷,电子投票技术更多被应用在问卷调查中,无法在更重要的场景下发挥作用。区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。智能合约是一种旨在以信息化方式传播、验证和执行的计算机协议1。目前大多数区块链平台均提供了一套或者多套智能合约框架。同态加密算法设明文消息为m,公钥pk,私钥sk,如果一个加密算法Enc(),Dec()满足m1+m2=Dec(Enc(m1)※Enc(m2)),其中※为定义在密文域的运算,我们称该加密算法具有加法同态的性质;如果等式左边为m1×m2,我们称该加密算法具有乘法同态的性质。非交互式零知识证明零知识证明是指证明者能够在不透露任何有用信息的前提下,使验证者相信某个论断为真。如果证明与验证过程中,双方只有一次通信,则称之为非交互式零知识证明。零知识证明协议的工作流程如下:证明者宣称某公开参数符合某个论断Statement,根据公开参数和私有参数,以某种算法Prove()生成证明proof,发送给验证者,验证者根据相应的算法Verify()验证公开参数和证明proof。验证通过即认为该论断为真。可信计算环境可信计算环境可以理解为处理器上的一个安全的软硬件平台,为高安全级别的操作提供一个隔离的执行环境。可信计算环境提供如下特性:隔离执行、可信应用的完整性、可信数据的机密性与安全存储等。本方法在传统电子投票基础上进行了如下改进:采用区块链作为底层平台,以智能合约作为单个投票项目的载体,显著降低了电子投票系统的开发和维护成本;同时,借助区块链的去中心化设计,投票结果不再依赖某个中心化的系统或组织机构,保证了投票过程公开透明;通过同态加密技术、非交互式零知识证明与可信计算环境等技术,实现了不记名投票。
技术实现思路
针对现有技术的不足,本专利技术提供了一种基于区块链技术的不记名投票方法。本专利技术是通过如下技术方案实现的:一种基于区块链技术的不记名电子投票方法,所述的区块链包括客户端与区块链节点,投票承载于部署在区块链节点上的智能合约。区块链节点与客户端均配置相关的密码学原语与公共参数;投票发生在客户端,收计票以及结果公布发生在区块链节点;所述的不记名电子投票方法包括如下步骤:-----------------1https://zh.wikipedia.org/wiki/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6步骤一:综述完整的投票流程包括组织方和参与方;组织方将投票以智能合约的形式部署在区块链节点上,参与方向该合约发送交易参与投票;定义候选人个数k,胜出人数m,投票人数p,选票vote,编码算法Encode(),编码后的选票votep,投票密钥对(pkv,skv),加密算法Enc(),解密算法Dec(),密文的同态加法Add(),加密后的选票ct,投票随机数r;其中,选票vote为编码在GF(2)上的数组,长度为候选人个数k;编码后的选票votep为定义在GF(p)上的数组,长度同样为候选人个数k,加密后的选票ct=Enc(pkv,votep)。组织方和参与方按照如下方式生成证明参数与验证公钥:定义如下函数proof=Prove(m,p,k,pkv,vote,votep,r,ct),其中(m,p,ct,k,pkv)为公开参数,(r,vote,votep)为隐私参数;定义函数Hamming(),获取两个等长二进制数的Hamming距离;Prove()函数将执行以下判断:vote的二进制长度=kVote介于[0,2k]Hamming(vote,0)≤mvote转码到GF(p)上的结果为votepvotep加密后的结果Enc(pkv,votep,r)=ct定义公共参数crs,验证密钥vk;定义验证函数Verify(crs,vk,ct,proof),如果Verify()返回真值,则验证通过,选票合法;否则验证失败;双方使用Prove()函数,基于零知识证明技术生成公共参数crs和验证密钥vk。步骤二:准备阶段组织方部署投票合约,指定候选人个数k,胜出人数m,投票人数p,有效票数q,投票的起止时间与获胜条件;对于开放投票制,p可以为一个足够大的数;对于封闭投票制,合约需列出参与人的区块链公钥地址,p为参与人的总数;同时,组织方生成同态的公私钥对(pkv,skv),将pkv写入合约公布,在部署时将skv传入可信计算环境中,并提供调用接口给智能合约;此外,组织方根据胜出条件,在合约中实现多轮投票的判断逻辑;步骤三:投票参与方填写选票vote,随机生成r,votep=Encode(vote),ct=Enc(pkv,r,votep),proof=Prove(m,p,k,pkv,vote,votep,r,ct),将选票(ct,proof)发送到区块链上;对于封闭投票制,只有合约公开的地址可以参与投票;步骤四:收计票以封闭投票制为例,投票合约验证投票是否来自参与人名单,对于来自参与人名单之外的地址或已经提交投票的参与方地址的选票,直接拒收;公开投票制则只需判断地址是否已经参与过投票;对于收到的选票,合约首先判断选票是否合法,调用Verify(crs,vk,ct,proof),验证通过后记录该选票;根据投票的起止时间和有效票数,判断是否可以进入到计票阶段;如果在投票截止时间收集到足够的选票n,n≥q,合约将选票进行统计,统计方法为Add(pkv,ct1,ct2,...,ctn),将结果ctr公布;步骤五:结果公布调用可信计算环境中的私钥sk本文档来自技高网
...

【技术保护点】
1.一种基于区块链技术的不记名电子投票方法,其特征在于,所述的区块链包括客户端与区块链节点,投票承载于部署在区块链节点上的智能合约。区块链节点与客户端均配置相关的密码学原语与公共参数;投票发生在客户端,收计票以及结果公布发生在区块链节点;所述的不记名电子投票方法包括如下步骤:步骤一:综述完整的投票流程包括组织方和参与方;组织方将投票以智能合约的形式部署在区块链节点上,参与方向该合约发送交易参与投票;定义候选人个数k,胜出人数m,投票人数p,选票vote,编码算法Encode(),编码后的选票votep,投票密钥对(pkv,skv),加密算法Enc(),解密算法Dec(),密文的同态加法Add(),加密后的选票ct,投票随机数r。其中,选票vote为编码在GF(2)上的数组,长度为候选人个数k;编码后的选票votep为定义在GF(p)上的数组,长度同样为候选人个数k,加密后的选票ct=Enc(pkv,votep)。组织方和参与方按照如下方式生成证明参数与验证公钥:定义如下函数proof=Prove(m,p,k,pkv,vote,votep,r,ct),其中(m,p,ct,k,pkv)为公开参数,(r,vote,votep)为隐私参数;定义函数Hamming(),获取两个等长二进制数的Hamming距离;Prove()函数将执行以下判断:vote的二进制长度=kVote介于[0,2k]Hamming(vote,0)≤mvote转码到GF(p)上的结果为votepvotep加密后的结果Enc(pkv,votep,r)=ct定义公共参数crs,验证密钥vk;定义验证函数Verify(crs,vk,ct,proof),如果Verify()返回真值,则验证通过,选票合法;否则验证失败。双方使用Prove()函数,基于零知识证明技术生成公共参数crs和验证密钥vk。步骤二:准备阶段组织方部署投票合约,指定候选人个数k,胜出人数m,投票人数p,有效票数q,投票的起止时间与获胜条件;对于开放投票制,p可以为一个足够大的数;对于封闭投票制,合约需列出参与人的区块链公钥地址,p为参与人的总数;同时,组织方生成同态的公私钥对(pkv,skv),将pkv写入合约公布,在部署时将skv传入可信计算环境中,并提供调用接口给智能合约。此外,组织方根据胜出条件,在合约中实现多轮投票的判断逻辑。步骤三:投票参与方填写选票vote,随机生成r,votep=Encode(vote),ct=Enc(pkv,r,votep),proof=Prove(m,p,k,pkv,vote,votep,r,ct),将选票(ct,proof)发送到区块链上;对于封闭投票制,只有合约公开的地址可以参与投票。步骤四:收计票以封闭投票制为例,投票合约验证投票是否来自参与人名单,对于来自参与人名单之外的地址或已经提交投票的参与方地址的选票,直接拒收;公开投票制则只需判断地址是否已经参与过投票。对于收到的选票,合约首先判断选票是否合法,调用Verify(crs,vk,ct,proof),验证通过后记录该选票。根据投票的起止时间和有效票数,判断是否可以进入到计票阶段;如果在投票截止时间收集到足够的选票n,n≥q,合约将选票进行统计,统计方法为Add(pkv,ct1,ct2,...,ctn),将结果ctr公布。步骤五:结果公布调用可信计算环境中的私钥skv解密结果ctr;得到投票结果在GF(p)上的编码,解码得到投票结果明文。根据投票结果和获胜条件,公开获胜者;对于多重获胜者中的比例制或调查问卷场景,即不存在获胜者的情况,公开投票结果即可。...

【技术特征摘要】
1.一种基于区块链技术的不记名电子投票方法,其特征在于,所述的区块链包括客户端与区块链节点,投票承载于部署在区块链节点上的智能合约。区块链节点与客户端均配置相关的密码学原语与公共参数;投票发生在客户端,收计票以及结果公布发生在区块链节点;所述的不记名电子投票方法包括如下步骤:步骤一:综述完整的投票流程包括组织方和参与方;组织方将投票以智能合约的形式部署在区块链节点上,参与方向该合约发送交易参与投票;定义候选人个数k,胜出人数m,投票人数p,选票vote,编码算法Encode(),编码后的选票votep,投票密钥对(pkv,skv),加密算法Enc(),解密算法Dec(),密文的同态加法Add(),加密后的选票ct,投票随机数r。其中,选票vote为编码在GF(2)上的数组,长度为候选人个数k;编码后的选票votep为定义在GF(p)上的数组,长度同样为候选人个数k,加密后的选票ct=Enc(pkv,votep)。组织方和参与方按照如下方式生成证明参数与验证公钥:定义如下函数proof=Prove(m,p,k,pkv,vote,votep,r,ct),其中(m,p,ct,k,pkv)为公开参数,(r,vote,votep)为隐私参数;定义函数Hamming(),获取两个等长二进制数的Hamming距离;Prove()函数将执行以下判断:vote的二进制长度=kVote介于[0,2k]Hamming(vote,0)≤mvote转码到GF(p)上的结果为votepvotep加密后的结果Enc(pkv,votep,r)=ct定义公共参数crs,验证密钥vk;定义验证函数Verify(crs,vk,ct,proof),如果Verify()返回真值,则验证通过,选票合法;否则验证失败。双方使用Prove()函数,基于零知识证明技术生成公共参数crs和验证密钥vk。步骤二:准备阶段组织方部署投票合约,指定候选人个数k,胜出人数m,投票人数p,有效票数q,投票的起止时间与获胜条件;对于开放投票制,p可以为一个足够大的数;对于封闭投票制,合约需列出参与人的区块链公钥地址,p为参与人的总数;同时,组织方生成同态的公私钥对(pkv,skv),将pkv写入合...

【专利技术属性】
技术研发人员:李伟梁秀波邱炜伟李启雷尹可挺宗志恒
申请(专利权)人:杭州趣链科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1