1

我在一个有几十名成员的小组中。我写了一个快速的网络投票系统,并且我想在其中添加一些“安全”元素。我正在尝试尽可能简单。我所做的是让用户在投票时必须输入一个秘密字符串(例如 GUID),我已将每个投票者存储在数据库中。

我想到的将秘密分发给用户的最安全的方法是在数据库中创建一堆秘密字符串,将它们打印出来并带到会议上,然后让人们从帽子里抽出秘密。这样,我相信我会获得两个主要好处:(1)我作为投票系统的作者,将无法确定哪些人投票支持什么(其他任何人也不会,只有秘密的持有者可以查看/更改该秘密所绑定的投票),并且(2)不是“任何人”都可以投票,因为有效秘密是先验已知的。

是否有一种可靠的方式来模拟实际存在的、从帽子中抽奖的过程,并且不影响上述主要好处。也许它无法做到,并且在某些时候必须有信任,或者我必须坚持让某人“得出”秘密(同时我保留了那些被告知个人秘密的人的记录)。

如果有人声称丢失了他们的秘密,我也不知道该怎么办,因为如果他们不诚实,而我只是让他们得出一个新的秘密,他们实际上将有两票可以投。如果不知道“丢失”的秘密是什么,我就无法进入并删除与之相关的投票(如果有的话)。

我现在的情况是,我认为我最好的选择基本上是让人们为每次投票获取新的秘密,并通过实体存在来分发秘密。是否有一种更优雅/自动化的方法来实现我还不知道的上述相同好处?

4

3 回答 3

4

这是一个难题。良好的电子投票系统通常是一个难题。有很多关于他们的文献。一个好的起点是阅读您可以找到的每篇David Chaum的论文:-)

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

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

问题是将秘密(代币)分发给选民,这样你,选举当局,不知道谁得到了哪个秘密,所有选民都可以相信. 最后一部分是问题所在。具有挑选帽子协议的物理会议可以完成这项工作,因为选民可以见证并证明您没有作弊(查看泄露的秘密)。我无法想象有任何协议可以让您在远程位置并执行相同的工作。例如,您可以生成秘密并将其交给第三方,第三方将其洗牌并提供给选民,但随后每个人都必须信任该第三方。再举一个例子,您可以通过匿名电子邮件地址分发秘密,但您不能确保只有授权选民才能获得秘密。我在这里看不到解决方案。除非从第一个选秀到最后一个选秀,一直监视着戴帽子的人,否则即使是帽子协议也很容易受到攻击。

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

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

顺便说一句,还有一个您没有解决的要求:选民可验证性。

在您的系统中,基本的选民可验证性非常简单:只需在选举后发布所有代币和相应的选票。但这允许选民向其他人证明他们的投票是什么(通过分享他们的代币或在选举前对其做出零知识承诺),这是他们不应该做的(以防止选民胁迫和投票购买)。

于 2012-05-17T16:28:15.473 回答
0

A solution would possibly be to build a server side service that when the vote opens it automates sending a random key to each user, this is usually done with a link that has a parameter on the URL. That way when they go to the site it is anonymous, yet everyone must have a key to vote. The key both combines the topic, and the random key generated for the user in a cryptic way so it is not easily duplicated, and the key is also stored server side for validation to make sure that it is only used once. I created a polling system using this method at one point.

于 2012-05-17T16:32:26.540 回答
-2

当他们访问该站点时,删除具有唯一 ID 的 cookie。然而,如果他们清除了他们的 cookie,你就完蛋了。

于 2012-05-17T16:27:40.757 回答