原文标题:《Vitalik:为何需要区块链投票?》

撰文:Vitalik Buterin,以太坊联合创始人

投票是一个非常需要过程完整性的过程。投票的结果必须是正确的,而且必须有一个透明的过程来保证这一点,这样每个人都可以相信这个结果是正确的。不应该存在成功地干涉任何人的投票意愿或阻止他们的选票被统计的可能性。

区块链是一种为过程完整性提供保证的技术。如果某个过程运行在区块链上,则能保证该过程会根据一些预先商定的代码运行,并提供正确的输出。没有人可以阻止其执行,没有人可以篡改这一执行,也没有人可以审查和阻止任何用户的输入被处理。

所以乍一看,区块链似乎恰好提供了投票所需要的东西。我不是唯一有这种想法的人;大量主要的潜在用户对此感兴趣。但事实证明,有些人对此有非常不同的意见....

区块链投票为何被低估了?

尽管投票的需求和区块链提供的技术好处似乎完美匹配,但我们经常看到反对两者结合的吓人文章。而且不仅仅是一篇文章:《科学美国人》(Scientific American,科普类杂志) 上刊登了一篇反对区块链投票的文章 [1];CNet 网站也发布了一篇这样的文章 [2];还有 ArsTechnica 网站也发布了一篇文章 [3]。而且不只是科技记者:Bruce Schneier (知名计算机安全专家) 也反对区块链投票 [4];麻省理工学院的研究人员写了一整篇论文 [5],认为这是个馊主意。那么到底发生了什么?

概述

区块链投票协议的批评者通常会提出两个关键的批评:

  1. 区块链不是用来进行选举的软件工具。区块链提供的信任属性与投票需要的属性并不匹配,具有不同信息流和信任属性的其他类型的软件工具反而会更有用。
  2. 通常不能信任软件来进行选举,不管它是什么软件。软件和硬件的 bugs 未被检测到的风险太高,无论平台是如何组织的。

本文将依次讨论这两种观点 (用「驳斥」这个词太过强烈,但我绝对不同意这两种观点)。首先,我将讨论使用区块链进行投票的现有尝试的安全问题,以及正确的解决方案不是放弃区块链,而是将其与其他加密技术结合起来。其次,我将阐述软件 (和硬件) 是否可信的问题。我的答案是:计算机安全实际上正在变得更好,我们可以努力继续这一趋势。

从长远来看,永远坚持纸质方式(来进行投票)将成为我们改善投票的巨大障碍。每 N 年进行一次投票是一种有着 250 年历史的民主形式,如果投票能够更方便、更简单,我们就能拥有更好的民主,这样我们就可以更经常地投票。

毫无疑问,本文是基于良好的区块链可扩展性技术(比如分片)可用为前提。当然,如果区块链无法扩展,这些都不可能发生。但到目前为止,这项技术的发展非常迅速,没有理由认为它不会发生。

糟糕的区块链投票协议

区块链投票协议总是在被攻击。两年前,区块链投票技术公司 Voatz 风靡一时,很多人对此非常兴奋。但去年,麻省理工学院的一些研究人员在他们的平台上发现了一系列关键的安全漏洞 [6]。与此同时,在莫斯科,一个即将用于选举的区块链投票系统被黑客攻击 [7],幸运的是,攻击发生在选举开始的一个月前。

这些黑客攻击相当严重。以下是分析 Voatz 的研究人员成功发现的攻击能力表格:

区块链投票为何被低估了?

这本身并不是反对使用区块链投票的理由。但区块链投票软件应该设计得更谨慎,并随着时间的推移逐步扩大规模。

隐私保护 & 抗胁迫

但即使是技术上没有被攻破的区块链投票协议通常也很糟糕。为了理解其中的原因,我们需要更深入地研究区块链提供什么特定的安全属性,以及投票需要什么特定的安全属性-- 当我们深入研究时,我们将看到二者存在一个不匹配之处。

区块链提供了两个关键属性:正确执行(correct execution) 和抗审查(censorship resistance)。正确执行只是意味着区块链接受用户的输入 (「交易」),根据一些预定义的规则正确地处理它们,并返回正确的输出 (或以正确的方式调整区块链的「状态」);抗审查也很容易理解:任何想要发送交易并愿意支付足够高的费用的用户,都可以发送交易,并期待交易很快被打包到链上。

