【问题标题】:Anonymous-ish Online Voting System [closed]匿名在线投票系统[关闭]
【发布时间】:2012-05-17 15:22:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这个当前的方案听起来不过是用户/密码的一个非常简陋的版本,没有额外的好处(除了不必编写处理用户的设置密码操作的代码)。更优雅的是常规用户/通行证方案。
  • @Cheekysoft 我不希望投票可以追溯到用户,但我希望用户能够更改他们的投票 - 有点像第 22 条问题......概述的方案还避免了“登录"这可能会让人怀疑投票的匿名性。
  • 可能更好地调整问题以表明您想要(接近)完全匿名的投票机制。只是随机重复,但妥协可能是暂时记录对其用户的每一次投票,直到他们执行“锁定”,然后删除关系并禁止任何进一步的思想改变。
  • @Cheekysoft 最终用户无法相信“锁定”功能真的会像广告宣传的那样消除关系。
  • 快速评论 - 如果有人丢失了其秘密,则需要更新 所有 选民的秘密,而不仅仅是一个选民。否则,如果您知道所有可能的秘密,您将能够轻松确定他/她选择了哪一个。

标签: security voting web-based


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 是的,不幸的是,这本质上很复杂,你说得对……我希望在会议之外进行投票的原因是因为我的系统允许选民添加新选项并更改他们的随着选项的发展投票 - 这不是实时处理的;会议中的创造力是一种浪费时间...
  • 我认为要做的事情是每个人都会获得一个可重复使用的秘密,并且要获得一个,您必须至少参加一次会议;除非所有投票的成员都证明他们的秘密在公布的投票名单中......并且在投票结束时那天每个人都必须相信我并没有操纵数据库中的选票......呃,这太荒唐了
【解决方案2】:

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

【讨论】:

  • 如果系统通过电子邮件发送密钥,则毫无疑问,后台系统已将密钥与电子邮件地址相关联......
  • 这是毫无疑问的,但它不需要与电子邮件地址相关联。这听起来像是一个非常怀疑的群体。不幸的是,没有办法真正做到 100% 随机且受信任的方式来做到这一点。使用电子邮件实际上是最好的方式,因为您可以跟踪给定主题的进度以及选项的变化。
【解决方案3】:

当他们访问该网站时,放置一个具有唯一 ID 的 cookie。但是,如果他们清除了 cookie,您就完蛋了。

【讨论】:

  • 使用此解决方案,网站运营商知道并可以记录每个 cookie 是发给谁的,这违反了无记名投票要求。
  • @Celada:不一定。他知道一个 ID 投票的事实并不意味着他知道这个 ID 的所有者是谁。
  • 引用问题:“不是“任何人”都可以去投票”。这意味着您必须在向他们颁发令牌之前识别和验证属于允许投票的组成员的人,对吗?
猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2015-01-08
相关资源
最近更新 更多