一种基于秘密分享的安全投票系统方案

一种基于秘密分享的安全投票方案

Zoey zhu

zhuxinzhou999@zju.edu.cn

适用场景

    多个人大规模投票,对于一个问题选择出一个或多个选项,统计每个选项的得分。

交互流程

过程

创建投票数据

    投票人数量;候选人数量;胜选人数量

  • 投票人数量:n
  • 候选人数量:m
  • 阈值k,log2^{n}+1 后面有用

所需要数据实体

  1. 投票公告板实体
  2. 投票人实体
  3. 份额分配记录实体(X,Y)
  4. 份额累加记录实体

创建投票

输入:投票人数量;候选人数量 胜选人数量 64位验证码

计算:k=log2^{n}+1

投票过程

  1. 选择候选人,获得候选人列表
  2. 初始化pi=0,令pi+=log2^{(m-choose[i])*k}

分片 exportraw()

  1. n为投票人,初始化split_vote=[],共有n-1个元素,
  2. 随机生成n-1个元素,存入split_vote;满足pi'+所有元素和=pi
  3. 用户本地保存pi'
  4. 用户分发split_vote给其他用户

后台处理投票

  1. 接收用户ID,以及split_vote,
  2. 获取投票用户序号list,剔除掉自己
  3. 分配分片数据,记录投票者-分配的用户份额关系

记票

在投票完成后,本地用户开始用选票记票,就是自身的pi'

  1. 遍历数据库,统计我获得别人的分片数据,和我自己的分片数据相加,记录sumi
  2. 获得n:投票人数量,将每个人的sum相加,所有的sum,获得target
  3. 获得k,k=log2^{n}+1

计票过程

  • for
  • 计算target & 2^{k}-1 按位与
  • target = target >>k 左移k位
  • end for

算法流程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容