这两个属性对于投票非常重要:你希望的投票结果肯定是把每个候选人的得票数加起来,选出得票最多的候选人的结果,且你肯定希望任何有资格投票的人都能参与投票,即使一些有权势的人试图阻止他们。但投票还需要一些区块链 不提供的关键属性:

  • 隐私保护:你不应该知道某些特定的人给哪个候选人投了票,甚至不知道他们是否投了票;

  • 抗胁迫:你不应该能够向别人证明你是如何投的票,即使你想这么做。

上述第一项要求 (即隐私) 的必要性是显而易见的:你希望人们根据他们的个人感受来投票,而无需考虑他们周围的人、他们的雇主、警察或街上随机出现的暴徒对他们的投票选择的感受。

第二项要求 (即抗胁迫) 需要用于防止出现「兜售选票」(vote selling) 的问题:如果你能证明你是如何投票的 (即证明你把票投给了谁),那么兜售你的选票就变得非常容易。选票的可证明性也会使胁迫形式成为可能,即胁迫者要求看到 (被胁迫者,也即投票人) 把票投给了某个候选人的某种证明。大多数人,即使是那些知道第一项要求的人,也不会考虑第二项要求。但第二项要求也是必要的,在技术上提供这项要求很重要。毋庸置疑,你在外面看到的一般「区块链投票系统」甚至不会尝试提供第二项属性,而且通常无法提供第一项属性。

不使用区块链的安全电子投票

以加密方式来安全执行的社交机制概念并不是区块链极客们发明的,实际上早在我们之前就存在了。在区块链领域之外,致力于研究安全电子投票问题的密码学家已经有 20 年的传统,好消息是已经有了解决方案。Juels,Catalano 和 Jakobsson 在 2002 年发表的题为《抗胁迫的电子选举》(Coercion-Resistant Electronic Elections[8]) 的论文在过去 20 年里被很多文献引用:

区块链投票为何被低估了?

从那以来,这个概念经历了多次迭代;Civitas[9] 是一个突出的例子,尽管还有许多其他的例子。这些协议都使用一套类似的核心技术:有一组经商定的「监票人」(talliers,或称计票人),以及一个信任假设,即大多数监票人都是诚实的。每个监票人拥有一个私钥的「一部分」,对应的公钥被公布。投票人通过使用监票人的公钥来对投票进行加密,并将经加密的投票公布,监票人使用一个安全多方计算 (MPC) 协议 [10] 来对选票进行解密和验证,并计算票数。票数计算是「在 MPC 内部」完成的:监票人从头至尾都不会知道他们的私钥,且在计算最终结果时,不会知道任何关于个人投票的信息,除了可以从最终结果本身看出什么信息来之外。

对投票进行加密提供了隐私,且可以添加一些额外的基础设施 (比如混合网络) 使隐私性更强。与此同时,为了提供抗胁迫,可以使用以下两种技术中的一种:

第一种选择是在注册阶段 (监票人在此阶段获悉每个注册投票人的公钥),投票人会生成或者接收到一个密钥。对应的公钥在监票人之间共享,且监票人的 MPC 只有在某个投票被密钥签名的情况下才会计算该投票。投票人无法向第三方证明自己的密钥是什么,因此如果他们被贿赂或者胁迫,他们可以简单地出示一个错误的密钥并使用错误的密钥来签名投票。或者,投票人可以发送消息来更改他们的密匙,投票人无法向第三方证明他们没有发出这样的信息,因此投票结果还是一样的。

第二种选择是这样一种技术,即投票人可以进行多次投票,后一次投票可以推翻前一次投票。如果某个投票人被贿赂或者胁迫,他可以先按照行贿者 / 胁迫者的要求给某个候选人投票,但之后可以发送另一次投票来推翻前一次投票。

区块链投票为何被低估了?

赋予投票人能够通过之后的投票来推翻之前的投票,这是上图这个 2015 年协议的抗胁迫机制的关键

现在,我们来看看所有这些协议中一个重要的细微差别。它们都依赖于一个外部原语来完成它们的安全性保证:电子布告 栏(bulletin board,上图中的「BB」)。布告栏是一个任何投票人都可以发送信息的地方,并保证:(1) 任何人都可以读取布告栏,(2) 任何人都可以向被接受的布告栏发送信息。你能找到的大多数抗胁迫的投票文件都会随意提到布告栏的存在,但是很少有论文讨论这个布告栏实际上可以如何被实现。在本文中,你可以看到我的意图:实现布告栏的最安全方式是使用某条现有的区块链!

使用区块链的安全电子投票

当然,在区块链之前,已经有很多人试图制作一个电子布告栏。这篇 2008 年的论文 [12] 就是这样的尝试,它的信任模型是一个标准的要求,即「n 个服务器中必须要有 k 个是诚实的」(常见的是 k = n/2)。比如,这篇 2021 年的文献综述 [13] 涵盖了一些区块链之前的布告栏实现尝试,也探索区块链在其中的使用,而这些区块链之前的解决方案同样依赖于 k-of-n 信任模型。

区块链也是 k-of-n 信任模型,它要求至少有一半的矿工或 PoS 验证者遵循协议,如果这一假设失败,通常会导致「51% 攻击」。那么,为什么区块链要比一个特殊用途的电子布告栏更好呢?答案是:建立一个真正可信的 k-of-n 系统是困难的, 区块链是唯一一个已经大规模解决了这个问题的系统。假设某个政府宣布它正在建立一个投票系统,并提供 15 个当地组织和大学的名单,这些组织和大学将运行一个特殊用途的布告栏。作为一个外部观察者,你怎么知道政府从 1000 个组织中选择了这 15 个组织不是基于其想要与某个情报机构勾结的意愿?

另一方面,公链 拥有任何人都可以参与的 无需许可的经济共识机制 (PoW 或者 PoS),以及现有的由区块浏览器、交易所和其他监视节点组成的多样化且高度激励的基础设施,以不断实时验证没有什么不好的事情发生。

这些更复杂的投票系统不只是使用区块链;它们还依靠诸如零知识证明之类的密码学来保证正确性,并依靠多方计算来保证抗胁迫。因此,它们避免了那些更为「天真」的投票系统的弱点,即只是「把选票直接投给区块链」而忽略由此产生的隐私保护和抗胁迫问题。但区块链布告栏仍然是整个设计的安全模型的关键部分:如果委员会被攻破了,但区块链没有被攻破,抗胁迫的特性就会消失,尽管围绕投票过程的所有其他保证仍然存在。

MACI:以太坊上的抗胁迫区块链投票

以太坊生态系统目前正在试验一种名为MACI的系统 [14],该系统结合了区块链、ZK-SNARKs 和一个确保抗胁迫性的中央参与者 (但除了保证抗胁迫特性之外,没有能力破坏任何特性)。MACI 在技术上不是很困难。用户可以通过以下方式参与:使用自己的私钥签名消息,然后通过中央服务器发布的公钥来对该签名消息进行加密,并将经加密的签名消息发布到区块链。服务器从区块链下载这些消息,对其进行解密和处理,并输出一个结果和一个 ZK-SNARK 证明,以确保正确地进行了计算。

区块链投票为何被低估了?

用户无法证明他们是如何参与其中的,因为他们能够发送一个「更改密钥」的信息来欺骗任何试图审计他们的人:他们可以先发送一条更改密钥的消息,将他们的密钥从 A 更改为 B,然后发送一条用 A 签名的「假消息」。服务器会拒绝这条假消息,但其他人没有任何方法知道这条更改密钥的消息被发送了。对服务器上有一个信任需求,尽管只是为了实现隐私保护和抗胁迫;服务器不能通过不正确的计算方式或通过审查消息来发布错误的结果,从长远来看,多方计算可以用于在某种程度上实现该服务器的去中心化,进而加强隐私保护和抗胁迫的保证。

这个方案在 clr.fund[15] 有一个演示,该方案被用于进行二次方融资 (quadratic funding)。通过使用以太坊区块链来保证投票的抗审查,确保了比依赖一个委员会提供了高得多的抗审查程度。

小结

  • 投票过程有四个重要的安全要求必须满足:正确性、抗审查、隐私保护和抗胁迫。

  • 区块链擅长前两项,不擅长后两项。

  • 把投票加密放到区块链上可以增加隐私。零知识证明可以带来正确性,而外部观察者无法直接合计选票,因为它们是加密的。

  • 多方计算解密和检查投票可以提供抗胁迫特性,条件是与用户可以多次与系统交互的机制相结合:要么前一次投票使后一次投票无效,要么反过来。

  • 使用区块链确保你有非常高的安全抗审查性,并且即使委员会串通起来打破了抗胁迫性,你依然将保持这种抗审查性。引入区块链可以显著提高系统的安全性。

但我们可以信任技术吗?

但现在我们回到第二个对任何类型的电子投票 (不管是否使用区块链) 的更深层次的批评:技术本身太不安全,不应该被信任。

麻省理工学院 (MIT) 最近的一篇论文 [16] 批评了区块链投票,其中包括下方这个表格,描述了任何形式的无纸化投票从根本上来说都太难保证安全:

区块链投票为何被低估了?

这篇论文的作者们关注的关键属性是软件独立性(software-independence),他们将其定义为「一种属性,即系统软件中未检测到的变化或错误不能对选举结果造成不可察觉的变化」。基本上就是说,代码中的一个bug不应该意外地让 Prezzy McPresidentface 成为某个国家的新总统 (或者更现实地说,某个蓄意被嵌入的 bug 不应该能够将某个候选人的票数份额从 42% 增加到 52%)。

但是还有其他的方法来处理 bug。例如,任何使用可公开验证的零知识证明的基于区块链的投票系统都可以被独立验证。某个人可以自己编写证明验证器的实现,并自己验证 ZK-SNARK。他甚至可以编写自己的投票软件。当然,实际做到这一点的技术复杂性超过了 99.99% 的任何实际投票人基数,但如果成千上万的独立专家有能力做到这一点,并验证该软件能够起作用,这在实践中简直不要太好了。

然而,对于 MIT 的作者们来说,这还不够:

因此,任何只使用电子的系统,即使是端到端可验证的系统,似乎都不适用于可预见的将来的政治选举。美国投票基金会已经注意到 E2E-V 方法改善网上投票安全性的承诺,但已经发布了一份详细的报告,建议避免将其用于网上投票,除非和直到该技术更加成熟,并在投票中得到充分测试。

其他人对这些想法提出了延伸。例如,Juels 等人的提议强调使用密码学来提供多种形式的「抗胁迫」。Clarkson 等人的 Civitas 提案实现了抗胁迫的额外机制,Iovino 等人进一步将其纳入并细化到他们的 Selene 系统中。从我们的角度来看,这些提议是创新但不现实的:它们相当复杂,最严重的是,它们的安全性依赖于投票人的设备没有被破坏并按预期运行,这是一个不现实的假设。

这些 MIT 作者们关注的问题不是投票系统的硬件安全;这方面的风险实际上可以在使用零知识证明的情况下减轻。相反,他们关注的是一个不同的安全问题:即使在原则上,用户的设备是否安全?

考虑到对消费性设备的各种漏洞利用和黑客攻击的悠久历史,人们很有理由认为答案是「不安全」。以下引用我自己 2013 年写的一篇关于比特币钱包安全的文章:

昨晚 9 点左右,我点击了一个访问 CoinChat[.]freetzi[.]com 的链接 -- 我被提示运行 java。我这样做了 (我以为这是一个合法的聊天室),但什么也没发生。我关了该窗口,没有放在心上。等我打开我的 bitcoin-qt 钱包大约 14 分钟后,看到了一笔我没有授权的交易,该笔交易几乎将我钱包里的所有资金 (2.07 BTC) 发送到这个地址:

1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC

还有:

2011 年 6 月,Bitcointalk 成员「allinvain」 的电脑被不明入侵者直接入侵,损失了 2.5 万 BTC (当时价值 50 万美元)。攻击者能够访问 allinvain 的 wallet.dat 文件,并迅速掏空了该钱包 -- 要么通过 allinvain 的电脑发送交易,要么上传 wallet.dat 文件然后在自己的电脑上掏空了该钱包。

但这些灾难掩盖了一个更大的事实:在过去的二十年里,计算机安全实际上一直在缓慢而稳步地改善[17]。现在攻击更难发生,通常要求攻击者在多个子系统中寻找漏洞,而不是在一段大型复杂代码中寻找单个漏洞。现在引人注目的事件比以往任何时候都要大,但这并不是任何事情都变得更加不安全的迹象;相反,这只是我们越来越依赖互联网的一个标志。

可信硬件(trusted hardware[18]) 是最近一个非常重要的改进来源。一些新的「区块链手机」(例如 HTC 的一款手机 [19]) 在这种技术上走得相当远,并在可信硬件芯片上安装了一个以安全为重心的极简操作系统,允许高安全要求的应用程序 (例如加密货币钱包) 保持与其他应用程序分离。三星已经开始生产使用类似技术的手机。甚至是那些从未在广告中宣传为「区块链设备」的设备 (比如 iphone) 时常都有某种可信硬件。

加密货币硬件钱包实际上是相同的东西,只是这种可信硬件模块在物理上位于计算机外部而不是内部。但可信硬件 (活该!) 经常在安全圈,特别是区块链社区中受到不好的评价,因为它总是一次又一次地被攻破 [20]。的确,你肯定不想用它来替代你的安全保护。但作为一种增强技术,它是一个巨大的进步。

最后,单一的应用程序,如加密货币钱包和投票系统,比整个消费者操作系统简单得多,出错的空间更小 -- 即使你必须整合对二次方投票、抽签、二次方抽选等的支持。像可信硬件这样的工具的好处是,它们能够将简单的东西从复杂和可能被攻破的东西中隔离出来,而且这些工具正在取得一些成功。

所以随着时间的推移,风险可能会降低

但是好处是什么呢?

这些安全技术的改进预示着消费硬件在未来可能比现在更受信任。过去几年在这一领域的投资很可能在未来十年继续获得回报,我们可以期待进一步的显著改善。但是让投票电子化 (基于区块链或其他方式) 有哪些好处,从而值得去探索这整个领域呢?

我的答案很简单:投票将变得更有效率,使我们能够更经常地进行投票。目前,对组织 (政府或企业) 的正式民主投入往往被限制为每 1-6 年进行一次投票。也许在很大程度上正是由于这个原因,我们社会中的去中心化决策制定严重分化为两个极端:纯粹的民主和纯粹的市场。民主要么非常低效 (企业和政府投票),要么非常不安全 (社交媒体点赞 / 转发)。市场在技术上比社交媒体高效得多,也安全得多,但其基本的经济逻辑使其不适用于许多类型的决策问题,尤其是与公共产品有关的决策问题。

区块链投票为何被低估了?

是的,我知道这又是一个三角形,我真的真的很抱歉不得不用它。但是请原谅我这一次 ....(好吧,我确信以后我会制作更多的三角形;忍忍吧)

如果我们能建立更多介于民主和市场之间的系统,从前者的平等主义、后者的技术效率和两者之间的经济属性中获益,我们可以做很多事情。二次方融资 (Quadratic funding) 就是一个很好的例子;流动民主 (liquid democracy) 是另一个很好的例子。即使我们不引入新颖的委托机制或二次方数学,我们也可以做很多事情,通过在更小的范围内进行更多的投票,使投票更适应每个投票人可以获得的信息。所有这些想法的挑战是,为了有一个方案能够持久地维持任何程度的民主,你需要某种形式的抗女巫攻击和减少贿选:这正是这些被看好的ZK-SNARK + MPC +区块链 的投票方案试图解决的问题。

加密领域可以提供帮助

加密货币领域的一个被低估的好处是,它是一个优秀的「虚拟经济特区」,可以在高度敌对的环境中测试经济和加密想法。无论你构建和发布什么,一旦其控制的经济力量超过了某个规模,大量形形色色的参与者 (有时候是利他的参与者,有时候是受利益驱使的参与者,以及有时候是恶意的参与者,其中很多人还是完全匿名的) 会突然来到这个系统并尝试将其经济力量扭曲成他们自己的各种目标。

攻击者的动机很高:如果一个攻击者从你的加密经济工具中窃取了 100 美元,他们通常可以获得完整的 100 美元奖励,而且他们通常可以逃脱惩罚。但是防御者的动机也是很高的:如果你开发了一种能够帮助用户避免资金损失的工具,你便能够 (至少有时候) 将其转变成一种工具并赚取数百万美元。加密货币是终极的训练区:如果你可以构建一些能够在这种环境中大规模生存的东西,那么它也可能在更大的世界中生存。

这适用于二次方融资 [21],适用于 multisig (多签)[22] 和社交恢复钱包 (social recovery wallets)[23],也适用于投票系统。区块链领域已经帮助推动了重要安全技术的兴起:

  • 硬件钱包;

  • 高效的通用零知识证明;

  • 形式化验证工具;

  • 搭载可信硬件芯片的「区块链手机」;

  • 抗女巫攻击机制,比如 Proof of Humanity[24]

在所有这些案例中,技术的某个版本在区块链出现之前就已经存在了。但难以否认的是,区块链在推动这些工作方面产生了重大影响,区块链领域固有的激励机制在推动技术发展的真正实现方面发挥了关键作用。

总结

从短期来看,任何形式的区块链投票都应该局限于小型实验,无论是针对更主流的应用还是针对区块链领域本身的小型试验。目前的安全性显然还不够好,不能一切都依赖计算机。但这正在改善,而如果我错了,安全性没有得到改善,那么不仅区块链投票,而且整个加密货币都将很难成功。因此,这项技术有很大的动力继续改进。

我们都应该继续关注这项技术,以及世界各地为提高安全性所做的努力,并慢慢地在非常重要的社会进程中更加自如地使用技术。技术已经是我们金融市场的关键,对经济的很大一部分进行加密化将把更大一部分经济交给我们的加密算法和运行这些算法的硬件。我们应该仔细观察和支持这一过程,并随着时间的推移利用其好处,将我们的治理技术带入 21 世纪。