Anonymous-ish在线投票系统

时间:2012-05-17 15:22:04

标签: security voting web-based

我是一个有几十个成员的小组。我写了一个快速的网络投票系统,我想要在其中添加一些“安全性”元素。我正试图尽可能地袒露骨头。我所做的是使得用户在投票时必须输入一个秘密字符串(例如GUID),我已经将每个选民存储在数据库中。

我认为向用户分发秘密的最安全的方法是在数据库中创建一堆秘密字符串,打印出来并将它们带到会议中,并让人们从帽子中抽出一个秘密。通过这种方式,我相信我有两个主要的好处:(1)作为投票系统的作者,我无法确定哪些人投票赞成了什么(也不是其他任何人,只有秘密的持有人)可以拉出/改变这个秘密所绑定的票数),以及(2)因为有效的秘密是先验已知的,所以“只有任何人”都不能去投票。

是否有一种合理的方式来模拟真实存在的,从虚拟中抽出的过程,并且不会影响上述原理优势。也许它无法完成,并且在某些时候必须有信任,或者我必须坚持要求某人“提取”秘密的实体存在(同时我记录那些被给予个人秘密的人)。

如果有人声称已经失去了他们的秘密,我也不知道该怎么办,因为如果他们是不诚实的我只是让他们画了一个新秘密,他们实际上会有两票投票。如果有任何秘密,我无法进入并删除与之相关的投票。

我所处的位置是,我认为我最好的选择是让人们为每一次投票制定新的秘密并通过实体存在分发秘密。有没有更优雅/自动化的方法来实现我上面提到的相同的好处,我还不知道呢?

3 个答案:

答案 0 :(得分:4)

这是一个难题。一般来说,良好的电子投票系统是一个难题。有很多关于它们的文献。一个好的起点是阅读David Chaum找到的每篇论文: - )

你正在处理无记名投票要求。

您的系统有一些重要的限制,正如您自己指出的那样,但我认为不可能做得更好。

问题是将秘密(代币)分发给选民,使你,选举当局,不知道谁得到了哪个秘密,所有选民都可以相信。最后一部分是问题所在。一个带帽子采摘协议的实际会议可以完成这项工作,因为选民可以见证并证明你不是在作弊(看看它们被发出时的秘密)。我无法想象任何允许您在远程位置并执行相同工作的协议。例如,你可以产生秘密并将它们交给第三方,这些第三方将他们洗牌并将其交给选民,但随后每个人都必须信任第三方。另一个例子,你可以通过匿名电子邮件地址分发秘密,但是你不能确保只有授权的选民才能获得秘密。我在这里看不到解决方案。除非戴着帽子的人从第一个选秀权到最后一个选秀权持续观看,否则即使是帽子协议也是脆弱的。

所以问题是,既然你是亲自见面,为什么不同时进行投票呢? (反对意见:在投票前见面比投票时更方便等等。)

至少关于选民丢失令牌的部分很容易回答:你不能给他们一个新的秘密。对他们来说太糟糕了。

顺便说一下,还有另一项要求是你没有解决:选民证书。

在你的系统中,基本的选民证书很容易:只需在选举后公布所有的代币和相应的选票。但是这允许选民证明他们的投票是对他人的(通过在选举前分享他们的代币或对其做出零知识承诺),这是他们不应该做的(以防止选民强制和投票购买)。

答案 1 :(得分:0)

解决方案可能是构建服务器端服务,当投票打开时,它会自动向每个用户发送随机密钥,这通常通过在URL上具有参数的链接来完成。这样,当他们去网站时它是匿名的,但每个人都必须有一个投票的钥匙。密钥既结合主题,又以神秘的方式为用户生成随机密钥,因此不容易复制,密钥也存储在服务器端进行验证,以确保只使用一次。我一度使用这种方法创建了一个轮询系统。

答案 2 :(得分:-2)

访问网站时,请删除包含唯一ID的Cookie。但是,如果他们清除了他们的饼干,你就会干杯。