Cicada 是一个开源的 Solidity 库,利用时间锁谜题和零知识证明实现链上隐私投票。它具有新颖的隐私属性,最小化信任假设,并且足够高效,可以在以太坊主网上使用。文章还探讨了链上投票隐私的不同层面,并讨论了 Cicada 如何与其他技术结合以实现更高的隐私。
所有的投票系统都依赖于诚信和透明度,才能以任何有意义的方式运作。从表面上看,这使得区块链成为构建这些系统的理想平台——事实上,许多去中心化组织已经接受了无需许可的投票来表达集体意愿,通常是在行使大量资金或调整关键协议参数的背景下。但链上投票也有缺点,并且隐私仍有待探索,这不利于 web3 投票系统——在当今使用的大多数链上投票协议中,选票和投票总数都是完全公开的。如果没有隐私,投票结果容易受到操纵和选民激励错位的影响,可能导致不民主的结果。
这就是我们发布 Cicada 的原因:这是一个新的开源 Solidity 库,它利用时锁谜题和零知识证明进行私有链上投票。与现有系统相比,Cicada 具有新颖的隐私属性,最大限度地减少了信任假设,并且效率足以在以太坊主网上使用。
在这篇文章中,我们调查了投票隐私的现状,并提供了 Cicada 工作原理的高级描述(正式证明即将发布)。我们还鼓励开发人员查看 GitHub 存储库——Cicada 可以通过多种方式进行调整和扩展,以支持不同的投票方案和功能,我们希望与社区合作探索这些可能性。
在任何投票系统(链上或其他)中,都有许多不同的隐私层需要考虑。披露个人选票、正在进行的计票和选民身份都会以不同的方式影响选民的动机。哪些隐私属性是必要的取决于投票的背景。密码学和社会科学文献中经常出现的一些:
选票隐私:秘密投票,也称为“澳大利亚选票”,是为现实世界的投票系统开发的,旨在保护个人选民的偏好,并减轻贿赂和胁迫(在链上环境中,我们可能需要比选票隐私更强的属性——参见下面的“receipt-freeness”)。选票隐私还可以减轻社会期望偏差——人们根据他人对其选择的看法进行投票的压力较小。
正在进行的计票隐私:许多投票系统在选民仍在投票时隐藏正在进行的计票,或每个选项已投的票数,以避免影响投票率和选民的动机。我们已经在现实世界中看到了这一点;例如,投票较晚的美国参议员比投票较早的参议员更可能与其政党保持一致。在链上:在代币加权投票中,巨鲸可以通过让对手保持领先来让他们产生虚假的安全感(有些人可能懒得投票,认为无论如何他们都会赢),然后在最后一分钟投票以改变结果。
选民匿名性:在许多现实世界的投票系统中,你的投票是私密的,但你投票的事实通常是公开的。作为防止选民欺诈的保障措施,这可能很重要,因为公布谁投票的记录可以让人们检查是否有人以他们的名义投票。然而,在链上,我们可以使用密码学原语来防止选民欺诈,同时保持匿名性——例如,使用 Semaphore,你可以用零知识证明你是有资格投票且尚未投票的选民。
Receipt-freeness:个别选民提供其选票的“凭证”,以向第三方证明他们是如何投票的,否则可能会导致卖票。一个密切相关但更强的属性是 coercion-resistance,它可以防止有人胁迫选民以某种方式投票。这些属性在去中心化的环境中尤其有吸引力,在去中心化的环境中,投票权可以通过智能合约市场实现流动性。不幸的是,它们也很难实现——事实上,Juels 等人声明在无需许可的环境中这是不可能的,除非使用可信硬件。
Cicada 专注于正在进行的计票隐私,但(正如我们稍后讨论的)它可以与零知识群组成员证明相结合,以获得选民匿名性和选票隐私。
为了实现正在进行的计票隐私,Cicada 借鉴了(据我们所知)以前从未在链上使用过的密码学原语。
首先,时锁谜题 (Rivest, Shamir, Wagner, 1996) 是一个密码学谜题,它封装了一个秘密,该秘密只能在经过预定时间后才能揭示——更具体地说,可以通过重复执行一些不可并行化的计算来解密该谜题。时锁谜题在投票的背景下对于实现正在进行的计票隐私非常有用:用户可以将他们的选票作为时锁谜题提交,以便在投票期间对他们保密,但可以在之后揭示。与大多数其他私有投票结构不同,这使得可以在不依赖计票机构(如计算纸质或数字选票的选举工作人员)、阈值加密(其中几个受信任的各方必须合作才能解密消息)或任何其他受信任的各方的情况下实现正在进行的计票隐私:任何人都可以解开时锁谜题,以确保在投票后揭示结果。
其次,同态时锁谜题 (Malavolta Thyagarajan, 2019) 具有额外的属性,即在知道密钥、解密谜题或使用后门的情况下,可以对加密值进行一些计算。特别是,线性同态时锁谜题允许我们将谜题组合在一起,从而产生一个新的谜题,该谜题封装了原始谜题的秘密值的总和。
正如论文的作者所指出的那样,线性同态时锁谜题是私人投票的特别合适的原语:选票可以编码为谜题,并且可以同态地组合它们以获得编码最终计数的谜题。这意味着只需要一次计算即可揭示最终计数,而不是为每个选票解开一个独特的谜题。
对于在链上实际可行的投票方案,还需要考虑几个方面。首先,攻击者可能会尝试通过投出不正确编码的选票来操纵投票。例如,我们可能期望每个选票的时锁谜题都编码一个布尔值:“1”表示支持投票的提案,“0”表示反对它。该提案的热心支持者可能会尝试编码例如“100”来放大其有效的投票权。
我们可以通过让选民在提交选票的同时提交选票有效性的零知识证明来防止此类攻击。然而,零知识证明在计算上可能很昂贵——为了尽可能降低选民参与的成本,证明应该是 (1) 在客户端高效计算,以及 (2) 在链上高效验证。
为了使证明尽可能高效,我们使用了定制的 sigma protocol——一种为特定代数关系设计的零知识证明,而不是通用的证明系统。这使得证明者的速度非常快:在现成的笔记本电脑上,用 Python 生成选票有效性证明需要 14 毫秒。
虽然此 sigma 协议的验证器在概念上很简单,但它需要一些大的模幂运算。Malavolta 和 Thyagarajan 的线性同态方案使用 Paillier encryption,因此这些幂运算将对某个 RSA 模数 N 执行模 N^2 运算。对于合理大小的 N,幂运算在大多数 EVM 链上都非常昂贵(数百万 gas)。为了降低此成本,Cicada 改为使用 exponential ElGamal——指数 ElGamal 仍然提供加性同态,但在小得多的模数上工作(N 而不是 N^2)。
使用 ElGamal 的一个缺点是,解密计数的最后一步需要暴力破解离散对数(请注意,这是在链下完成的,并在链上高效验证)。因此,它只适用于预期的最终计数相当小的情况(例如,小于 2^32,或大约 430 万张选票)。在原始的基于 Paillier 的方案中,无论计数的大小如何,都可以有效地解密计数。
选择 RSA 模数 N 也涉及权衡。我们的实现使用 1024 位模数来提高 gas 效率。虽然这远高于有史以来公开分解的最大 RSA 模数(829 位),但它低于通常建议的与 RSA 加密或签名一起使用的 2048 位大小。但是,我们的应用程序不需要长期安全性:一旦选举结束,如果将来分解 N,则不存在风险。假设计数和选票在时锁到期后公开,因此使用相对较小的模数是合理的。(如果分解算法改进,这也可以在将来轻松更新。)
如上所述,Cicada 提供正在进行的计票隐私——时锁谜题属性在投票期间保持计票的私密性。但是,每个单独的选票也是一个时锁谜题,使用相同的公共参数加密。这意味着,正如可以解密计数(通过执行必要的计算)一样,也可以解密每个单独的选票。换句话说,Cicada 只保证在投票期间的选票隐私——如果好奇的观察者希望解密特定选民的选票,他们可以这样做。解密任何单独的选票与解密最终计数一样昂贵,因此天真地完全解密具有 n 个选民的投票需要 O( n ) 个工作。但是所有这些选票都可以并行解密(假设有足够的机器),花费的时间与解密最终计数花费的时间相同。
对于某些投票,这可能不是理想的。虽然我们对临时正在进行的计票隐私感到满意,但我们可能需要无限期的选票隐私。为了实现这一点,我们可以将 Cicada 与匿名选民资格协议相结合,该协议由零知识群组成员证明实例化。这样,即使选票被解密,它也只会显示某人以这种方式投票——我们已经从计数中知道了这一点。
在我们的存储库中,我们包含一个示例合约,该合约使用 Semaphore 进行选民匿名。但是请注意,Cicada 合约本身对如何确定或执行选民资格不做任何假设。特别是,你可以将 Semaphore 替换为例如 Semacaulk 或 ZK 状态证明(如此处 和此处 提出的)。
我们在设计 Cicada 时的首要任务之一是避免对计票机构的需求:许多私人投票结构需要半信任的计票机构(或机构委员会,通过安全的多方计算进行协调),他们接收并汇总选票。在区块链环境中,这意味着这些方案不能仅通过智能合约来执行,并且需要一些人工干预和信任。
在大多数结构中,计票机构在完整性方面不受信任(他们无法操纵投票计数),但在活跃性方面受信任——如果他们离线,则无法计算最终结果,从而无限期地停止投票结果。在某些结构中,他们也被信任以维护隐私——也就是说,他们了解每个人的投票方式,但预计会在不透露此信息的情况下发布投票结果。 尽管计票机构在许多现实世界的场景中是合理的(且必要的)假设,但它们在区块链环境中并不理想,因为我们的目标是最大限度地减少信任并确保抗审查性。 Cicada 探索了链上投票隐私领域的众多方向之一,并补充了其他团队正在进行的许多研究。如上所述,Cicada 与匿名群组成员技术(如 Semaphore、ZK 存储证明和速率限制 Nullifier)齐头并进。Cicada 还可以集成 Nouns Vortex 团队提出的 optimistic proof checker 以减轻选民的 gas 负担。 还有机会调整 Cicada 以支持不同的投票方案(例如,代币加权投票、二次投票)——更复杂的方案对于以太坊主网来说在计算上可能太昂贵,但它们在 L2 上可能是可行的。考虑到这一点,我们欢迎你对 Cicada 的贡献、fork 和建议。 致谢:Cicada 是与 Joseph Bonneau 共同开发的。感谢 Andrew Hall 提供了有关投票隐私历史背景的信息。还要感谢 Robert Hackett 对本文提供的反馈。特别感谢 Stephanie Zinn 进行编辑。 “帖子”(包括文章、播客、视频和社交媒体)中表达的观点是其中引用的个人的观点,不一定是 AH Capital Management, L.L.C.(“a16z”)或其各自附属公司的观点。a16z 是一家在美国证券交易委员会注册的投资顾问。注册为投资顾问并不意味着任何特殊的技能或培训。此处包含的某些信息来自第三方来源,包括来自 a16z 管理的基金的投资组合公司。虽然这些信息来自被认为是可靠的来源,但 a16z 并未独立验证此类信息,并且不对信息的持久准确性或其对特定情况的适用性做出任何陈述。此外,此内容可能包括第三方信息;a16z 未审查此类材料,并且不认可其中包含的任何广告内容。 此外,此材料仅供参考,在做出任何投资决策时不应依赖它。过去的表现并不代表未来的结果。投资于集合投资工具和/或数字资产包括许多本文未充分讨论的风险,包括但不限于显着的波动性、流动性、技术和监管风险。内容仅说明截至所示日期。这些材料中表达的任何预测、估计、预测、目标、前景和/或意见如有更改,恕不另行通知,并且可能与其他人表达的意见不同或相反。请参阅 https://a16z.com/disclosures/ 以获取更多重要信息。
- 原文链接: a16zcrypto.com/posts/art...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!