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

文档序号:17225583发布日期:2019-03-27 12:35阅读:490来源:国知局
一种基于区块链技术的不记名电子投票方法与流程

本发明涉及区块链技术,尤其涉及一种基于区块链技术的不记名电子投票方法。



背景技术:

不记名投票是一种运用在选举中的投票形式。投票者在投票时,不用在选票上写下自己的名字或者身份识别,从而在投票的同时,避免非自愿让他人知道自己的投票内容。这种形式的投票可以确保投票者更多地出于个人意愿做出选择,是世界上普遍采用的选举方法。

从投票结果上看,不记名投票可以分为单一获胜者与多重获胜者两种情况,单一获胜者可以看作多重获胜者的一个特例。多重获胜者的另一种特殊情况是全部选项均为获胜者,对应选举行为中的比例制与其他场景下的调查问卷。

在要求获胜者的场景下,往往还需要设计多轮投票,常见的有决赛投票制与随机投票制。

从选票形式上看,不记名投票可以分为二元投票制、排序投票制和计分投票制等,其中,二元投票制,即选票由“是/否”、“同意/反对”之类的二元选项构成的投票方式,应用最为广泛。本方法使用基于二元投票制的选票形式。

从投票者的来源上看,可以分为开放投票制与封闭投票制,后者即事先指定投票者范围的投票方式。

传统的投票方式存在高成本、低效率等缺点,并且投票结果的可信程度高度依赖一个中心化的组织机构;随着互联网时代的到来,电子投票技术应运而生。电子投票技术一定程度上降低了投票成本,提高了效率,但仍存在诸多不足:针对特定需求进行投票系统的开发与维护,成本较高;投票过程仍然需要依赖中心化的系统,单点风险高且容易被操纵;难以实现不记名的方式。由于上述缺陷,电子投票技术更多被应用在问卷调查中,无法在更重要的场景下发挥作用。

区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。

智能合约是一种旨在以信息化方式传播、验证和执行的计算机协议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的二进制长度=k

vote介于[0,2k]

hamming(vote,0)≤m

vote转码到gf(p)上的结果为votep

votep加密后的结果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是本发明涉及的方法的实施;

图2是本发明描述的基于区块链技术的不记名投票方法的主要步骤流程图。

具体实施方式

下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白。以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限制本发明。

如图1-2所示,一种基于区块链技术的不记名电子投票方法,所述的区块链包括客户端与区块链节点,投票承载于部署在区块链节点上的智能合约。区块链节点与客户端均配置相关的密码学原语与公共参数;投票发生在客户端,收计票以及结果公布发生在区块链节点;

所述的不记名电子投票方法包括如下步骤:

步骤一:综述

完整的投票流程包括组织方和参与方;组织方将投票以智能合约的形式部署在区块链节点上,参与方向该合约发送交易参与投票;定义候选人个数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的二进制长度=k

vote介于[0,2k]

hamming(vote,0)≤m

vote转码到gf(p)上的结果为votep

votep加密后的结果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页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1