4

盲签名实现的匿名投票协议

 3 years ago
source link: https://zhiqiang.org/cs/secure-voting-by-blind-signature.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

想起比多中心的匿名投票协议,有一种很简单的使用盲签名的投票协议,可以做到匿名投票。

1. 具体流程

该协议的核心之处在于有一个验证机构,用于出具投票资格验证。投票人用资格证明去匿名投票:

  1. 验证机构有一个投票人列表。
  2. 每个投票人生成一个公钥私钥对,并将公钥pp盲化后得到p′p′发送给验证机构。验证机构检查投票人的资格,然后对盲化的公钥p′p′进行签名。
  3. 投票人对收到的盲化公钥签名进行反盲化,便得到验证机构对公钥的签名。
  4. 投票人用第 2 步中的私钥加密自己的投票和上一步中得到的公钥签名,和公钥pp一起发布。
  5. 计票人(任何人)统计所有所有的投票,并进行累加。

这里的核心之处在于,投票中用的是公钥pp,但验证机构只能看到p′p′,也就是说它无法将投票人和投票关联起来。

2. 盲签名算法

上述协议最核心之处是盲签名算法。RSA 本身便能实现盲签名算法。假设签名者公布的公钥为(n,e)(n,e),私钥为(n,c)(n,c)。假设需要进行盲签名的文本为xx,那么盲签名可分为三步:

  1. 盲化xx:需签名的用户随机选取和nn互质的rr,计算x′=xrex′=xre,并发送给签名者。
  2. 签名者对x′x′进行签名,得到签名y′=(x′)c=xcrec=xcry′=(x′)c=xcrec=xcr。
  3. 用户对签名进行反盲化:y=y′/r=xcy=y′/r=xc便是对原始文本xx的签名。

看上去这个比前面的双中心的匿名投票协议会更好,因为该中心绝对无法破坏匿名性。而在双中心协议中,两个中心合谋会破坏匿名性。

但该协议也有两个缺陷:

  1. 验证机构可以拒绝服务。由于投票者必须实名提交验证,验证机构可以拒绝某些人的投票(假设验证机构被共和党所控制,它可以拒绝民主党人的验证申请,比如假装没收到申请等等)。
  2. 验证机构可以伪造不存在的用户,甚至伪造投票者的投票。

在清华大学的一篇论文一种安全、实用的电子投票系统中,作者试图通过设置多个验证中心,投票者只需要经过其中若干个验证中心验证便算作有效投票。但这只是缓解,而不是完全解决上面的缺陷。

Q. E. D.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK