一种基于秘密分享的安全投票方案
Zoey zhu
适用场景
多个人大规模投票,对于一个问题选择出一个或多个选项,统计每个选项的得分。
交互流程
过程
创建投票数据
投票人数量;候选人数量;胜选人数量
- 投票人数量:n
- 候选人数量:m
- 阈值k,
后面有用
所需要数据实体
- 投票公告板实体
- 投票人实体
- 份额分配记录实体(X,Y)
- 份额累加记录实体
创建投票
输入:投票人数量;候选人数量 胜选人数量 64位验证码
计算:
投票过程
- 选择候选人,获得候选人列表
- 初始化pi=0,令
分片 exportraw()
- n为投票人,初始化split_vote=[],共有n-1个元素,
- 随机生成n-1个元素,存入split_vote;满足pi'+所有元素和=pi
- 用户本地保存pi'
- 用户分发split_vote给其他用户
后台处理投票
- 接收用户ID,以及split_vote,
- 获取投票用户序号list,剔除掉自己
- 分配分片数据,记录投票者-分配的用户份额关系
记票
在投票完成后,本地用户开始用选票记票,就是自身的pi'
- 遍历数据库,统计我获得别人的分片数据,和我自己的分片数据相加,记录sumi
- 获得n:投票人数量,将每个人的sum相加,所有的sum,获得target
- 获得k,
计票过程
- for
- 计算target &
按位与
- target = target >>k 左移k位
- end for
算法流程