一种基于智能合约和分布式Elgamal算法的电子投票方法转让专利

申请号 : CN202210888057.4

文献号 : CN114978517B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 薛婧婷修硕史凌杰罗抒琴张晓均张兴鹏

申请人 : 西南石油大学

摘要 :

本发明公开了一种基于智能合约和分布式Elgamal算法的电子投票方法,所述电子投票方法具体包括投票合约初始化、投票者注册、投票者投票和系统统计投票结果四个阶段。本方法通过对选票进行环签名,保证了投票参与节点的匿名性。通过检查环签名是否具有链接性,从而检查出双重投票或恶意刷票行为,实现电子投票的一号一票制。通过引入对投票参与节点的身份认证,可抵抗女巫攻击,实现了一人一票制,保障了投票结果的公平、公正和可信度。通过Elgamal加密算法对选票进行加密,提高了选票的机密性,同时基于Elgamal加密算法的同态特性,使得选票不需要解密即可进行选票统计,实现了电子投票系统的快速、定时和准确的计票。

权利要求 :

1.一种基于智能合约和分布式Elgamal算法的电子投票方法,适于应用在基于区块链的电子投票系统中,所述电子投票系统包括一个投票发起节点、一个或多个投票参与节点和作为可信第三方的验证节点;其特征在于,所述电子投票方法包括如下步骤:S1、投票发起节点初始化投票合约,并返回第一公共参数至各个投票参与节点;

S2、各个投票参与节点根据所述第一公共参数生成自己的注册信息,并将自己的注册信息发送至投票发起节点,以及将自己的注册信息中的身份ID发送至验证节点;

S3、投票发起节点根据各个注册信息分别判断对应的投票参与节点是否合格,并将合格的投票参与节点登记至合格名册,然后分别向各个合格的投票参与节点发送一个投票密钥;

其中,所述投票密钥为Elgamal体制密钥;

S4、验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组,并将元组发送至对应的投票参与节点;

S5、各个合格的投票参与节点根据自己的元组生成自己的环签名;

S6、各个合格的投票参与节点生成自己的选票,并基于自己的投票密钥通过Elgamal加密算法对所述选票进行加密;

S7、各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名,并将环签名后的选票发送至投票发起节点;

其中环签名后的选票中包含链接标签;

S8、投票发起节点将接收的各个选票发送至验证节点;

S9、验证节点判断选票的环签名是否有效、以及判断该选票内的链接标签是否与其他选票内的链接标签相同,若环签名有效且该选票内的链接标签与其他选票内的链接标签不相同,则判定该选票合格,若否,则判定该选票不合格,然后将选票合格或不合格的结果告知投票发起节点;

S10、投票发起节点记录合格的选票;

S11、若投票发起节点确定当前时刻为投票截止时间,则统计选票并公布选票的统计结果;

所述S1中的第一公共参数包括随机大素数q和生成元g,其中 , 为q阶素数群;

所述S2中的注册信息包括公钥 和身份ID;其中公钥 的生成步骤如下:投票参与节点基于第一公共参数,选取私钥 ,然后通过Elgamal密钥体制生成公钥,其中 , , t为投票参与节点的总数量;

所述S3中投票密钥的生成步骤如下:

投票发起节点记录各个合格的投票参与节点发送的所有公钥 ,并根据所有公钥重构得到每个合格的投票参与节点的投票密钥 ,其中n为合格的投票参与节点的数量,z表示与投票参与节点公钥 中的下标i不同的下标序号;

所述S4中,验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组的具体步骤如下:S01、选取q阶加法群 、q阶乘法群 、 的一个生成元P和双线性对 ,其中双线性对 为从 到 的双线性映射;

S02、选取哈希函数一 、哈希函数二 和哈希函数三 ;其中哈希函数一 为SHA‑

256;哈希函数二 ,哈希函数二 为任意长度的比特串映射到 上的哈希函数;哈希函数三 ,哈希函数 为任意长度的比特串映射到 上的哈希函数, 表示任意长度的比特串;

