我在一个有几十名成员的小组中。我写了一个快速的网络投票系统,并且我想在其中添加一些“安全”元素。我正在尝试尽可能简单。我所做的是让用户在投票时必须输入一个秘密字符串(例如 GUID),我已将每个投票者存储在数据库中。
我想到的将秘密分发给用户的最安全的方法是在数据库中创建一堆秘密字符串,将它们打印出来并带到会议上,然后让人们从帽子里抽出秘密。这样,我相信我会获得两个主要好处:(1)我作为投票系统的作者,将无法确定哪些人投票支持什么(其他任何人也不会,只有秘密的持有者可以查看/更改该秘密所绑定的投票),并且(2)不是“任何人”都可以投票,因为有效秘密是先验已知的。
是否有一种可靠的方式来模拟实际存在的、从帽子中抽奖的过程,并且不影响上述主要好处。也许它无法做到,并且在某些时候必须有信任,或者我必须坚持让某人“得出”秘密(同时我保留了那些被告知个人秘密的人的记录)。
如果有人声称丢失了他们的秘密,我也不知道该怎么办,因为如果他们不诚实,而我只是让他们得出一个新的秘密,他们实际上将有两票可以投。如果不知道“丢失”的秘密是什么,我就无法进入并删除与之相关的投票(如果有的话)。
我现在的情况是,我认为我最好的选择基本上是让人们为每次投票获取新的秘密,并通过实体存在来分发秘密。是否有一种更优雅/自动化的方法来实现我还不知道的上述相同好处?