【发布时间】:2012-05-17 15:22:04
【问题描述】:
我在一个有几十名成员的小组中。我写了一个快速的网络投票系统,我想在其中添加一些“安全”元素。我正在尝试尽可能简单。我所做的是让用户在投票时必须输入一个秘密字符串(例如 GUID),我已将每个投票者存储在数据库中。
我想到的将秘密分发给用户的最安全的方法是在数据库中创建一堆秘密字符串,将它们打印出来并带到会议上,然后让人们从帽子里抽出秘密。这样,我相信我得到了两个主要好处:(1)我作为投票系统的作者,将无法确定哪些人投票支持什么(其他任何人也不会,只有秘密的持有者可以查看/更改该秘密所绑定的投票),并且(2)不是“任何人”都可以投票,因为有效秘密是先验已知的。
是否有一种可靠的方式来模拟实际存在的、从帽子中抽奖的过程,同时又不影响上述主要好处。也许它无法做到,在某些时候必须有信任,或者我必须坚持让某人“得出”秘密(同时我保留了那些被告知个人秘密的人的记录)。
如果有人声称丢失了他们的秘密,我也不知道该怎么办,因为如果他们不诚实,而我只是让他们绘制一个新的秘密,他们实际上将有两票可以投。如果不知道“丢失”的秘密是什么,我就无法进入并删除与之相关的投票(如果有的话)。
我现在的情况是,我认为我最好的选择基本上是让人们为每次投票得出新的秘密,并通过实体存在来分发秘密。是否有一种更优雅/自动化的方式来实现我不知道的上述相同好处?
【问题讨论】:
-
这个当前的方案听起来不过是用户/密码的一个非常简陋的版本,没有额外的好处(除了不必编写处理用户的设置密码操作的代码)。更优雅的是常规用户/通行证方案。
-
@Cheekysoft 我不希望投票可以追溯到用户,但我希望用户能够更改他们的投票 - 有点像第 22 条问题......概述的方案还避免了“登录"这可能会让人怀疑投票的匿名性。
-
可能更好地调整问题以表明您想要(接近)完全匿名的投票机制。只是随机重复,但妥协可能是暂时记录对其用户的每一次投票,直到他们执行“锁定”,然后删除关系并禁止任何进一步的思想改变。
-
@Cheekysoft 最终用户无法相信“锁定”功能真的会像广告宣传的那样消除关系。
-
快速评论 - 如果有人丢失了其秘密,则需要更新 所有 选民的秘密,而不仅仅是一个选民。否则,如果您知道所有可能的秘密,您将能够轻松确定他/她选择了哪一个。