数学"证明"选票计数无误——但内置了秘密后门
瑞士公开了其电子投票源代码供任何人检查——不到几周,密码学家就发现了一个后门,它让内部人士能在悄悄改变选票的同时生成数学上有效的证明。
时间是2019年春天,瑞士邮政公司的办公室里正在做一个看起来像激进透明的决定。这家联邦邮政机构与其西班牙供应商Scytl合作,即将公开瑞士互联网投票系统的完整源代码。不是摘要。不是宣传册。真实的代码——每一行——向全世界开放,供人们阅读、攻击和评判。
这本应是解决争议的时刻。
瑞士多年来一直在争论互联网投票。批评者说你不能信任黑盒子。官员们说该系统已经过验证、审计、认证。所以瑞士邮政做了世界上几乎没有选举机构敢做过的事:它打开了这个盒子。来看看,它说。我们没有什么隐瞒的。
三位独立研究人员——Sarah Jamie Lewis、Olivier Pereira和Vanessa Teague——相信了瑞士邮政的话。他们看了。
他们发现的东西本不应该存在。
一个证明什么都没证明的证明
要理解Lewis、Pereira和Teague发现了什么,你需要理解该系统声称要做什么。
互联网投票有一个根本问题:当选民通过互联网提交选票时,任何人——包括选民本身——如何确认它被正确计数,而不是被中间某个服务器替换成不同的选票?密码学家开发的答案叫做混合网络(mixnet)。选票以加密状态进来。系统将它们打乱——像洗牌一样——然后,关键的是,发布一份数学证明,证明打乱是诚实的:它改变了选票的位置但没有改变任何一张选票。
这个证明是该系统的核心可验证性声明。任何有合适软件的人都能检查它。如果证明通过,选票就是完整的。如果证明失败,你就知道有问题。
只不过证明本身有一个陷阱。
Lewis、Pereira和Teague在一篇论文中记录了他们的发现——引用了Magritte的创意——Ceci n'est pas une preuve。"这不是一个证明。"他们发现瑞士邮政-Scytl系统中的打乱证明使用了陷阱承诺方案:一种数学结构,在正常条件下功能诚实,但如果你知道一组隐藏值(陷阱),你就能利用它。持有这些值的权力机构可以生成一份打乱证明记录,能通过每一项验证检查——同时实际上改变了选票。
慢慢读那一遍。证明可以通过。数学会验证正确。每个审计员的软件都会说:已验证。选票将是错的。
这不是理论上的琐碎问题。这是一个功能性后门,嵌入在系统提供来保证完整性的机制本身中。你应该检查来确认计数的东西就是可以被伪造的东西。
"可验证"真正需要什么
瑞士邮政和Scytl承认了这一发现。瑞士当局暂停了电子投票系统,等待补救。没有约束力的选举在有缺陷的系统上运行过,所以没有选票实际被改变。但这一事件触及了每个选举技术声明都必须回答的问题的核心:
为谁可验证?
一个系统可以交给你一份数学证明,仍然在对你撒谎——如果证明的结构本身包含一个秘密杠杆,只有系统操作者知道如何拉动。瑞士邮政系统不仅声称安全。它声称提供通用可验证性:一项保证任何人,持武装发布的数据,都能确认选票被正确计数而无需信任任何单一权力机构。这个声明是假的。验证仅在权力机构行为公正时才是真实的。这正是可验证性应该防范的。
德国联邦宪法法院在十年前的2009年判决中掌握了这一逻辑,该判决禁止了公众无法独立检查的投票计算机。法院主张投票和确定结果的本质步骤必须能被公民可靠地且无需任何专业知识地检查。它不是要求完美。它要求一个非专家能跟上的东西。只有训练有素的研究人员才能分析的密码证明已经离那个标准一步之遥——而一个后门方案产生的证明比根本没有证明更糟,因为它主动误导。
瑞士邮政案例显示了更深层的问题。一个说"相信我们"的黑盒子系统显然是在要求信心。但一个发布代码的系统说"检查数学"并在数学中嵌入陷阱是在要求同样的信心,同时将其伪装成证据。可验证性的外观比不透明的承认更危险,因为它关闭了问题。
公开代码如何发现认证错过的缺陷
有一件事值得牢牢记住:缺陷被发现因为代码被公开了。
瑞士邮政不必打开其源代码。大多数供应商不这样做。在大多数民主国家存在的认证机制——在美国,选举援助委员会的自愿投票系统指南;在其他司法管辖区,国家测试实验室——涉及专家在受控条件下检查系统,通常在保密协议下,他们的发现被总结但不总是发布。当检查员说"我们测试过了它通过了",公众相信检查员。推理是隐藏的。
当瑞士邮政公开代码时,它使不同种类的检查成为可能:对抗性的、独立的、不受限制的。Lewis、Pereira和Teague不是由瑞士邮政支付的。他们没有保密协议。他们发布了整个分析,带有引用和方程,供任何人阅读和质疑。那不是认证过程。那是一个科学的——它发现了认证过程没有发现的东西。
这两个过程之间的差距值得精确命名。认证测试系统在预期条件下的行为是否正确。独立密码审查测试系统的声称保证在对抗性条件下是否成立——包括对手是系统操作者。第二个问题是最重要的,也是只有公开发布才能允许的。
比较2010年华盛顿特区互联网投票试验,一个密歇根大学团队在大约48小时内获得了对公共选票返回试点的近乎完全的控制——正因为该司法管辖区在真实选票计数之前向公众开放系统进行测试。漏洞被发现因为有人被允许进行攻击。或考虑2015年的新南威尔士iVote系统,研究人员在已经收集约280,000张选票的现场选举中发现了严重缺陷——一次选前安全审查已经清除的缺陷。在每种情况下,发现来自官方流程之外,而不是来自它。
模式成立:公开检查发现闭门认证错过的东西。不总是。不是自动的。但足够一致,证明的负担必须转变。当权力机构说"我们认证过它",要问的问题是:由谁认证,针对什么威胁模型,有什么访问权限,发现发布在哪里?
陷阱作为一个分类问题
瑞士邮政系统中的特定缺陷——密码证明中的陷阱——不是普通意义上的实现错误。它不是缓冲区溢出或配置错误的服务器。那些是错误。这是一个设计选择,或至少是系统可验证保证所依赖的数学结构中的设计失败。
这种区别很重要,因为它告诉你测试的局限性。你可以无限期地探查软件系统的任意错误,仍然错过陷阱承诺方案,因为该方案从外部正确运作——它产生正确形状的输出,它通过正确形状的检查。缺陷是不可见的,除非你检查数学规范并注意到所用的承诺方案有设计者要么不知道要么没有披露的属性。
这就是为什么关于选举中密码可验证性的论证不能停在"我们发布了代码"。它必须扩展到:数学证明结构本身必须能被既不是供应商也不是权力机构、且有动机找问题而不是认证问题的人独立审计。
Lewis、Pereira和Teague有动机找问题。他们找到了一个。这不是对瑞士邮政意图的控告——公司承认了发现并着手修复。它是对产生发现的过程的一个论证。
"审计确认了"留下什么未解答
当瑞士邮政系统被暂停时,官员们可以说:过程运作了。发现了缺陷;部署被停止;补救将进行。在狭义上,这是真的。但值得问一下如果代码没有被发布会发生什么。
答案是:同样的证明会运行,同样的记录会被产生,任何检查它们的人都会看到:已验证。认证会通过。官员们会说:系统已审计。公众将无法知道证明什么都没证明。
你无法独立检查的可验证性声明与根本没有可验证性无法区分。这不是对电子投票的独有批评。它适用于选举系统中每一项正确性的声明——纸质计票包括。乔治亚州2020年手工计数约500万张选票确认了机器制表的结果在约百分之零点一范围内,这令人印象深刻。但它取决于存在可被独立检查的耐用纸质选票,而不是信任第一次计数的机器。纸张是独立检查。你可以实际检查的证明。
瑞士邮政案例是密码学等价物:代码,一旦发布,就是纸张。纸张显示证明是虚构的。
什么会使其真正可检查
瑞士邮政案例不会结束对密码可验证选举的支持。它定义了那个支持实际需要什么。
打乱证明是正确的机制——数学保证没有选票在传输中被改变,任何有验证软件的人都能检查。但为了那个保证是真实的而不是表演的,几个条件必须同时成立:
首先,密码方案不能包含陷阱值。这是数学要求:打乱证明中使用的承诺方案必须有约束力和隐藏性,没有秘密后门。有一些众所周知的方案满足这一点没有陷阱;选择哪一个使用不是供应商细节而是公开设计问题。
其次,证明必须能被与结果无利益关系的各方独立验证。不只是一个认证实验室。多个独立密码学家,有完整规范和实现,发布他们的发现供公众批评。
第三,从投票者到最终计票的端到端链必须能在不信任链中任何单一点的情况下审计。互联网投票的投票者应该能确认他们的加密选票被包含在混合中;任何观察者应该能确认混合是诚实的;最终解密应该能被独立重现。这些步骤都不应该取决于权力机构的合作或善意。
第四——这是最难的——验证过程本身必须足够易获,使得德国宪法法院的标准被满足:普通公民,不仅仅是专家密码学家,必须能确认本质步骤。这可能需要软件工具、界面和文档,远超任何当前系统提供的。
2019年瑞士邮政系统没有完全满足这些条件中的任何一个。其中一些条件不是由世界上任何当前部署的选举系统满足的。那是诚实的位置。瑞士邮政案例不是一个缺陷被发现和修复因此一切现在都很好的故事。它是一个故事,讲的是当你发布足够的东西让外部人士发现问题时会发生什么——以及需要什么才能发布足够的东西使发现能够在部署之前系统地发生,而不是作为独立研究的幸运意外。
反派是你无法检查的证明
一个瑞士供应商的打乱证明中的特定陷阱不是重点。重点是声明的分类:数学上证明正确,以封闭外部检查的形式提供。每个选举系统都做声明。供应商声称认证。官员声称审计。密码学家声称可验证。这些声明中的每一个都只如让独立外部人士确认或反驳它的机制一样强大。
当那个机制是黑盒子时,声明依赖于信任建造盒子的人。当它是发布代码时,声明至少可以被审视——有时可以被反驳。当它是使用有陷阱方案的发布密码证明时,它是可验证性的表演:东西的外观没有物质。
瑞士邮政故事中的反派不是瑞士邮政,不是Scytl。它是透明度伪装的不透明——一个看起来可检查实际上不是的证明。修复不是放弃密码可验证性而是要求真实版本:没有陷阱的方案、没有保密协议的审查、独立研究人员可以检查并在必要时反驳的证明。
那正是TrustVoting正在致力于的:一个其正确性没有人必须相信的系统,因为证据以任何人都能检查的形式发布。不是"我们让它审计过"。不是"数学验证了"。这是数学。自己检查一下。
可分享版本:瑞士发布其电子投票代码来证明它是值得信任的。研究人员发现了一个陷阱,它让内部人士在改变选票的同时伪造有效证明。证明通过了。选票本来是错的。"已验证"只有在有人独立被允许进行验证——并被允许说不时——才有意义。
仍然不可检查的:任何其他当前部署的密码电子投票系统是否使用类似有问题的承诺方案,以及这些系统通过的认证流程是否包含了公开发现的对抗性独立密码审查。直到那审查存在并且其结果是公开的,"系统被认证"仍然是声明,不是证明。
什么会使其可检查:密码规范和源代码的完整发布、没有保密协议的独立多方审查、发布的发现——包括负面的——在任何约束力选举运行之前。
来源
- Lewis、Pereira、Teague — Ceci n'est pas une preuve(Scytl–SwissPost互联网投票系统中的陷阱承诺),2019
- Bundesverfassungsgericht,2009年3月3日判决,2 BvC 3/07和2 BvC 4/07(英文翻译)
- Wolchok、Wustrow、Halderman、Prasad — 攻击华盛顿特区互联网投票系统,Financial Cryptography 2012
- Halderman、Teague — 新南威尔士iVote系统:一个现场在线选举中的安全故障和验证缺陷,E-Vote-ID 2015(arXiv:1504.05646)
- Georgia Public Broadcasting — 风险限制审计确认Biden赢了乔治亚州
- Bundesverfassungsgericht,新闻稿No. 19/2009(英文)