S03、选取k为验证节点私钥,计算验证节点公钥 ,其中 ;

S04、公布第二公共参数 ;

S05、计算第一中间参数 和投票参与节点的私钥 ,其中 为投票参与节点的身份ID;

S06、组成环签名所需元组 ,其中event为投票参与节点自己的投票事件, ,W为投票参与节点身份ID的集合, ,为投票参与节点自己的权重值;

所述S6的具体步骤如下:

SS1、各个合格的投票参与节点选择投票选项,得到自己的选票 ;

SS2、各个合格的投票参与节点基于自己的投票密钥,通过Elgamal加密算法生成选票的密文 ,其中 , ,j为投票合约中包含的候选人总数量, 代表选择第一位候选人, 代表选择第二位候选人,依次类推, 代表选择第j位候选人;

所述S7中,各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名的具体步骤如下:SSS1、各个合格的投票参与节点计算自己的投票事件消息摘要 和链接标签 ,其中 为各个投票参与节点自己环签名时使用的投票参与节点私钥;

S SS 2 、选取 第 一 随 机数 R 和 第 二随 机 数 ,其 中 , ,;

SSS3、计算第二中间参数 ;

SSS4、计算第三中间参数 ;

SSS5、计算第四中间参数 ,其中

SSS6、计算第五中间参数 ;

SSS7、计算第六中间参数 ;

SSS8、生成签名后的选票 ,其中 ;

所述S9的具体步骤如下:

S001、验证节点计算各个合格的投票参与节点的投票事件消息摘要 ;

S002、计算各个合格的投票参与节点的第二中间参数 、第三中间参数 和第四中间参数 ;

S003、针对各个合格的投票参与节点验证等式 是否成立;若是,则环签名有效,然后执行S004;若否,则环签名无效,然后执行S005;

S004、检测每个合格的投票参与节点的选票 中的链接标签T是否与其他合格的投票参与节点的选票 中的链接标签T相同,若是,则判定该选票 为重复投票,然后执行S005;若否,则判定该选票 为合格选票,然后执行S006;

S005、判定该选票 为不合格选票,然后执行S006;

S006、将选票合格或不合格的结果发送至投票发起节点;

所述S11中,统计选票并公布选票的统计结果的具体步骤如下:S0001、通过 计算出投票结果

S0002、通过投票结果 计算出候

选人票数集合 ,其中 为第一位候选人的票数, 为第二位候选人的票数,以此类推, 为第j位候选人的票数;

S0003、公布选票的统计结果,所述统计结果包含每一位候选人的票数和所有投票参与节点所投的弃权票数量。

说明书 :

一种基于智能合约和分布式Elgamal算法的电子投票方法

技术领域

[0001] 本发明属于基于区块链技术的电子投票系统领域,具体涉及一种基于智能合约和分布式Elgamal算法的电子投票方法。

背景技术

[0002] 在当今的信息时代,电子投票系统由于低成本、高效率、方便快捷等特点正慢慢地取代传统纸质投票。但是就目前电子投票系统而言,仍存在很多需要解决的问题。例如,现有的电子投票系统大都是建立在第三方服务器的基础之上,而这样的投票信息往往会受到投票者和公众的质疑,甚至会被黑客或恶意的投票管理者篡改信息。针对这一问题,区块链和智能合约的兴起为电子投票系统提供了新的思路。区块链技术具有去中心、不可篡改的特点,为电子投票系统提供了一个信息可信的公共信息环境以及计算可信的运行环境。这为当前电子投票系统的权力过于集中、不够透明等问题提供了解决办法。综上所述,将区块链技术和电子投票方案结合的研究具有可行性。
[0003] 区块链为电子投票系统带来便利的同时也带来了隐私泄露的问题。电子投票系统最基本的特性就是匿名性。选民不希望自己的投票被他人获知,因此系统应该保证选民和他们的选票之间的关系不被泄露。由此可见,将区块链技术与电子投票系统进行结合时,如何隐藏选民与选票之间的关系,用以保障电子投票系统的匿名性是研究的重点。
[0004] 电子投票系统中还存在一个棘手的问题:如何实现定时准确计票。即在投票环节结束前任何人都不能知道投票的结果,而在投票结束后又要能准确统计出投票结果。此外在实现定时准确计票的同时,如何对选票隐私提供保障也是亟待解决的问题。

