一种基于以太坊的投票系统及方法
文献发布时间:2023-06-19 10:16:30
技术领域
本发明涉及投票管理技术领域,特别涉及一种基于以太坊的投票系统及方法。
背景技术
电子投票的实现大致可以分为3类:基于混合网技术,基于盲签名技术,基于同态加密技术。这些投票技术都存在各自不足,基于盲签名、环签名的电子投票方案一般需要假设匿名信道和可信的签名机构;基于混合网络的电子投票方案从理论上可以实现解密计票的公开可验证性,但算法过于复杂,效率较低;基于同态加密的电子投票方案虽然可以实现密文计算保护选票的隐私性,但当前全同态加密的计算复杂度太高,并不能有效实用。这些方案都是基于中心化进行实现,无法保证投票过程中投票者的选票和投票结果不被篡改,更无法保证其匿名性。
如何保证投票过程中投票者的选票和投票结果不被篡改及匿名性,成为一个亟待解决的技术问题。
发明内容
本发明的目的是提供一种基于以太坊的投票系统及方法,以保证投票过程中投票者的选票和投票结果不被篡改及匿名性。
为实现上述目的,本发明提供了如下方案:
一种基于以太坊的投票系统,所述投票系统包括:投票发起者移动端、多个投票参与者移动端、以太坊和分离器;
所述投票发起者移动端与所述以太坊连接,所述投票发起者移动端用于发起投票,产生投票信息,并将所述投票信息发送给所述以太坊;
所述以太坊分别与多个所述投票参与者移动端连接,所述以太坊用于将所述投票信息发送给多个所述投票参与者移动端;
所述投票参与者移动端用于根据所述投票信息进行投票,产生带有时间戳的票信息,并将投票参与者身份信息和带有时间戳的票信息发送给所述分离器;
所述分离器用于将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将所述投票参与者身份信息随机存储至多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至多个票队列中的一个票队列中;
所述投票发起者移动端与所述分离器连接,所述投票发起者移动端用于从分离器的多个投票人队列中随机的获取投票参与者身份信息和多个票队列中随机的获取带有时间戳的票信息,并将随机获取的投票参与者身份信息和带有时间戳的票信息发送给所述以太坊,当获取完成所有的投票参与者身份信息和带有时间戳的票信息后销毁分离器内的投票人队列和票队列;
所述以太坊用于将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端;
所述投票参与者移动端还用于从所述以太坊获取顺序打乱后的投票人队列和顺序打乱后的票队列,根据顺序打乱后的投票人队列和顺序打乱后的票队列验证投票是否被篡改。
可选的,所述分离器包括触发器、逻辑处理器和存储器;
所述触发器分别与多个所述投票参与者移动端和逻辑处理器连接,用于当多个所述投票参与者移动端发送的用户密码均正确时,产生启动信号,启动所述逻辑处理器;
所述逻辑处理器分别与多个所述投票发起者移动端和存储器连接,所述逻辑处理器用于将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将所述投票参与者身份信息随机存储至存储器的多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至存储器中的多个票队列中的一个票队列中;
所述存储器与所述投票发起者移动端连接。
可选的,所述触发器、所述逻辑处理器和所述存储器均设置在云端。
可选的,所述触发器为HTTPTrigger。
可选的,所述投票信息包括投票名称、投票目的、投票选项、投票截止时间和投票性质;
一种基于以太坊的投票方法,所述投票方法包括如下步骤:
通过投票发起者移动端发起投票,产生投票信息,并将所述投票信息发送给以太坊;
通过以太坊将所述投票信息发送给多个所述投票参与者移动端;
通过投票参与者移动端根据所述投票信息进行投票,产生带有时间戳的票信息,并将投票参与者身份信息和带有时间戳的票信息发送给分离器;
通过分离器将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将投票参与者身份信息随机存储至多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至多个票队列中的一个票队列中;
通过所述投票发起者移动端从分离器的多个投票人队列中随机的获得投票参与者身份信息和多个票队列中随机的获得带有时间戳的票信息,并将随机获取的投票参与者身份信息和带有时间戳的票信息发送给所述以太坊;当获取完成所有的投票参与者身份信息和带有时间戳的票信息后销毁分离器内的投票人队列和票队列;
通过以太坊将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端。
可选的,通过所述投票发起者移动端从分离器的多个投票人队列中随机的获得投票参与者身份信息和多个票队列中随机的获得带有时间戳的票信息,具体包括:
利用随机数产生函数产生区间[1,N
从多个所述投票人队列中获取第n1个投票人队列中的第m
利用随机数产生函数产生区间[1,N
从多个所述票队列中获取第n2个票队列中的第m
可选的,通过以太坊将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端,之后还包括:
投票参与者移动端从以太坊获取顺序打乱后的投票人队列,判断所述顺序打乱后的投票人队列是否存在所述投票参与者移动端的投票参与者身份信息,获得第一判断结果;
若所述第一判断结果表示是,则从访问以太坊中获取顺序打乱后的票队列,判断所述顺序打乱后的票队列中是否存在投票参与者移动端的投票时产生的时间戳,获得第二判断结果;
若所述第二判断结果为是,则判断顺序打乱后的票队列中所述时间戳对应的票信息是否与投票参与者移动端投票时产生的票信息一致,获得第三判断结果;
若所述第三判断结果表示是,则输出投票未被篡改的验证结果;
若所述第一判断结果、所述第二判断结果或所述第三判断结果为否,则输出投票被篡改的验证结果,并投票被篡改的结果发送给管理员。
可选的,所述投票信息包括投票名称、投票目的、投票选项、投票截止时间和投票性质。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明公开了一种基于以太坊的投票系统,所述投票系统包括:投票发起者移动端、多个投票参与者移动端、以太坊和分离器;所述投票发起者移动端与所述以太坊连接,所述投票发起者移动端用于发起投票,产生投票信息,并将所述投票信息发送给所述以太坊;所述以太坊分别与多个所述投票参与者移动端连接,所述以太坊用于将所述投票信息发送给多个所述投票参与者移动端;所述投票参与者移动端用于根据所述投票信息进行投票,产生带有时间戳的票信息,并将投票参与者身份信息和带有时间戳的票信息发送给所述分离器;所述分离器用于将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将所述投票参与者身份信息随机存储至多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至多个票队列中的一个票队列中;所述投票发起者移动端与所述分离器连接,所述投票发起者移动端用于从分离器的多个投票人队列中随机的获取投票参与者身份信息和多个票队列中随机的获取带有时间戳的票信息,并将随机获取的投票参与者身份信息和带有时间戳的票信息发送给所述以太坊,当获取完成所有的投票参与者身份信息和带有时间戳的票信息后销毁分离器内的投票人队列和票队列;所述以太坊用于将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端。本发明利用以太坊的不被篡改性并结合分离器将投票参与者身份信息与票信息的顺序进行打乱,使其无法对应,保证了投票的匿名性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种基于以太坊的投票系统的结构图;
图2为本发明提供的移动端(投票发起者移动端和投票参与者移动端)的界面图;
图3为本发明提供的分离器的功能原理图;
图4为本发明提供的以太坊的功能原理图;
图5为本发明提供的以太坊的实现代码图;
图6为本发明提供的一种基于以太坊的投票方法的流程图。
具体实施方式
本发明的目的是提供一种基于以太坊的投票系统及方法,以保证投票过程中投票者的选票和投票结果不被篡改及匿名性。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对发明作进一步详细的说明。
如图1所示,本发明提供一种基于以太坊的投票系统,所述投票系统包括:投票发起者移动端、多个投票参与者移动端、以太坊和分离器;所述投票发起者移动端与所述以太坊连接,所述投票发起者移动端用于发起投票,产生投票信息,并将所述投票信息发送给所述以太坊;所述以太坊分别与多个所述投票参与者移动端连接,所述以太坊用于将所述投票信息发送给多个所述投票参与者移动端;所述投票参与者移动端用于根据所述投票信息进行投票,产生带有时间戳的票信息,并将投票参与者身份信息和带有时间戳的票信息发送给所述分离器;所述分离器用于将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将所述投票参与者身份信息随机存储至多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至多个票队列中的一个票队列中。所述投票发起者移动端与所述分离器连接,所述投票发起者移动端用于从分离器的多个投票人队列中随机的获取投票参与者身份信息和多个票队列中随机的获取带有时间戳的票信息,并将随机获取的投票参与者身份信息和带有时间戳的票信息发送给所述以太坊,当获取完成所有的投票参与者身份信息和带有时间戳的票信息后销毁分离器内的投票人队列和票队列。本发明的投票发起者移动端每隔时间t自动从分离器获取本场投票有关的、已被分离的投票信息,并且将这些信息通过web3交互到以太坊(以太坊合约)上。所述以太坊用于将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端。所述投票参与者移动端还用于从所述以太坊获取顺序打乱后的投票人队列和顺序打乱后的票队列,根据顺序打乱后的投票人队列和顺序打乱后的票队列验证投票是否被篡改。投票发起者移动端和投票参与者移动端选用不同方式显示投票结果,显示方式包括公开显示、非公开显示等。
本发明在以太坊链上发布智能合约,智能合约实现如下功能:
1、创建投票的参数:投票名称,投票描述,投票选项,截止时间,允许参加的用户(可选),用户权重(可选);
2、创建公开、无权重投票;
3、创建公开、有权重投票;
4、创建私有、无权重投票;
5、创建私有、有权重投票;
6、使用分离器;
7、参与投票;
8、计算投票hash(哈希)值;
9、获取当前投票信息。
由于以太坊属于区块链2.0,因此以太坊以及发布在其上的智能合约都享有区块链所带来的优点,包括公开、不可篡改等特性。本系统汲取了不可篡改这个特性的优点,又采用分离器克服了区块链公开性所引起的不利于匿名性的缺点。
其中,投票人队列:经分离器执行分离操作后得到的保存投票参与者身份信息的并且后续存储在以太坊上的列表。票队列:经分离器执行分离操作后得到的保存投票参与者所投的票以及票的时间戳信息的并且后续存储在以太坊上的列表。
票发起者移动端或投票参与者移动端的界面如图2所示,其实现的功能有:
1)实现app界面;
2)生成用户地址和票信息;
3)将用户地址和票信息发送给分离器;
4)验证客户投票信息未篡改。
所述分离器包括触发器、逻辑处理器和存储器;所述触发器分别与多个所述投票参与者移动端和逻辑处理器连接,用于当多个所述投票参与者移动端发送的用户密码均正确时,产生启动信号,启动所述逻辑处理器;所述逻辑处理器分别与多个所述投票发起者移动端和存储器连接,所述逻辑处理器用于将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将所述投票参与者身份信息随机存储至存储器的多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至存储器中的多个票队列中的一个票队列中;所述存储器与所述投票发起者移动端连接。分离器的工作原理为:当接受到移动端发送来的投票信息时,分离器将其中被分离的用户信息随机存入多个队列之一,票据信息也一样。而投票发起者在本地也是按随机顺序获取多个队列中的信息,这样即使是开发者也无法获知用户信息和票据信息的对应关系,从而实现了完全的匿名。所述触发器、所述逻辑处理器和所述存储器均设置在云端。所述触发器为HTTPTrigger。本发明的分离器的设计消除了投票参与者和票信息之间的对应关系,其效果上实现了安全的匿名性。即使分离器遭到攻击导致信息泄露,所泄露的信息也只是两个毫无关系的队列,无论是攻击者、用户还是系统开发者和管理者都无法获得投票参与者和票信息的对应关系,即无法知道谁投了哪张票。
分离器的工作原理如图3所示。
(1)功能说明:
实现匿名性,需要多人密码来开启;
接收、临时保存前端(用户端)发送的地址和票信息;
将信息打乱得到地址表和元组表;
将地址表和元组表发送给以太坊;
实现自我销毁。
(2)分离器逻辑实现:
分离器的操作分为以下几个部分:启动分离器,临时保存人和票的数据,打乱人和票的对应关系,返回打乱后的数据,销毁分离器。
启动分离器:多位用户输入自己保存的密码,验证密码均正确后分离器启动。
临时保存人和票的数据、打乱人和票的对应关系:当接受到移动端发送来的投票信息时,分离器将其中被分离的用户信息随机存入多个队列之一,票据信息也一样。而投票发起者在本地也是按随机顺序获取多个队列中的信息,这样即使是开发者也无法获知用户信息和票据信息的对应关系,从而实现了完全的匿名。
返回打乱后的数据:由于分离器无法承担一个以太坊用户的角色,本发明需要将分离器执行分离操作后的数据列表返回给一个以太坊用户(如投票创建者或者一次投票的管理员),然后利用该地址一次性将打乱后的两个列表通过合约交互的方式发送到以太坊后端中进行保存。从而实现数据上链,投票信息持久化存储。
销毁分离器:为避免投票信息泄露,分离器在一次投票完成之后即当销毁,使得分离器中的投票信息也随之完全销毁,避免信息的(包括开发者)泄露。
(3)分离器物理实现:
无服务器应用:考虑到分离器只是完成单一的工作,因此本发明使用MicrosoftAzure平台的提供的Azure Function来实现分离器,使用HTTPTrigger作为触发器,当接收到移动端发来的HTTP请求时,部署在云上的Function启动,接收人和票的数据并进行分离。
分离器设计架构:分离器架构由三部分组成,负责触发Funtion的触发器、负责逻辑处理的function和负责存储的Storage,其分别与外界通讯,共同完成信息的分离功能。图3中用户通过HTTP协议与分离器交互,投票发起人Sponsor在移动端与存储队列交互;
云端采用C#语言进行开发,移动端采用java以及Microsoft提供的Azure SDK forJava与云端通信。
(4)分离器特点说明:
采用无服务器应用:托管无需管理或预配基础结构即可执行数据分离的业务逻辑。
模仿冯诺依曼结构:将逻辑处理与存储分离,这样进行信息销毁时只需对存储队列进行操作而无需销毁整个分离器。
数据结构:采用随机存储,百分之百保证匿名分离。存储器中用于维护用户信息和票据信息的队列采用多个存储队列实现,应用此数据结构实现匿名分离的算法。
分离算法思想:当接受到移动端发送来的投票信息时,分离器将其中被分离的用户信息随机存入多个队列之一,票据信息也一样。而投票发起者在本地也是按随机顺序获取多个队列中的信息,这样即使是开发者也无法获知用户信息和票据信息的对应关系,从而实现了完全的匿名。
信息销毁:当投票结束时,彻底销毁存储队列中有关本次投票的所有信息,使得包括开发者在内的任何人都无法查询跟踪(用户本人持秘钥可以追踪到自己的票据,这点见后续说明);
关于信息销毁的说明1:上文中提及的每次投票完成后销毁分离器,这对于多用户的应用模式是不实际的,这会倒是分离器负载过大,本发明采用冯诺依曼结构使信息的销毁可以直接操作存储队列而不是销毁分离器,这大大减轻了分离器负载并且将可行性大大提升。
关于信息销毁的说明2:这里的存储队列完全不惧怕任何无关人员的访问,因为队列中投票人和票的信息是分离的,而且此阶段包括开发者和投票人没有任何人能够找到投票人与票的对应关系,因此可以说分离器的设计完美的实现了匿名性。
Azure Function并行:多个触发事件发生的速度超过了单线程函数运行的处理速度时,运行时可并行多次调用函数。每个Function App实例都可能使用多个线程并行处理并发函数调用。每个Function App实例中并发函数的最大调用数根据所用触发器类型以及Function App中其他函数所用资源而有所不同。
分离器通过打乱数据对应关系的方式实现了匿名性,但是需要进一步验证信息的真实性,即票信息未被篡改。
所述投票信息包括投票名称、投票目的(投票描述)、投票选项、投票截止时间和投票性质(是否私有)。
以太坊后端,以太坊的功能原理图如图4所示。
(1)以太坊的功能功能说明:
a)提供智能合约,实现不可篡改性和app的去中心化;
b)接收并保存分离器传来的地址表和元组表。
(2)以太坊的设计实现
i.投票基本功能:投票功能由部署在以太坊上的Vote.sol智能合约完成。投票类的UML图如图5所示。
图5中,成员变量Poll表示一次投票,是结构体类型,它包括一次投票的全部信息,如投票名称、选项、投票结果、是否公开、结束时间等,其中hasVoted变量是地址到bool的mapping类型(类似于Java中的Map),用来记录某个地址的用户是否已经投过票。
allHashes、allPublicHashes分别记录所有的投票、所有的公开投票的Hash值,这里将两者分开记录是为了方便前端开发。
hash2Poll、addr2Hash、addr2DeletedPoll是三个mapping类型,分别记录投票Hash到投票结构体、发起者地址到投票Hash以及发起者地址到已删除投票的映射。
calcPollHash()方法将投票的名字以及发起者的地址一起编码为ABI类型,并使用keccak256算法计算哈希值并返回。其中ABI是Application Binary Interface的缩写,它是以太坊规定的与智能合约进行交互的标准方法。
createPoll()方法将根据用户输入的投票名称、描述、选项等参数,创建一个Poll类型变量,保存在合约的存储中,并调用calcPollHash()方法计算该投票的哈希值并返回。createPoll方法通过重载分别实现了创建公开/私有、投票人有权重/投票人无权重的功能。
vote()方法的参数为投票Hash和选项,实现为某个Poll的某个选项进行投票的功能。
cancelPoll()方法的功能为取消一个投票,仅投票的发起者可以取消该投票。
addAllowedUsers()方法为私有投票添加可以投票的用户地址,仅投票发起者可以进行该操作。
getWinner()方法的参数为某个投票的哈希值,返回该投票得票数最高的选项。
ii.用户追踪查询:已投票的用户可以通过临时保存人和票的数据阶段提到的时间戳Time(在一次投票过程中每个用户唯一的信息,由用户生成,且保存在本地)验证票信息未被篡改。下面是详细过程。
当用户需要验证时,用户Addr通过合约交互的方式向以太坊智能合约发送请求,智能合约将两个列表L1和L2发送给用户。
用户端遍历L1表,若L1表中存在Addr,说明用户的票信息已经被上传到以太坊中;若不存在,则可以向管理员发送通知请求,说明此次投票信息出现偏差,请求销毁分离器,重启本次投票活动。
用户端遍历L2表,若L2表中存在用户唯一的时间戳Time,则取出与时间戳绑定在一起的票信息Ticket,用户端判断该票信息是否为自己所投的票信息。若一致,说明信息未被篡改;否则说明已被篡改,则可以直接执行对应的分离器销毁操作,并重启本次投票活动。
通过分离器的5个阶段以及用户端的2个验证操作,可以保证投票的匿名性以及不可篡改性。
如图6所示,本发明提供一种基于以太坊的投票方法,所述投票方法包括如下步骤:
步骤601,通过投票发起者移动端发起投票,产生投票信息,并将所述投票信息发送给以太坊。其中,所述投票信息包括投票名称、投票目的、投票选项、投票截止时间和投票性质。
步骤602,通过以太坊将所述投票信息发送给多个所述投票参与者移动端。
步骤603,通过投票参与者移动端根据所述投票信息进行投票,产生带有时间戳的票信息,并将投票参与者身份信息和带有时间戳的票信息发送给分离器。
步骤604,通过分离器将每个投票参与者移动端发送的投票参与者身份信息和带有时间戳的票信息分离,并将投票参与者身份信息随机存储至多个投票人队列中的一个投票人队列中,将带有时间戳的票信息随机存储至多个票队列中的一个票队列中。
步骤605,通过所述投票发起者移动端从分离器的多个投票人队列中随机的获得投票参与者身份信息和多个票队列中随机的获得带有时间戳的票信息,并将随机获取的投票参与者身份信息和带有时间戳的票信息发送给所述以太坊;当获取完成所有的投票参与者身份信息和带有时间戳的票信息后销毁分离器内的投票人队列和票队列。
步骤605所述通过所述投票发起者移动端从分离器的多个投票人队列中随机的获得投票参与者身份信息和多个票队列中随机的获得带有时间戳的票信息,具体包括:利用随机数产生函数产生区间[1,N
步骤606,通过以太坊将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端。
如果某用户有验证自己票据是否被篡改的需求,则通过web3j向以太坊请求,请求的内容为申请获得两个队列,即投票人队列和票队列。智能合约将两个队列交互到申请验证的移动端,投票参与者移动端按照如下算法检验票据信息是否被篡改:当用户需要验证时,投票参与者移动端Addr通过合约交互的方式向以太坊智能合约发送请求,智能合约将两个列表投票人队列L1和票队列L2发送给投票参与者移动端。投票参与者移动端遍历L1表,若L1表中存在Addr,说明用户的票信息已经被上传到以太坊中;若不存在,则可以向管理员发送通知请求,说明此次投票信息出现偏差,请求销毁分离器,重启本次投票活动。用户端遍历L2表,若L2表中存在用户唯一的时间戳Time,则取出与时间戳绑定在一起的票信息Ticket,用户端判断该票信息是否为自己所投的票信息。若一致,说明信息未被篡改;否则说明已被篡改,则可以向管理员发送通知请求,说明此次投票信息出现偏差,请求销毁分离器,重启本次投票活动。
具体的,步骤606所述通过以太坊将随机获取的所有投票参与者身份信息排列成顺序打乱后的投票人队列,将随机获取的带有时间戳的票信息排列成顺序打乱后的票队列,根据顺序打乱后的票队列确定投票结果,并将所述投票结果发送给投票发起者移动端和投票参与者移动端,之后还包括:投票参与者移动端从以太坊获取顺序打乱后的投票人队列,判断所述顺序打乱后的投票人队列是否存在所述投票参与者移动端的投票参与者身份信息,获得第一判断结果;若所述第一判断结果表示是,则从访问以太坊中获取顺序打乱后的票队列,判断所述顺序打乱后的票队列中是否存在投票参与者移动端的投票时产生的时间戳,获得第二判断结果;若所述第二判断结果为是,则判断顺序打乱后的票队列中所述时间戳对应的票信息是否与投票参与者移动端投票时产生的票信息一致,获得第三判断结果;若所述第三判断结果表示是,则输出投票未被篡改的验证结果;若所述第一判断结果、所述第二判断结果或所述第三判断结果为否,则输出投票被篡改的验证结果,并投票被篡改的结果发送给管理员。
本发明的优点是:
1、投票创建过程的去中心化;
2、票据信息不可篡改;
3、投票具有匿名性。
第1、2点来源于以太坊的区块链技术,即以太坊后端;区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。以太坊的智能合约是一段可被以太坊虚拟机执行的代码。以以太坊特有二进制形式存储在区块链上,并由以太坊虚拟机解释,被称为以太坊虚拟机码(Bytecode)。由于区块链的自身特性,导致链上的交易信息、合约等无法被篡改,这种不可篡改的特性正好适合投票这种活动,因此本项目采用以太坊进行后端开发。宏观思路是将投票信息存储在以太坊节点上,然后利用这些信息完成所需功能。
第3点来源于分离器;不加分离器的以太坊投票系统不能保证投票的匿名性,这是因为每个用户在投票时都会将自己的地址上传到以太坊区块链上,虽然从地址看不出用户本身是谁,但是地址和用户却是一一对应关系,通过分析一些特定范围的多个投票后,容易得出用户和地址的对应关系,因此没有分离器的以太坊投票系统仅能保证非实名性,而不能保证匿名性。分离器的作用是将一场投票中的投票信息(投哪个选项)和用户(投票者)信息的关系进行打乱,同时保证分离器的内容不会被外界获取或干扰,并在完成一次分离后自动销毁,以此实现投票系统的匿名性。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
本文中应用了具体个例对发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
- 一种基于以太坊的投票系统及方法
- 一种基于秘密共享的抗量子计算投票系统及方法