我想在我的应用程序中实现一个反馈机制 - 基本上是一个分数。要求是:
似乎这与加密理论接近(甚至重叠),但我找不到能解决这个问题的任何事情。有没有人有任何特定的算法可以解决这个问题?或者甚至可以使用其他搜索向量来追求它?
答案 0 :(得分:3)
如果存在匿名ID,例如用户提供的值的哈希值,则任何能够生成产生相同哈希的内容的人都可以修改相应的投票。
从这个意义上讲,仍然存在匿名性,因为哈希不会泄露源。而不是列出(userName,vote),list(hashValue,vote)。如果有一些担心跟踪hashValue可以在许多民意调查中追踪,那么为哈希编码一个额外的轮询特定包装,这不会公开显示。或者让用户将其嵌入(例如,前置)到其字符串中进行哈希处理,这样他们仍然可以生成唯一的提交。
答案 1 :(得分:2)
如果没有能力相信匿名人士不会投票两次,你就永远不能进行匿名投票。根据定义,真正的匿名性可以保证您永远无法检测到重复投票。
如果您强迫用户识别自己,您可以实施一个投票系统,防止重复投票并在投票的上下文中提供匿名性。 这是一个简单的算法。
如果用户想要更改他们的投票,他们登录,选择问题,然后取消投票(您的系统知道他们投票,因为它存储了这个)。在这一点上,他们可以再次选择问题(他们的投票指示被清除)并投票。
请注意,您的系统需要在未投票时从问题的计数中减去用户投票的值。
答案 2 :(得分:1)
您没有提供足够的法律投票信息,但如果是一个整数,那么您可以保留一笔金额并允许多次投票。这是有效的,因为将投票从A改为B具有与投票A然后投票(B-A)完全相同的效果。
答案 3 :(得分:0)
实际上,在线投票非常棘手。
如果你想要最极端的投票安全方法,你可能需要考虑这样的事情:
https://docs.google.com/document/d/1SPYFAkVNjqDP4HOt_A_YGFZy-SFXVxHoN1hpLGNFKXI/pub
这是一种算法,可以在n个不同的服务器之间分配投票秘密,每个服务器都不能自行破坏投票匿名。所有n个服务器都必须合作以打破匿名,并且如果只有一个服务器覆盖其轨道并且擦除所有加密数据,则投票秘密将永远丢失/隐藏。
系统还可以处理重新发送投票的问题,以及任何安全的在线投票系统固有的一些限制:
对于在线投票安全,总有一个极限,因为它容易受到流量分析的影响。例如,如果有一天只有一个人投票,则可以断定投票结果的任何更新都是该人投票的结果。
完美安全的在线投票系统应被视为一次性投票混合器。这需要多少票。使他们失败,当投票最终结束时,它将所有这些混合在一起。这使得将投票与选民联系起来非常困难。这可以通过非常可靠的技术实现。
然而,当我们想要更新投票时,事情变得更加棘手。如果我们想要避免流量分析的可能性,则需要同步。理想情况下,所有选民都必须定期重新发送更新(即使他们的更新实际上不是更新)。