cryptography - 签署投票,因此无法确定用户,但可以检测到重复投票

标签 cryptography signing

我正在创建简单的投票系统,主要限制是:

  • 每个人只能投票一次
  • 每次投票都必须严格匿名
  • 系统必须进行扩展,以覆盖某些投票终端无法始终访问系统网络的情况,因此它们会定期向主节点发送投票。

我所说的严格匿名是指地球上没有任何人可以访问数据来投票。必须有关于谁已经投票的信息,但不能是关于他投票了什么的信息。

这很容易通过创建 2 个数据桶(数据库表或其他东西)来实现,一个包含有关正在投票的用户的信息,第二个包含投票但没有用户数据,并且允许一次仅将记录插入到两个桶中,但仅限如果特定用户尚未在第一个存储桶中列出。该解决方案可行,但前提是系统的每个节点都可以始终访问主数据库。

因此,有第二种方法用一些用户数据对每个投票进行签名,这样该用户创建的每个投票都将具有完全相同的符号,但无法找到使用该符号的用户。我不知道如何创建这种标志。

它可以基于只有用户拥有的东西或只有用户知道的东西,但它不会存储在其他任何地方,并且可以验证它是否合法。某种证书不会透露它所属的人,并且如果例如有人偷了它,则可能会失效。

最佳答案

博卓 has written关于电子投票,非常值得一读。在您尝试实现的具体点上:

  • 允许选民只投票一次 - 通过使用强大的身份验证方法(即多因素身份验证方法)并维护选民列表,任何人都无法冒充其他人,并且每个人只有一次投票机会
  • 匿名投票 - 通过使用blind signature用户签署他们的选票,然后由独立方验证、统计和签名,之后选民可以在没有签名的情况下提交选票,因此投票是匿名的,但仍由独立方验证
  • 半离线或批量提交选票 - 我认为如果不损害前面的一些要点,您就无法实现这一目标,您最终会信任可能受到损害并提交假选票或扣留的选票机他们。

独立方可以是分布式的block chain使其真正独立、容错、最终一致。

关于cryptography - 签署投票,因此无法确定用户,但可以检测到重复投票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32782535/

相关文章:

javascript - 从种子生成私钥

javascript - 单字符签名方案(最低安全性)

android - 更改签名 key ,保留包名

continuous-integration - 作为持续构建的一部分,使用 gpg 对 RPM 进行签名 - 如何避免提示输入密码?

android - 如何使用 apktool 在 mac 上签署修改后的 apk

iphone - Skype如何在iOS上运行10分钟后继续发送通知?

c# - 存储 key 的最佳实践

python - Python 对 PEM + RSA + DES3 的支持在哪里?

java - 为给定的唯一数字列表/集合/数组生成唯一 ID

android - 有关为 Amazon Android App Store 准备 apk 的问题