发明内容

[0005] 本发明的目的在于克服现有技术的一项或多项不足,提供一种基于智能合约和分布式Elgamal算法的电子投票方法。
[0006] 本发明的目的是通过以下技术方案来实现的:
[0007] 一种基于智能合约和分布式Elgamal算法的电子投票方法,适于应用在基于区块链的电子投票系统中,所述电子投票系统包括一个投票发起节点、一个或多个投票参与节点和作为可信第三方的验证节点;所述电子投票方法包括如下步骤:
[0008] S1、投票发起节点初始化投票合约,并返回第一公共参数至各个投票参与节点;
[0009] S2、各个投票参与节点根据所述第一公共参数生成自己的注册信息,并将自己的注册信息发送至投票发起节点,以及将自己的注册信息中的身份ID发送至验证节点;
[0010] S3、投票发起节点根据各个注册信息分别判断对应的投票参与节点是否合格,并将合格的投票参与节点登记至合格名册,然后分别向各个合格的投票参与节点发送一个投票密钥;
[0011] 其中,所述投票密钥为Elgamal体制密钥;
[0012] S4、验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组,并将元组发送至对应的投票参与节点;
[0013] S5、各个合格的投票参与节点根据自己的元组生成自己的环签名;
[0014] S6、各个合格的投票参与节点生成自己的选票,并基于自己的投票密钥通过Elgamal加密算法对所述选票进行加密;
[0015] S7、各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名,并将环签名后的选票发送至投票发起节点;
[0016] 其中环签名后的选票中包含链接标签;
[0017] S8、投票发起节点将接收的各个选票发送至验证节点;
[0018] S9、验证节点判断选票的环签名是否有效、以及判断该选票内的链接标签是否与其他选票内的链接标签相同,若环签名有效且该选票内的链接标签与其他选票内的链接标签不相同,则判定该选票合格,若否,则判定该选票不合格,然后将选票合格或不合格的结果告知投票发起节点;
[0019] S10、投票发起节点记录合格的选票;
[0020] S11、若投票发起节点确定当前时刻为投票截止时间,则统计选票并公布选票的统计结果。
[0021] 所述S1中的第一公共参数包括随机大素数q和生成元g,其中 , 为q阶素数群。
[0022] 所述S2中的注册信息包括公钥 和身份ID;其中公钥 的生成步骤如下:
[0023] 投票参与节点基于第一公共参数,选取私钥 ,然后通过Elgamal密钥体制生成公钥 ,其中 , , t为投票参与节点的总数量。
[0024] 所述S3中投票密钥的生成步骤如下:
[0025] 投票发起节点记录各个合格的投票参与节点发送的所有公钥 ,并根据所有公钥 重构得到每个合格的投票参与节点的投票密钥 ,其中n为合格的投票参与节点的数量 ,z表示与投票参与节点公钥 中的下标i不同的下标序号。
[0026] 所述S4中,验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组的具体步骤如下:
[0027] S01、选取q阶加法群 、q阶乘法群 、 的一个生成元P和双线性对,其中双线性对 为从 到 的双线性映射;
[0028] S02、选取哈希函数一 、哈希函数二 和哈希函数三 ;其中哈希函数一为SHA‑256;哈希函数二 ,哈希函数二 为任意长度的比特串映射到 上的哈希函数;哈希函数三 ,哈希函数 为任意长度的比特串映射到 上的哈希函数, 表示任意长度的比特串;
[0029] S03、选取k为验证节点私钥,计算验证节点公钥 ,其中 ;
[0030] S04、公布第二公共参数 ;
[0031] S05、计算第一中间参数 和投票参与节点的私钥 ,其中为投票参与节点的身份ID;
[0032] S06、组成环签名所需元组 ,其中event为投票参与节点自己的投票事件, ,W为投票参与节点身份ID的集合, ,
为投票参与节点自己的权重值。
[0033] 所述S6的具体步骤如下:
[0034] SS1、各个合格的投票参与节点选择投票选项,得到自己的选票 ;
[0035] SS2、各个合格的投票参与节点基于自己的投票密钥,通过Elgamal加密算法生成选票 的密文 ,其中 , ,j为投票合约中包含的候选人总数量, 代表选择第一位候选人, 代表选择第二位候选人,依次类推, 代表选择第j位候选人。
[0036] 所述S7中,各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名的具体步骤如下:
[0037] SSS1、各个合格的投票参与节点计算自己的投票事件消息摘要 和链接标签 ,其中 为各个投票参与节点自己环签名时使用的投票参与节点私钥;
[0038] SSS2、选取第一随机数R和第二随机数 ,其中 , ,;
[0039] SSS3、计算第二中间参数 ;
[0040] SSS4、计算第三中间参数 ;
[0041] S S S 5 、计 算 第 四 中 间 参 数 ,其 中;
[0042] SSS6、计算第五中间参数 ;
[0043] SSS7、计算第六中间参数 ;
[0044] SSS8、生成签名后的选票 ,其中 。
[0045] 所述S9的具体步骤如下:
[0046] S001、验证节点计算各个合格的投票参与节点的投票事件消息摘要 ;
[0047] S002、计算各个合格的投票参与节点的第二中间参数 、第三中间参数 和第四中间参数 ;
[0048] S003、针对各个合格的投票参与节点验证等式 是否成立;若是,则环签名有效,然后执行S004;若否,则环签名无效,然后执行S005;
[0049] S004、检测每个合格的投票参与节点的选票 中的链接标签T是否与其他合格的投票参与节点的选票 中的链接标签T相同,若是,则判定该选票 为重复投票,然后执行S005;若否,则判定该选票 为合格选票,然后执行S006;
[0050] S005、判定该选票 为不合格选票,然后执行S006;
[0051] S006、将选票合格或不合格的结果发送至投票发起节点。
[0052] 所述S11中,统计选票并公布选票的统计结果的具体步骤如下:
[0053] S0001、通过 计算出投票结果;
[0054] S0002、通过投票结果 计算出候选人票数集合 ,其中 为第一位候选人的票数, 为第二位候选人的票数,以此类推, 为第j位候选人的票数;
[0055] S0003、公布选票的统计结果,所述统计结果包含每一位候选人的票数和所有投票参与节点所投的弃权票数量。
[0056] 本发明的有益效果是:
[0057] (1)、通过对选票进行环签名,保证了投票参与节点的匿名性;
[0058] (2)、通过引入对投票参与节点的身份认证,可抵抗女巫攻击,实现了一人一票制,保障了投票结果的公平、公正和可信度;
[0059] (3)、通过检查环签名是否具有链接性,从而检查出双重投票或恶意刷票行为,实现电子投票严格的一号一票制;
[0060] (4)、通过Elgamal加密算法对选票进行加密,提高了选票的机密性,同时基于Elgamal加密算法的同态特性,使得选票不需要解密即可进行选票统计,实现了电子投票系统的快速、定时和准确的计票;
[0061] (5)、通过验证节点作为可信第三方,并由可信第三方完成选票环签名的初始化、计算和有效性验证,上述步骤可在投票参与节点与投票发起节点通信时同步进行,提升了电子投票的效率,同时减少了投票合约的计算量,从而减少了gas的消耗。

