/Vote

Primary LanguageVue

支持的投票类型

  • 公开的投票

    • 有一个很严重的问题, 既然是公开的, 那么既没有投票人的限制, 也没有票数限制
  • 非公开记名投票

    • 仅限注册用户
    • 注册用户登录进行投票
  • 非公开不记名投票

    • 仅限注册用户
    • 注册用户登录进行投票, 拿到签名后的选票
    • 退出登录投票

匿名投票原理

  • 匿名投票需要解决的两个问题, 如何既能「保证」, 又能 「保护」投票人的身份
  • 关键点, 盲签名
  • 在**机构已经验证投票人身份(登录), 但是不知道投票内容(盲化)的情况下, 对投票签名
  • 签名之后的投票通过匿名渠道发送给**机构/计票方, 用公钥可以验证

盲签名步骤

  • 盲变换, 发送
  • 签名
  • 去盲, 得到对原消息的签名

已知实现方式的问题

  • 随机杂凑因子范围有限, 会使得不同用户的相同选票重复, 导致无法正确计票
  • 解决方案
ticket = {
  voteId: xx,
  optionId: xx,
  uuid4: xxxxxxx,
}
  • [ ]选票 JSON ->
  • 盲化 得到BASE64 ->
  • 发送签名 返回 BASE64 ->
  • 解盲, 校验
  • 生成选票(明文选票 + 签名 BASE64)
  • 发送明文 + 签名
  • 返回 Tracking Number
  • Tracking Number 用于查询选票记录