盲签名实现的匿名投票协议
Link Share :https://zhiqiang.org/cs/secure-voting-by-blind-signature.html
- via RSS
想起比多中心的匿名投票协议,有一种很简单的使用盲签名的投票协议,可以做到匿名投票。
1. 具体流程
该协议的核心之处在于有一个验证机构,用于出具投票资格验证。投票人用资格证明去匿名投票:
- 验证机构有一个投票人列表。
- 每个投票人生成一个公钥私钥对,并将公钥\(p\)盲化后得到\(p'\)发送给验证机构。验证机构检查投票人的资格,然后对盲化的公钥\(p'\)进行签名。
- 投票人对收到的盲化公钥签名进行反盲化,便得到验证机构对公钥的签名。
- 投票人用第 2 步中的私钥加密自己的投票和上一步中得到的公钥签名,和公钥\(p\)一起发布。
- 计票人(任何人)统计所有所有的投票,并进行累加。
这里的核心之处在于,投票中用的是公钥\(p\),但验证机构只能看到\(p'\),也就是说它无法将投票人和投票关联起来。
2. 盲签名算法
上述协议最核心之处是盲签名算法。RSA 本身便能实现盲签名算法。假设签名者公布的公钥为\((n, e)\),私钥为\((n, c)\)。假设需要进行盲签名的文本为\(x\),那么盲签名可分为三步:
- 盲化\(x\):需签名的用户随机选取和\(n\)互质的\(r\),计算\(x' = xr^e\),并发送给签名者。
- 签名者对\(x'\)进行签名,得到签名\(y'=(x')^c = x^cr^{ec}=x^cr\)。
- 用户对签名进行反盲化:\(y = y'/r=x^c\)便是对原始文本\(x\)的签名。
3. 缺陷
看上去这个比前面的双中心的匿名投票协议会更好,因为该中心绝对无法破坏匿名性。而在双中心协议中,两个中心合谋会破坏匿名性。
但该协议也有两个缺陷:
- 验证机构可以拒绝服务。由于投票者必须实名提交验证,验证机构可以拒绝某些人的投票(假设验证机构被共和党所控制,它可以拒绝民主党人的验证申请,比如假装没收到申请等等)。
- 验证机构可以伪造不存在的用户,甚至伪造投票者的投票。
在清华大学的一篇论文一种安全、实用的电子投票系统中,作者试图通过设置多个验证中心,投票者只需要经过其中若干个验证中心验证便算作有效投票。但这只是缓解,而不是完全解决上面的缺陷。
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: