来源 |vitalik.ca
作者 | Vitalik Buterin
特别鸣谢 Karl Floersch、Albert Ni、Mr Silly 以及其他人的反馈与讨论
投票作为一个程序对过程正义有非常高的需求。投票的结果必须是正确的,且这必须由一个透明的过程来保证,这样每个人才信服这个结果是正确的。干扰任何人投票或阻止别人的投票被计为有效票这样的行为都不应该发生。
区块链作为一种技术本身就是旨在给程序正义提供保障的。如果一个过程在区块链上运行,区块链可以确保该过程会根据预先商定的代码运行,并提供正确的输出。没有人可以阻止其执行,没有人可以篡改其执行,没有人可以审查或阻止任何用户的输入被处理。
因此,乍一看,区块链提供的正是投票需要的。曾经持有这一想法的远不止我一个;很多主要潜在用户都表现出相同的看法。但其实,有些人持有截然相反的观点……
尽管看上去投票的需求与区块链提供的技术优势可以完美匹配,但我们经常看到一些吓人的文章是反对两者结合的。这样的文章不是个例,《科学美国人》有一篇反对区块链投票的文章,CNet 和 ArsTechnica 各有一篇反对文章。还有一些不是普通技术记者的反对文章:Bruce Schneier 反对区块链投票,MIT 的研究院写了一整篇论文论证这是一个坏主意。所以,到底是怎么回事?
概要
对以太坊投票协议的最常见的两点批评:
区块链不是适合选举的软件工具。它们提供的信任属性不符合投票所需的特性,其他提供不同信息流和信任属性的软件更好。
总的来说,无法信任任何软件来进行选举,不管是什么软件。无法检测的软件、硬件漏洞带来的风险都太高,无论平台是如何组织的。
本文将依次讨论这些观点 (说是\\\”反驳”的话,语气就太重了,但我对这两种观点的反对意见绝对多于赞同)。首先,我将讨论现在尝试使用区块链进行投票的安全问题,以及为什么正确的解决方案不是弃用区块链,而是结合其他加密技术。第二,我将回答关于软件(和硬件)能否被信任的忧虑。我的回答是:计算机安全实际上取得不错的进展,我们可以继续在这个趋势上努力。
从长远来看,永久地坚持纸质投票将是我们使投票变得更好的巨大障碍。N 年一次投票是 250 年前就发明的民主形式了,如果投票可以变得方便和简单地多的话,我们可以更经常地进行投票,这样我们可以拥有更好的民主。
毋庸讳言,这整篇文章的前提是拥有好的区块链扩容技术(例如,分片)。当然,如果区块链无法扩容,这些都不可能发生。但目前,这项技术的开发进展地很快,没有理由相信它不会发生。
不好的区块链投票协议
区块链投票协议经常受攻击。两年前,一家名为 Voatz 区块链投票技术公司风行一时,很多人都对它很感兴趣。但是去年,一些 MIT 研究员发现了他们平台一串严重安全漏洞。同时,在莫斯科,一个准备用于即将到来的选举的区块链投票系统被攻击了,幸运的是,攻击发生在选举的一个月前。
这些攻击都非常严重。以下是分析 Voatz 的研究人员揭露的攻击能力表:
这本身并不是反对使用区块链投票的论据,而是说明区块链投票软件应该被更审慎地设计,且应该慢慢扩展,且随着时间扩大规模。
隐私与抗胁迫
但是即使是技术上不是经常出问题的区块链投票协议仍然是糟糕的。要理解为什么,我们需要深入探究区块链提供了具体哪些安全属性,以及投票需要哪些特定的安全特性—— 当我们了解了,我们就会看到其中不匹配的地方。
区块链提供了两个关键属性:正确的执行和抗审查。正确的执行只意味着区块链接受来自用户的输入(“事务”),按照一些预先订立的规则正确地处理它们,然后返回正确的输出 (或以正确的方式调整区块链的“状态”)。抗审查也很容易理解:任何用户想要发送一个事务,且愿意支付足够高的交易费的话,就可以发送该事务并期望看到它快速被打包上链。
这两个属性对投票来说都非常重要:你想投票的输出实际上是计算每个候选人的票数并选择得票最多的候选人的结果,而且你肯定希望任何有资格投票的人都能投票,即使是一些强大的行为者试图阻止他们。但是,投票还需要一些至关重要的属性,这些是区块链不提供的:
隐私:你不应该知道某些人投给了哪个候选人,甚至不知道他们是否投了票。
抗胁迫:你不应该向其他人证明你是如何投票的,尽管你想这样做
第一个要求的必要性是显而易见的:你希望人们根据他们的个人感受来投票,而不是身边的人、他们的雇佣者、警察或街上随机的暴徒对他们选择的感受。第二个要求是需要防止卖票:如果你可以证明你是如何投票的,卖票就会变得非常容易。投票的可证明性也会促成各种形式的胁迫,即胁迫者要求看到某种投票给他们偏向的候选人的证明。大多数人,甚至是那些意识到第一个要求的人,都不会想到第二个要求。但是第二个要求也是必须的,但达到这个要求在技术上也不容易。更不用说,人们看到的一般的“区块链投票系统”根本没有尝试提供第二个属性,并且经常在提供第一种属性上就是失败的。
非区块链的、安全的电子投票
社会机制的加密安全执行概念不是有区块链极客发明的,且在我们之前已经存在了。在区块链空间以外,密码学家研究安全电子投票问题已经有 20 年的传统了,好消息是他们已经有解决方案了。在过去 20 年,有一篇被多次引用的重要论文——“《抗胁迫的电子选举》 (Coercion-Resistant Electronic Elections)\\\”,由 Juel、Catalano 和 Jakobsson 于 2002 发布的:
从那时起,这个概念有很多迭代;Civitas 是一个突出的例子,尽管还有很多其他例子。这些协议全都使用一套相似的核心技术。有一个商定的”统计员“集,且有一个信任假定大多数统计员都是诚实的。每个统计员都有内部秘密共享的密钥的部分,而对应的公钥是公布出来的。投票者把加密了的投票公布给统计员的公钥,统计员使用一个安全的多方计算 (multi-party computation, MPC) 协议解密并验证投票,并把结果计算出来。记录结果的计算是”在 MPC 里“进行的:统计员永远不会知道他们的私钥,他们只能通过查看最终结果了解情况,他们在计算时是无法知道每个人的具体投票的。
加密投票提供了隐私,并在上面添加了一些额外的基础设施,比如加入混合网 (mix-nets) 使得隐私更强大。为了提供抗胁迫性,使用了两种技术中的一种。一个选项是在注册阶段 (统计员收集每个注册投票者的阶段),投票者生成或收到一个秘密密钥。对应的公钥在统计员间是秘密共享的,统计员的 MPC 只计算用秘密签名的投票。投票者没有办法向第三方证明他们的密钥是什么,因此如果他们受贿或被胁迫,他们只需要展示和投用错误密钥签名的票。或者,选民可以有能力发送一条信息修改它们的密钥。选民没有办法向第三方证明他们没有发送这样的信息,从而导致相同的结果。
第二选项是一种技术,即投票者可以进行多次投票,第二次投票覆盖第一次投票。如果投票者被贿赂或胁迫,他们可以给贿赂者/胁迫者偏向的参选者投票,但在第二次的投票可以覆盖第一次投票。
赋予投票者在下一次投票推翻之前投票的能力,是2015年这个协议里关键的抗胁迫机制。
现在,我们开始讨论所有协议间的重要区别。它们都依赖于一个外在的元件来完成它们的安全性保障 ——bulletin board(公告栏,也就是上图数据里的\\\”BB\\\”)。公告栏是任何投票者发送一条信息过去都保证:(1) 任何人都可以读到公告栏的信息,(ii) 任何人发送到公告栏的信息都会被接受。大多数大家可以找到的抗胁迫投票论文都是对公告栏的存在一笔带过 (例如,”正如常见的电子投票方案,我们假设有一个可公共访问的、仅能添加的公告栏“),但很少论文谈到公告栏实际上是如何被实现的。在这里,读者大概可以看出我想表达的是什么:实现公告栏最安全的方法就是使用现有的区块链!
用区块链提供电子投票的安全性
当然,在区块链之前已经有大量制作公告栏的尝试。2008年这篇论文就是这样的尝试;它的信任模型是一个符合标准要求的”k /n 个服务器必须是诚实的“((k = n/2是常见的)。2021 年这篇文献综述涵盖了区块链以前制作公告栏的尝试,以及对由区块链来实现进行了探索;所回顾的区块链前的解决方案都与依赖 k/n 信任模型相似。
区块链也是一个 k/n 的信任模型;它要求至少一半的矿工或者权益证明的验证者遵循协议,如果该假设失败,往往会导致”51%攻击“。所以为什么区块链要优于一个特别设计的公告栏?答案是:设置一个真正可信的 k/n 系统是很难的,区块链是解决了这个问题的唯一系统,而且是大规模地。假设一些政府宣布它们要造一个投票系统,并提供一份 15 个当地组织和大学的清单,它们将运行一个有特殊用途的公告栏。作为一名旁观者,你怎么知道政府不是按照他们的意愿从 1000 个名单里选出 15 个机构,以秘密与情报机构串通?
另一方面,公共区块链具有每个人都可以参与的、无须许可的经济学共识机制(工作量证明或权益证明),它们有一个现有的、多元的、高激励的基础设施,例如区块浏览器、交易所、和其他观测节点,以不断地实时验证没有坏情况发生。
这些更复杂的投票系统不只是使用区块链;他们依赖像零知识证明这样的加密技术以确保正确性,依赖 MPC 保证抗胁迫。因此,它们避免了那些简单系统的弱点,即仅仅”把票直接投在区块链上“,而忽略了带来的隐私和抗胁迫问题。但是,区块链公告栏仍然是整个设计安全模型的关键部分:如果委员会被破坏了,但区块链没有,抗胁迫性就会丢失,但所有其他围绕投票过程的保障还在。
在以太坊上的抗胁迫区块链投票
以太坊生态现在正在实验一个名为 MACI (Minimal Anti-Collusion Infrastructure,最小反合谋基础设施)的系统,它结合了区块链、ZK-SNARKs 和一个确保抗胁迫的单一中央角色 (但没有权力损害抗胁迫性以外的任何属性)。MACI 在技术上并不十分困难。用户通过用他们的私钥签名信息来参与,把签署的信息加密到一个中央服务器发布的公钥,然后把加密了的签名信息发布到区块链。服务器从区块链下载信息,解密,处理,用一个 ZK-SNARK 把结果输出,以确保它们的计算是正确的。
用户不能证明他们是如何参与的,因为他们有能力发送一个“改密钥”信息去骗任何想要审核他们的人:他们可以首先发送一条改密钥信息把他们的密钥从 A 改为 B,然后发送一条用 A 签名的“假信息”。服务器会拒绝这条信息,但没有其他人可以通过任何途径知道修改密钥的信息有没有被发送过。这里需要对服务器有信任要求,虽然只是为了保护隐私和抗胁迫;服务器不能发布错误的结果,无论是因为错误计算还是信息审查。从长远来看,多方计算可以在一定程度上对服务器进行去中心化,加强隐私和抗胁迫的保证。
在 clr.fund 上有一个这个方案的工作演示,被用于四维资金。使用以太坊区块链来确保投票的抗审查性,保证了比依靠委员会更强的抗审查性。
上文回顾
投票过程有四个重要的安全要求,只有当这些要求都得到满足才能保证投票的安全:正确性、抗审查、隐私和抗胁迫。
区块链擅长前两项,不擅长后两项。
在区块链上对投票加密可以添加隐私性。零知识证明可以提供正确性,尽管观察者无法直接合计投票,因为它们都加密了。
多方如果与用户可以与系统多次交互的机制相结合,计算解密和检查投票可以提供抗审查性;要么第一次交互使第二次无效,要么反之。
使用区块链可以确保你有非常高安全系数的抗审查能力,而且即使委员会串通打破抗胁迫性,你仍然可以保持抗审查。引入区块链可以大大增强系统的安全性。
但技术是可以信任的吗?
但现在我们回到对任何类型的电子投票的第二点、更深层次的批评:技术本身太不安全、不值得信任。
最近 MIT 这篇批评区块链投票的论文提供了这个非常有用的表格,它认为任何非纸质形式的投票从根本上来说都太难确保可信任:
作者关注的关键属性是“软件独立性”,他们将其定义为“系统软件中未被发现的变化或错误不能导致选举结果中出现不可察觉的变化”。基本上,代码中的一个错误不应该能够意外地使 Prezzy McPresidentface 成为国家的新总统 (或者,更现实的是,一个故意嵌入的漏洞不应该能够把某候选人的份额从 42% 增加到 52%)。
但还有其他方法可以用来处理漏洞。例如,任何基于区块链的投票系统,如果使用可公开验证的零知识证明,都可以独立被验证。有人可以编写自己的证明验证器,并自己验证Zk-SNARK。他们甚至可以写自己的软件来投票。当然,真正做到这一点的技术复杂性超出了现实 99% 的选民基础的能力范围,但如果成千上万的独立专家都有能力做到这点并验证它是否可行,在实践上能做到这点是已经非常不错了。
但是,对 MIT 的作者来说,这还不够:
因此,在可预见的未来,任何只有电子的系统,即使是端对端可验证的,似乎耶不适合用于政治选举。美国投票基金会注意到了 E2E-V 方法在提高在线投票安全性方面的前景,但发布了一篇详细的报告,建议避免将器用于线上投票,除非该技术发展地更加成熟,并在投票站投票中得到充分测试 [38]。
其他人提议对这些想法进行延伸。例如,Juels 和其他人的提案[55]强调使用加密技术来提供多种形式的“抗胁迫”。Clarkson 等人的 Civitas 提案实现额外的抗胁迫机制,lovino 等人进一步在他们的 Selene 系统里整合和阐述了这些机制。在我们看来,这些提案都非常创新,但不现实:它们相当复杂,且最重要的是,它们的安全性依赖于选民的设备没有受损且如预期版运作,这是一个不现实的预设。
作者关注的问题不是投票系统的硬件是否安全;该方面的风险实际上可以用零知识证明来化解。相反,作者关注的是另一个安全问题:大体上,用户的设备能达到安全水平吗?
鉴于消费者设备多年以来遭遇到的各种漏洞和攻击,人们又理由给出否定的答案。引用我自己 2013 关于比特币钱包安全的文章:
昨晚太平洋夏令时晚上大概 9 点,我点击了一个链接前往 CoinChat[.]freetzi[.]com,并提示我运行java。我照做 (觉得这是一个合法的聊天室),然后什么都没有发生。我关掉窗口,什么也没想。14 分钟后,我打开我的 bitcoin-qt 钱包,看到一笔我没有同意的交易发送到钱包 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC,几乎把我整个钱包的余额转走……
以及:
在 2011 年六月,Bitcointalk 成员“allinvain\\\” 在一个未知的入侵者以某种方式直接访问了 ta 的电脑后,丢失了 25,000 个 BTC (当时价值500,000 美元)。攻击者能够访问 allinvain 的 wallet.dat 文档,并快速把钱包里的钱都转走——不是从 allinvain 的电脑发送交易,就只是上传 wallet.dat 文档然后在 ta 自己的电脑里把钱转走。
但这些灾难掩盖了一个更大的事实:在过去 20 年里,计算机安全实际上一直在缓慢而稳定地改进。攻击现在更难发生了,经常需要攻击者在多个子系统里找到漏洞,而不是在一大段复杂的代码中找到一个漏洞。备受瞩目的事件比以往任何时候都大型,但这并不表明所有事情都变得没那么安全了;相反,这只是我们越来越依赖互联网的一个迹象。
可信的硬件是近来取得非常重要的进步领域。一些新的”区块链手机“(例如 HTC 的这款)在这项技术上走得很远,并在可信硬件芯片上放置了一个专注安全性的极简操作系统,允许对安全要求高的应用程序 (例如,加密货币钱包)与其他应用分开。三星已经开始制作使用相似技术的手机。即使从未宣传作为”区块链设备“的产品 (例如,苹果手机)也频繁推出某些可信硬件。加密货币硬件钱包实际上是同样的东西,除了可信硬件组件物理上是在计算机以外,而不是在里面。可信硬件在安全性领域,特别是区块链社区是当之无愧的坏口碑之王,因为它一次次地出问题。而且事实上,你肯定不会想用它来替代你的安全保护设备。但就事论事来说,它的确是一个巨大的进步。
最后,像加密货币钱包和投票系统这样的单一应用程序,其实比整个消费者操作系统要简单得多,且有更少空间出错——即使你必须纳入对二次方投票、排序、二次方排序等 Glen Weyl 在2040 年发明的下一代其他什么可怕东西的支持。像可信硬件这样的工具的好处是它们能够将简单的东西从复杂的、可能会出错的东西隔离开来,而这些工具正取得一些成功。
因此风险会随时间减少,但有什么裨益呢?
安全技术上的这些进步指明,未来消费者硬件可能比现在更值得信赖。过去几年在这个领域做的投资很可能在接下来的十年不断得到回报,且我们可以预期会有进一步的重要提升。但投票电子化有哪些好处使得探索这整个领域是合理的呢?
我的答案很简单:投票会变得高效得多,使得投票可以更经常地进行。目前,对组织 (政府或企业)的正式民主输入倾向于限制在每 1-6 年进行一次的投票。这实际上意味着,每个选民每年只向系统提供不到一点点的投入。也许在很大程度上是由于这个原因,我们社会的去中心化决策被严重地走向两个极端:纯民主和纯市场。民主要么是非常低效的 (企业和政府投票),要么是非常不安全的 (社交媒体上的点赞或转发)。市场在技术上则高效得多,且比社交媒体安全得多,但它们的基本经济逻辑使其不适合许多种类的决策问题,特别是与公共物品有关的问题。
是的,我知道这又是一个三角形,我真的非常抱歉不得不使用它。但是,请容忍我这一次…… (好吧,我确信我将来会做出更多的三角形;忍忍吧)
如果我们能够建立更多介于民主与市场之间的制度,从前者的平等主义、后者的技术效率、以及光谱两级间的经济特性间获益。二次方募资是一个极佳的例子。流动式民主是又一佳例。即使我们不再引入复杂的新委托机制或二次方计算方法,我们也可以通过在更小范围内更频繁地进行投票,以适应每个选民可接收到的信息。但所有这些想法的挑战在于,为了一个可持久的、支持任何水平的民主的方案,你需要一些抵抗女巫攻击和化解买票问题的形式:这正是这些复杂的 ZK-SNARK+MPC+区块链投票方案试图解决的问题。
加密世界对解决问题有帮助
加密世界的有一个被低估的好处,就是它是一个极好的”虚拟特别经济区“,可以在一个对抗性很强的环境里测试一些经济和加密理念。无论你构建和发布什么,一旦它所控制的经济力量达到一定规模,一大批不同的、有时是利他的、有时是利益驱动的人、有时是恶意的行动者(大多数是完全匿名的)会进入这个系统,并尝试把该经济力量扭转为服务他们自己的各种目的。
攻击者的激励很高:如果攻击者从你的加密经济工具里投了 100 美元,他们往往可以得到完整的 100 美元的奖励,而且可以逃脱。但是防御者的奖励也非常高:如果你开发一个工具可以帮助用户不会丢失他们的资金,你可以(至少有时)把它转化为一个工具,赚取数百万美元。加密世界是一个终极训练场:如果你构造的东西可以在这个环境里生存下来,且发展成规模,它很可能也能在更大的世界里生存。
这适用于二次方募资、多签和社交恢复式钱包,且它也使用与投票系统。区块链空间已经帮助推动了以下重要安全技术的崛起:
硬件钱包
高效多功能零知识证明
形式验证工具
有可信硬件芯片的”区块链手机“
抗女巫攻击机制,比如人性证明 ( Proof of Humanity)
在所有这些案例里,该技术的某些版本在区块链出现之前就已经存在。但难以否认的是,区块链在推动这些成果方面已经有非常重要的影响,而这个领域固有的激励在为技术的开发到落地提供充足资金方面扮演一个非常重要的角色。
结论
在短期内,任何形式的区块链投票肯定只能继续限制在小规模实验里,如论是用于主流应用的小测试还是用于区块链本身。当然,目前还是计算机的安全性还没有好所有事务在依赖于其上的水平。但它在不断完善,如果我的判断错的了,安全性无法提升,那么不只是区块链投票,连整个加密货币世界都将难以成功。因此,有非常巨大的动力持续完善这项技术。
我们都应该继续关注提高安全性的技术和不同地方正在进行的努力,并慢慢地在非常重要的社会进程中更自如地使用技术。技术已经是我们金融市场的关键,而大部分经济的加密化 (或甚至只是取代黄金) 将把更大一部分的经济放到我们的加密算法和运行它们的硬件手里。我们应该认真关注并支持这个进程,并渐渐利用其优势,把我们的治理技术带进 21 世纪。
原文链接:https://vitalik.ca/general/2021/05/25/voting2.html
ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ETH中文站。若需长期转载,请联系[email protected]进行授权。