附图说明

[0062] 图1为电子投票方法的一种流程图。

具体实施方式

[0063] 下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0064] 本实施例提供了一种基于智能合约和分布式Elgamal算法的电子投票方法,该电子投票方法应用于基于区块链和智能合约的电子投票系统,电子投票系统中包括位于区块链上的多个节点,其中一个为投票发起节点,一个作为可信第三方的验证节点,剩余的一个或多个为投票参与节点。参阅图1,基于智能合约和分布式Elgamal算法的电子投票方法包括如下具体步骤:
[0065] 投票合约初始化阶段:
[0066] S1、投票发起节点初始化投票合约,并返回第一公共参数至各个投票参与节点。初始化投票合约时投票发起节点设置的参数包括投票名称、投票选项、注册截止时间、投票开始时间、投票截止时间和合格名册等。其中投票选项中包括候选人信息。投票合约利用上述参数初始化后返回第一公共参数。第一公共参数包括随机大素数q和生成元g,其中 ,为q阶素数群。
[0067] 投票者注册阶段:
[0068] S2、各个投票参与节点根据第一公共参数生成自己的注册信息,并将自己的注册信息发送至投票发起节点以及将自己的注册信息中的身份ID发送至验证节点。其中注册信息包括公钥 和身份ID。
[0069] 其中公钥 的生成步骤为:投票参与节点基于第一公共参数,选取私钥 ,然后通过Elgamal密钥体制生成公钥 ,其中 , , t为投票参与节点的总数量。
[0070] S3、投票发起节点根据各个注册信息分别判断对应的投票参与节点是否合格,并将合格的投票参与节点登记至合格名册,然后分别向各个合格的投票参与节点发送一个投票密钥。投票密钥为Elgamal体制密钥。
[0071] 其中,投票发起节点分别生成各个合格的投票参与节点所需的投票密钥的具体步骤如下:
[0072] 投票发起节点记录各个合格的投票参与节点发送的所有公钥 ,并根据所有公钥 重构得到每个合格的投票参与节点的投票密钥 ,其中n为合格的投票参与节点的数量,z表示与投票参与节点公钥 中的下标i不同的下标序号。
[0073] S4、验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组,并将元组发送至对应的投票参与节点。
[0074] 其中,验证节点根据各个投票参与节点的身份ID分别生成环签名所需元组包括如下子步骤:
[0075] 子步骤S01、选取q阶加法群 、q阶乘法群 、 的一个生成元P和双线性对,其中双线性对 为从 到 的双线性映射。
[0076] 子步骤S02、选取哈希函数一 、哈希函数二 和哈希函数三 ;其中哈希函数一 为SHA‑256;哈希函数二 ,哈希函数二 为任意长度的比特串映射到上的哈希函数;哈希函数三 ,哈希函数 为任意长度的比特串映射到上的哈希函数, 表示任意长度的比特串。
[0077] 子步骤S03、选取k为验证节点私钥,计算验证节点公钥 ,其中 。
[0078] 子步骤S04、公布第二公共参数 ;
[0079] 子步骤S05、计算第一中间参数 和投票参与节点的私钥 ,其中 为投票参与节点的身份ID。
[0080] 子步骤S06、组成环签名所需元组 ,其中event为投票参与节点自己的投票事件, ,W为投票参与节点身份ID的集合,
, 为投票参与节点自己的权重值。
[0081] 投票者投票阶段:
[0082] S5、各个合格的投票参与节点根据自己接收的元组生成自己的环签名。
[0083] S6、各个合格的投票参与节点通过选择投票选项,然后生成自己的选票,并基于自己接收的投票密钥,通过Elgamal加密算法对选票进行加密。本步骤包含如下子步骤:
[0084] 子步骤SS1、各个合格的投票参与节点选择投票选项,得到自己的选票 ;
[0085] 子步骤SS2、各个合格的投票参与节点基于自己的投票密钥,通过Elgamal加密算法生成选票 的密文 ,其中 ,,j为投票合约中包含的候选人总数量, 代表选择第一位候选人, 代表选择第二位候选人,依次类推, 代表选择第j位候选人。
[0086] S7、各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名,并将环签名后的选票发送至投票发起节点;其中环签名后的选票中包含链接标签。
[0087] 其中,各个合格的投票参与节点使用自己的环签名对自己加密后的选票进行签名包括如下子步骤:
[0088] 子步骤SSS1、各个合格的投票参与节点计算自己的投票事件消息摘要和链接标签 ,其中 为各个投票参与节点自己环签名时使用的投票参与节点私钥。
[0089] 子步骤SSS2、选取第一随机数R和第二随机数 ,其中 , ,。
[0090] 子步骤SSS3、计算第二中间参数 。
[0091] 子步骤SSS4、计算第三中间参数 。
[0092] 子步骤SSS5、计算第四中间参数 ,其中。
[0093] 子步骤SSS6、计算第五中间参数 。
[0094] 子步骤SSS7、计算第六中间参数 。
[0095] 子步骤SSS8、生成签名后的选票 ,其中 。
[0096] S8、投票发起节点将接收的各个选票发送至验证节点。
[0097] S9、验证节点判断选票的环签名是否有效以及判断该选票内的链接标签是否与其他选票内的链接标签相同,若环签名有效且该选票内的链接标签与其他选票内的链接标签不相同,则判定该选票合格,若环签名无效,和/或,该选票内的链接标签与其他一个或多个选票内的链接标签相同,则判定该选票不合格,然后将选票合格或不合格的结果告知投票发起节点。
[0098] 其中,S9包括如下子步骤:
[0099] 子步骤S001、验证节点计算各个合格的投票参与节点的投票事件消息摘要。
[0100] 子步骤S002、计算各个合格的投票参与节点的第二中间参数、第三中间参数 和第四中间参数 。
[0101] 子步骤S003、针对各个合格的投票参与节点验证等式 是否成立;若是,则环签名有效,然后执行子步骤S004;若否,则环签名无效,然后执行子步骤S005。
[0102] 子步骤S004、检测每个合格的投票参与节点的选票 中的链接标签T是否与其他合格的投票参与节点的选票 中的链接标签T相同,若是,则该投票参与节点的选票与其他一个或多个投票参与节点的选票之间具有可链接性,因而判定该选票 为重复投票,然后执行子步骤S005;若否,则判定该选票 为合格选票,然后执行子步骤S006。
[0103] 子步骤S005、判定该选票 为不合格选票,然后执行子步骤S006。
[0104] 子步骤S006、将选票合格或不合格的结果发送至投票发起节点。
[0105] S10、投票发起节点记录合格的选票。此外投票发起节点还将选票合格或不合格的结果返回至对应的投票参与节点,由此投票参与节点可以知晓自己的投票结果,实现验票功能。
[0106] 系统统计投票结果阶段:
[0107] S11、若投票发起节点确定当前时刻为投票截止时间,则统计选票并公布选票的统计结果。
[0108] 其中,统计选票并公布选票的统计结果包括如下子步骤:
[0109] 子步骤S0001、通过 计算出投票结果 。
[0110] 子步骤S0002、通过投票结果计算出候选人票数集合 ,其中 为第一位候选人的票数, 为第二位候选人的票数,以此类推, 为第j位候选人的票数。
[0111] 子步骤S0003、公布选票的统计结果。统计结果包含每一位候选人的票数和所有投票参与节点所投的弃权票数量。
[0112] 具体地,子步骤S002中, 完整性验证推导过程为:
[0113] 。
[0114] 的完整性验证推导过程为:
[0115] 。
[0116] 子步骤S0001中, 完整性验证推导过程为:
[0117] 由 ,可得: ;
[0118] 最终可得: ;
[0119] 所以, , 成立。
[0120] 子步骤S0002中, 完整性验证推导过程为:
[0121] 因为 ,所以成立。
[0122] 以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。