是否存在匿名,可变,安全投票的算法?

时间:2011-08-16 16:41:49

标签: algorithm voting

我想在我的应用程序中实现一个反馈机制 - 基本上是一个分数。要求是:

  1. 总存在,可以阅读
  2. 用户可以将其分数添加到总数
  3. 用户无法添加第二个分数,但可以更改原始分数,再次通过删除(减去)原始分数并添加新分数来更新总分。
  4. 无法确定给定用户的投票结果
  5. 似乎这与加密理论接近(甚至重叠),但我找不到能解决这个问题的任何事情。有没有人有任何特定的算法可以解决这个问题?或者甚至可以使用其他搜索向量来追求它?

4 个答案:

答案 0 :(得分:3)

如果存在匿名ID,例如用户提供的值的哈希值,则任何能够生成产生相同哈希的内容的人都可以修改相应的投票。

从这个意义上讲,仍然存在匿名性,因为哈希不会泄露源。而不是列出(userName,vote),list(hashValue,vote)。如果有一些担心跟踪hashValue可以在许多民意调查中追踪,那么为哈希编码一个额外的轮询特定包装,这不会公开显示。或者让用户将其嵌入(例如,前置)到其字符串中进行哈希处理,这样他们仍然可以生成唯一的提交。

答案 1 :(得分:2)

如果没有能力相信匿名人士不会投票两次,你就永远不能进行匿名投票。根据定义,真正的匿名性可以保证您永远无法检测到重复投票。

如果您强迫用户识别自己,您可以实施一个投票系统,防止重复投票并在投票的上下文中提供匿名性。 这是一个简单的算法。

  1. 用户登录。系统上有责任阻止一个用户获取多个用户帐户。
  2. 用户(非匿名)选择要投票的问题。
  3. 用户(非匿名)投票。
  4. 您的系统存储以下内容:
    • 表示用户对所选问题进行了投票。这可以防止重复投票。
    • 用户的价值对所选问题进行投票(这是您提到的分数)。存储此值时不会引用投票的用户。
    • 用户在某个问题上投票时的得分值。您可能需要将其作为计算值
  5. 如果用户想要更改他们的投票,他们登录,选择问题,然后取消投票(您的系统知道他们投票,因为它存储了这个)。在这一点上,他们可以再次选择问题(他们的投票指示被清除)并投票。

    请注意,您的系统需要在未投票时从问题的计数中减去用户投票的值。

答案 2 :(得分:1)

您没有提供足够的法律投票信息,但如果是一个整数,那么您可以保留一笔金额并允许多次投票。这是有效的,因为将投票从A改为B具有与投票A然后投票(B-A)完全相同的效果。

答案 3 :(得分:0)

实际上,在线投票非常棘手。

如果你想要最极端的投票安全方法,你可能需要考虑这样的事情:

https://docs.google.com/document/d/1SPYFAkVNjqDP4HOt_A_YGFZy-SFXVxHoN1hpLGNFKXI/pub

这是一种算法,可以在n个不同的服务器之间分配投票秘密,每个服务器都不能自行破坏投票匿名。所有n个服务器都必须合作以打破匿名,并且如果只有一个服务器覆盖其轨道并且擦除所有加密数据,则投票秘密将永远丢失/隐藏。

系统还可以处理重新发送投票的问题,以及任何安全的在线投票系统固有的一些限制:

对于在线投票安全,总有一个极限,因为它容易受到流量分析的影响。例如,如果有一天只有一个人投票,则可以断定投票结果的任何更新都是该人投票的结果。

完美安全的在线投票系统应被视为一次性投票混合器。这需要多少票。使他们失败,当投票最终结束时,它将所有这些混合在一起。这使得将投票与选民联系起来非常困难。这可以通过非常可靠的技术实现。

然而,当我们想要更新投票时,事情变得更加棘手。如果我们想要避免流量分析的可能性,则需要同步。理想情况下,所有选民都必须定期重新发送更新(即使他们的更新实际上不是更新)。