论文学习笔记 How not to prove your election outcome
论文学习笔记 How not to prove your election outcome
一、投票系统的错误总结
二、投票系统介绍
投票系统安全目标
- 当投票者没有收到正确的码时,恶意的客户端更改投票应该被检测出来。
- 只要至少有一个服务器端的组件是诚实的,完整可验证性(个人可验证性&普遍可验证性)可得到保证
三、**说明
四、个人可验证性阶段协议
五、FIAT-SHAMIR转换的陷阱:提供虚假的选票有效性证明
后果:投票者认为选票被接收到(验证通过),但该投票在混合后解密却无效
问题总结:hash函数的输入(零知识证明的挑战值)没有包含所有需要证明的语句
解决问题:所有语句都包含在hash的输入中,包括所有幂次证明中的基本元素
六、客户端证明不充足:当选择码与选票不匹配时,生成选票有效性的证明
后果:不知道是否会导致真正的攻击(有些码返回给voter而有些码不可复原,规范不明确)
原因: ZKPs的正确性不代表预选择码与投票一致,因为验证的是码的乘积而不是单独的码
解决问题:
- 为每个元素生成单独的ZKPs
- 服务器端只能在所有代码都被正确检索的情况下返回代码,那么可以证明产品证明是充分的
七、单独可验证性:为操作的投票返回正确的选择码(服务器勾结的情况下)
后果:投票者认为正确投了票,实际上票被操作
问题总结:恶意的VVC与一个恶意的客户端合谋,恶意生成投票参数
解决问题:生成可证明的正确的投票参数
八、使用BAYER-GROTH中的陷门承诺和伪造shuffle证明
8.1 BAYER-GROTH承诺
8.2 使用BAYER-GROTH中的陷门承诺和伪造shuffle证明
8.3 使用BAYER-GROTH中的陷门承诺和伪造shuffle证明:已知随机数
8.4 使用BAYER-GROTH中的陷门承诺和伪造shuffle证明:不知道随机数
8.5 弱FIAT-SHAMIR转换的普遍可验证性失败
8.6 弱FIAT-SHAMIR转换的普遍可验证性失败:转换成一组通过验证的假解密证明
后果:使某些投票无效(不喜欢的)
问题总结:hash函数的输入没有包含所有需要证明的语句
解决问题:所有语句都包含在hash的输入中