开源投票:必然需求,而非炒作
计算你的选票的软件是保密的——要求你信任它的官员们没有办法证明它在做他们声称的事情。
2021年1月7日——国会大厦被攻占的第二天上午——一个计算机取证团队走进了乔治亚州咖啡县选举办公室,带走了一份所有东西的副本。选举管理系统。投票标记设备。全州的Dominion软件。全部都被烧录到驱动器上并被带出了门。
咖啡县的投票系统一直被当作值得保护的秘密对待。隐藏代码、保护机器、信任官员。当某个拥有钥匙的人决定规则不适用于他们时,这一战略在瞬间崩溃了。
保密不等于安全。 咖啡县证明了这一点。但在这个标题下面还埋藏着一个更深层的教训——无论是否有人曾经闯入,这个教训都适用。
关于秘密代码的问题在于没人能检查它
当投票机运行专有软件时,只有供应商和有时一个由政府批准、签署保密协议的小型测试团队能读取该代码。你读不了。你的县委员读不了。认证它的州秘书处可能也读不了。
每个人得到的只是一个承诺:我们测试过了,没问题,相信我们吧。
这不是安全模型。这是一种商业安排。
2006年普林斯顿研究人员拆解了一台Diebold AccuVote-TS机器——这种触屏设备在数百万美国选民中部署——发现该软件可以在大约一分钟内用一张记忆卡被破坏。不仅仅是被篡改:被破坏的方式是重写每个日志和计数器以保持内部一致,不留任何可检测的痕迹。该代码甚至可以在正常的选举夜传输期间自我传播到其他机器。研究人员之所以发表这一成果,是因为他们拥有这台机器。他们可以查看软件。大多数人永远没有这个机会。
AccuVote-TS不是个异常。它是一个窗口——短暂打开——通向通常被封闭的系统。
这里有个令人不安的问题:如果一周的独立分析就发现了这些,那么从未接受公开审查的系统中可能隐藏着什么? 我们无从得知。这正是问题所在。
"我们审计过了"是一个声称,不是结论
官员们喜欢说选后审计证实了结果。有时这是真的。通常情况更复杂。
在2020年11月的密歇根州安特里姆县,发布了错误的非官方结果。不是略有偏差——数千张选票在错误的栏中。错误被发现了,但不是通过任何内部保障措施。它被发现是因为结果对于一个众所周知倾向共和党的县来说是荒谬的。一个更隐秘的错误,在一个更接近的县,可能已经悄悄通过。
然后,在12月,官员们进行了全体总统选票的完整手工计数,以验证更正后的机器计数。手工计数与大约15,700张投出的选票中的机器总数相比出现了12票的差异。12票。
在一个悬殊的竞争中,12票是个四舍五入的误差。但问题在这里:在一个真正接近的竞争中——由50票、20票或5票决定——一个本身相差12票的手工重新计数无法解决任何问题。 它不能。在数学上不能。"黄金标准"手工审计带有自己的不可消除的人为误差:模棱两可的标记、凌晨2点的疲劳、由不同人员对进行的争议性裁定。
当密歇根州务部说审计"确认了准确性"时,那是一种安慰。这不是证明。12票的差距不会因为官员召开新闻发布会而消失。
这里的真实论点不是任何人作弊。论点是**"州秘书处说没问题"和"手工计数证实了"是独立可验证性的替代品——而替代品不是真实的东西。**
开源对投票系统的真正含义
人们听到"开源投票"时,想象黑客被邀请打破选举。这是错误的画面。
开源意味着软件的源代码——机器执行的每一条指令——发布在任何人都能读到的地方。安全研究人员。学者。你那上过两节编程课的侄子。其他供应商。记者。独立监督组织。任何人。
这之所以重要,原因听起来几乎太简单了:你不能在每个人都能读到的代码中隐藏后门。 或者说,你可以试试,但检测的概率随着独立阅读者数量的增长而急剧下降。
现代密码学投票研究更进一步。开源是基础,但建立在其上的结构是将"你可以读它"转变为"你可以证明它"的。
以下是各个部分如何组合在一起的:
公开源代码 意味着任何人都可以检查软件应该做什么。这是第一步,但仅仅是第一步——因为你编译的代码和实际在机器上运行的代码可能是不同的东西。
可重现的构建 缩小了这个差距。如果投票系统的构建过程是可重现的,这意味着任何拥有已发布源代码并遵循已发布步骤的人都会得到一个二进制文件——实际的机器可执行文件——它与在认证机器上运行的二进制文件完全相同,逐位相同。你可以检查哈希值。如果匹配,机器就在运行它说的东西。如果不匹配,你会立即知道,无需信任任何人的话。
密码学完整性层 甚至更进一步。端到端可验证(E2E-V)投票等技术允许每个选民收到一张收据,让他们——以及其他任何人——确认他们的选票被投出、被记录和被计数,而不会透露他们投票给谁。数学是公开的。验证是公开的。结果不需要相信任何官员、任何供应商或任何审计员。
这三个层级一起,将问题从*"你信任供应商吗?"* 转变为*"你能自己检查数学吗?"*
这个转变至关重要。
为什么咖啡县证明了保密是错误的战略
让我们再回到咖啡县一会儿,因为这个教训不完全是大多数报道建议的那样。
破产被主要当作安全监管故事对待:未经授权的人员访问了他们不应该访问的系统。事实。但在这个故事下面是一个结构性假设,它首先使破产如此严重。
该系统的安全模型依赖于软件保持秘密。
如果软件是开源的,"他们获得了代码副本"就不那么令人担忧了——因为任何人都可以已经拥有代码副本。选举的完整性不会依赖于保持代码隐藏。它会依赖于数学:密码学承诺、公开审计日志、任何人都可以检查且没人可以悄悄改变的可验证记录。
走进那个办公室的人所拿走的是专有的。它作为奖品的价值完全取决于它是秘密。为透明度和防篡改建立的系统不会给他们带来那么多。
Lawfare对咖啡县事件的重建值得完整阅读。亚特兰大宪法报的报道增加了关于复制内容和传播方式的额外细节。它们一起说明了安全专业人士几十年来理解的一个原则:依赖隐晦的系统在最重要的方面正是脆弱的。
可重现构建问题不是理论上的
"可重现的构建"听起来像是软件开发的家务问题。事实并非如此。
以下是它解决的具体问题。想象一个投票机供应商发布其源代码。记者和研究人员阅读。看起来没问题。认证实验室测试它。通过。州秘书处认证它。
现在想象当供应商将该代码编译成实际在机器上运行的二进制文件时,他们做了一个小改变。不是在已发布的源代码中——在编译步骤中。一条不同的指令。每台部署的机器上的二进制文件在任何人审计的方式上都不同,在选后纸张检查不会发现的方式、在风险限制审计不会发现的方式、甚至在全面手工计数不会发现的方式中,除非纸张记录本身已被破坏。
没有可重现构建,你无法检测到这一点。有了它们,你可以:编译源代码本身,比较哈希值,然后知道。立即。无需信任任何人。
这不是为了修辞效果而建造的假设情景。针对SolarWinds的供应链攻击——与选举无关,但与原则关系密切——表明复杂的行为者可以在编译阶段修改软件,在源代码看起来干净的同时部署不干净的二进制文件。只要构建不是独立可重现的,投票软件中就存在相同的攻击面。
目前在美国大规模部署的任何投票系统都不提供公众任何成员可以验证的独立可重现构建。这个差距是真实的。它是可测量的。没有任何官员告诉你系统已被测试会关闭它。
"可验证"真正的含义——以及它仍然不是什么
值得在这里精确,因为"可验证"被松散使用。
风险限制审计,像科罗拉多州在2017年开创或乔治亚州在2020年以全州规模部署的,相比固定百分比的抽查是真正的进步。手工检查纸质选票给予统计信心机器计数是对的——如果纸张是值得信任的且如果抽样是真正随机的。
这些是真正的"如果"。但即使是完美的RLA也只验证纸张和机器同意。它不告诉你运行这些机器的软件是否是它声称的。它不验证编译步骤。它不让选民确认他们的特定选票被包括和计数。它根据纸张确认计数;它不让软件本身可检查。
一个开源、可重现构建、端到端可验证的系统不会替代审计。它为审计提供了坚实的基础。
层级看起来像这样:
- 专有、闭源软件:完全信任供应商
- 仅开源:信任没人在构建中插入恶意内容
- 开源+可重现构建:信任已发布代码和运行二进制文件匹配,独立可确认
- 开源+可重现构建+E2E可验证性:信任数学,不信任人
每一层都消除了你必须凭信心接受的一件事。目标不是完美。目标是使"这工作正确吗?"这个问题可以由任何拥有计算机和时间检查的人回答——不仅仅是有说"是"的利益的官员。
可分享的真实
这是值得截屏的一行:
"每次选举官员说'相信我们,我们审计过了'时,他们是要求你相信审计员。可验证投票的目点是你不应该必须那样做。"
这部分的案例——无法被检查的代码、错误的结果直到它们显然是错误的、在硬盘驱动器上从县办公室复制的软件——不是选举被操纵的论点。它们是论证当前模型要求的信任水平是该架构无法证明的论点。
纸质线索有帮助。审计有帮助。但如果生成结果的软件是个黑匣子,如果运行在机器上的二进制文件不能根据公开源代码独立验证,以及如果选民没有数学方式确认他们的选票被计数,它们是不够的。
什么会使这对任何人都可检查?三件事,现在在大多数美国司法管辖区未解决:
- 每个投票系统的完整公开源代码——不是NDA下可用的源代码,而是真正的公开
- 可重现构建 及任何人都能验证的已发布哈希值
- 端到端密码学收据 使个别选民可以审计他们自己的选票的包括
直到这三件事存在,"审计确认了它"是一个关于官员们在看时发现什么的陈述。任何在房间外的人都无法独立验证。
这不是阴谋论。这是工程需求。
阅读这些差距的2分钟版本 → 查看今天哪些系统和司法管辖区有开源差距 → 探索差距地图中的可重现构建故障 →