原作者:朱招聘
原编译:林恩,马斯比特
所有的投票系统,不管它们的运作多么有意义,都依赖于完整性和透明度。从表面上看,这使得区块链成为构建这些系统的理想平台——事实上,许多分散的组织已经接受了未经许可的投票来表达他们的集体意图,通常是在挥舞大量财富或调整关键协议参数时。但是,在线投票也有缺点,隐私性没有被发掘和开发,这对于Web3投票系统是不利的——在目前使用的大多数在线投票协议中,投票和投票结果是完全公开的。如果没有隐私,投票结果很容易与选民的激励错位,可能导致不民主的结果。
这也是为什么我们要发布蝉:一个新的开源的Solidity库,它利用时间锁谜题和零知识证明来实现私人在线投票。与现有系统相比,蝉具有新颖的隐私属性,最小化了信任假设,并且足够高效地在以太坊的主网络上使用。
在本文中,我们调查了投票隐私的情况,并提供了关于蝉如何工作的高级描述(正式证明即将推出)。我们也鼓励开发者去看看GitHub repository——蝉可以通过多种方式进行调整和扩展,以支持不同的投票方案和功能,我们希望与社区合作探索这些可能性。
在任何投票系统(在线或其他)中,都有许多不同级别的隐私需要考虑。个人选票的公开、操作中的计票、选民的身份都会以不同的方式影响选民的积极性。什么隐私属性是必要的取决于投票背景。一些经常出现在密码学和社会科学文献中的:
选票的隐私性:秘密选票,也称为“澳大利亚选票”,是为现实世界的投票系统开发的,作为维护个体选民偏好和减少贿赂和胁迫的一种方式(在链设置中,我们可能需要比选票的隐私性更强的属性——见下面的“无收据”)。投票的私密性还可以减少社会预期的偏差——对于某人来说,根据他人对其选择的看法进行投票的压力较小。
正在计票中的隐私:许多投票系统在选民仍在投票时隐藏正在进行的计票,或者每个选项已投了多少票,以免影响投票率和选民激励。我们在现实世界中看到了这一点;例如,晚投票的美国参议员比早投票的参议员更有可能赞同他们的政党。链条上:在令牌加权投票中,鲸鱼可以通过让对手保持领先来欺骗对手,让他们产生一种虚假的安全感(有些人可能懒得投票,假设他们无论如何都会赢),然后在最后一分钟投出自己的票,以影响结果。
投票者的匿名性:在许多现实世界的投票系统中,你的投票是不公开的,但你投票的事实往往是公开的。这对于防止选民欺诈很重要,因为公布选民记录可以让人们检查其他人是否以他们的名义投票。但是,在链中,我们可以通过使用加密原语来防止投票者欺诈和保持匿名性——例如,通过信号量,你可以在零知识的情况下证明你是一个合格的尚未投票的投票者。
无收据:个人选民提供自己投票的“收据”,以证明自己是如何投票给第三方的,否则可能导致票卖。一个密切相关但更强大的属性是抵抗胁迫,它可以阻止人们以某种方式胁迫选民投票。这些属性在去中心化的环境下特别有吸引力,因为投票权可以通过智能合约市场实现流动性。不幸的是,它们也很难实现——事实上,Juels和其他人指出,在没有可信硬件的未经许可的环境中,这是不可能的。
蝉关注的是正在进行的计票的私密性,但是(我们将在后面讨论)它可以与零知识组成员的认证相结合,以实现投票者的匿名性和投票的私密性。
蝉:从同态时间锁问题看计票的私密性为了实现进行中计票的私密性,蝉利用了之前链中从未使用过的密码原语(据我们所知)。
首先,时间锁难题(Rivest,Shamir,Wagner,1996)是一个加密难题,它封装了一个秘密,只有在一些预定的时间之后才能被揭示——更具体地说,这个难题可以通过重复一些非并行计算来解密。时间锁定谜题对于在投票的上下文中实现运行统计的私密性非常有用:用户可以将他们的投票作为时间锁定谜题提交,这样在投票过程中是保密的,但在投票后可以泄露。与大多数其他私人投票结构不同,这使得在不依赖统计机构(如选举工作人员计算纸质或数字选票)、阈值加密(几个可信方必须合作解密一条消息)或任何其他可信方的情况下运行统计隐私成为可能:任何人都可以解决一个时间锁难题,以确保投票后的结果被披露。
其次,一个同构的时间锁谜题(Malavolta Thyagarajan,2019)有一个额外的属性,就是如果你知道密钥,解密谜题或者使用后门,就有可能计算出加密值。特别地,线性同态时间锁难题允许我们将难题组合在一起以产生封装原始难题的秘密值总和的新难题。
正如作者所指出的,线性同态时间锁谜题是一种特别适合于私人投票的原语:选票可以编码为谜题,它们可以同态组合得到一个对最终计票进行编码的谜题。这意味着只需要一次计算就能揭示最终结果,而不是为每次投票解决一个独特的难题。
一种新的结构:效率与权衡。为了使投票方案在链中实用,需要考虑几个问题。首先,攻击者可能试图通过投出错误编码的选票来操纵投票。例如,我们可能希望将每张选票的时间锁难题编码为一个布尔值:“1”表示支持投票的提案,“0”表示反对。一个提案的热情支持者可能会尝试编码,例如,“100”来扩大他们的有效投票权。
我们可以通过要求选民在提交选票本身的同时提交一份关于选票有效性的零知识证明来防止这种攻击。但是,零知识证明的计算成本非常高——为了尽可能降低投票者参与的成本,证明应该是(1)有效可计算的客户端和(2)有效可验证的链式证明。
为了使证明尽可能高效,我们使用定制的sigma协议——针对特定代数关系设计的零知识证明,而不是通用的证明系统。这使得证明者的时间非常快:在现成的笔记本电脑上用Python生成一个投票有效性证书需要14ms。
尽管sigma协议的验证者在概念上很简单,但它需要相当数量的模指数。Malavolta和Thyagarajan的线性同态方案使用Paillier加密,因此这些指数将使用一些RSA模n作为n ^ 2来执行。对于n的合理大小,在大多数EVM链上求幂是非常昂贵的(数百万气体)。为了降低成本,蝉使用了指数ElGamal——指数ElGamal仍然提供了加法同态,但是在更小的模数上工作(n而不是n ^ 2)。
使用ElGamal的一个缺点是解密计数的最后一步需要蛮力破解离散对数(请注意这是在链下完成的,并且在链上有效验证)。所以只适用于预期最终票数相当少的情况(比如少于2 ^ 32,或者430万票左右)。在基于Paillier的原始方案中,计数无论大小都可以被有效地解密。
选择RSA模数n也涉及权衡。我们的实现使用1024位模数来提高气体效率。尽管这比公开分解的最大RSA模数(829位)高得多,但它低于RSA加密或签名通常推荐的2048位。但是,我们的应用不需要长期的安全性:一旦选举结束,如果你将来考虑N,就没有风险。假设计票和投票在时间锁到期后公开,那么使用相对较小的模数是合理的。(如果分解算法改进了,这也可以方便以后更新。)
匿名性和投票者资格如上所述,蝉提供了运行计票的隐私性——时间锁定的难题属性保持了投票期间计票的隐私性。但是,每张个人选票也是一个时间锁定问题,在相同的公共参数下加密。这意味着正如计数可以被解密(通过执行必要的计算),每个投票也可以被解密。换句话说,蝉只保证投票过程中选票的私密性——如果好奇的观察者想要解密特定投票者的选票,他们可以这样做。解密任何一张个人选票的代价都和解密最终的计票结果一样高,所以天真地用O(n)来完全解密n个投票者的选票。但是所有这些投票都是可以并行解密的(假设有足够多的机器),解密最终的计票结果也需要同样的时间。
对于一些投票来说,这可能是不可取的。虽然我们对临时计票的私密性感到满意,但我们可能希望无限期地投票。为了实现这一点,可以将蝉与匿名投票人资格协议相结合,通过零知识群成员证书实例化。这样,即使选票被解密,也只能揭示有人以这种方式投票——从计票中我们已经知道了这一点。
在我们的知识库中,我们包含了一个使用信号量的投票者匿名的样本契约。但是,请注意,蝉契约本身并没有对如何确定或执行选民资格做出任何假设。特别是,您可以用Semacaulk或ZK州证书(正如这里和这里所建议的)来代替信号量。
统计机构我们设计蝉的首要任务之一是避免对统计机构的需求:许多私人投票结构需要一个半可信的统计机构(或授权委员会通过安全的多方计算进行协调)来接收和汇总投票。在区块链环境中,这意味着这些解决方案不能仅通过智能合同来实现,还需要一些人工干预和信任。
在大多数结构中,计票机构在完整性上不受信任(他们无法操纵计票),但在活动性上受信任——如果他们离线,他们就无法计算最终结果,从而无限期推迟投票结果。在一些结构中,他们也被信任维护隐私——也就是说,他们知道每个人如何投票,但期望在不透露这些信息的情况下宣布投票结果。
尽管统计权威在许多现实场景中是合理的(也是必要的)假设,但在区块链环境中并不理想。我们的目标是最小化信任,确保抵制审查。
蝉探索了在线投票隐私领域的众多方向之一,并补充了其他团队正在进行的大部分研究。如上所述,蝉是密切相关的匿名组成员技术,如信号量,ZK存储证书和速度限制无效。蝉还可以集成名词漩涡团队提出的最优性证明检查器,减少投票者的气体负担。
也有机会调整蝉,以支持不同的投票方案(如令牌加权投票和二次投票)——更复杂的方案可能对以太网主网络来说过于昂贵,但它们可能在L2上是实用的。考虑到这一点,我们欢迎你的贡献,分歧和建议,蝉下一步去哪里。
鸣谢:蝉是与约瑟夫博诺共同开发的。感谢Andrew Hall提供投票隐私历史背景的背景资料。也感谢Robert Hackett对本文的反馈。特别感谢斯蒂芬妮·津恩的编辑。
本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。
温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信(j7hr0a@163.com),我们会及时处理和回复。
原文地址"a16z:Cicada如何利用时间锁谜题和ZK证明实现链上投票":http://www.guoyinggangguan.com/qkl/146667.html。
微信扫描二维码关注官方微信
▲长按图片识别二维码