发布于 2026-01-06 0 阅读
0

在区块链上设计一个可容纳10亿用户的投票系统(第一部分)

在区块链上设计一个可容纳10亿用户的投票系统(第一部分)

通过投票选举国家执政机构是民主的核心概念。最早的民主形式是斯巴达人将石头投入刻有标记的碗中,以此选举他们的领导人。如今,我们运用尖端科技进行这些至关重要的选举程序,但由于选举关乎民众的控制权,因此它仍然是心怀叵测、意图夺取权力的候选人的攻击目标。随着区块链技术的复兴以及人们对去中心化、共识机制和默克尔树等概念日益增长的兴趣,或许我们现在拥有了更完善的技术来解决大规模投票问题。

过去的投票

印度全国大选中使用的电子投票机。
在印度,全国性选举采用电子投票机(EVM)进行,这些机器被分发到各个投票区域(我们称之为选区),覆盖范围从大型都市到没有网络连接的偏远村庄。每台机器可容纳3840张选票,投票机需人工运送至中央选举委员会进行计票。这一过程既繁琐又耗时,而且有报道称,该程序容易出现人为错误或故意错计¹

最近,印度选举委员会设计了一套名为“选民可验证纸质审计追踪”(VVPAT)的系统。该系统会将选民的选择打印在纸质收据上,并在投入密封箱前短暂展示。这既能让选民确认投票是否正确,也解决了之前关于选票可能被操纵、投给默认候选人的担忧。此外,纸质追踪还能增强计票过程的透明度,除非出现大量纸质收据丢失的情况。

该系统的主要优势在于:
a. 硬件设计极其坚固耐用,即使在偏远地区没有电力供应的情况下,也能使用6伏碱性电池供电。b
. 投票过程离线进行,所有机器都将归还给选举委员会,由其负责防止选民舞弊。c
. 印度民众更信任纸质可验证的系统,因为他们认为纯软件解决方案更容易被操纵。

事情远不止于此。尼泊尔、不丹、纳米比亚和肯尼亚都购买了印度制造的电子投票机,打算在全国选举中使用。我开始担心,过度依赖劳动密集型的人工计票方式可能并非最佳方案。

此外,我们也应该避免采用在已登记的选区进行人身身份验证的手动认证方式,因为这可能会让人们即使身处异地也能为家乡的候选人投票,从而大幅提高投票率。

基于软件的投票

一种传统的基于软件的投票架构。
在传统的投票系统中,选民通过客户端(专用设备或网站)投票,投票结果随后被提交到服务器,服务器中央数据库会记录所有已投出的选票。每张选票都会被存储在数据库中,因此可以对所有选票进行重新计票,而不仅仅是使用计数器来记录每位候选人的得票数。这使得核实是否存在选民舞弊行为变得更加容易,例如是否存在重复投票或未投出的选票。由于选票只有在发送到服务器后才算有效,我们可以确保服务器验证选民的身份和选择,从而防止舞弊行为。

虽然任何显而易见的软件应用程序安全问题都可能适用,但一些更具领域特异性的问题包括:

  1. 单个投票服务器无法处理大量同时提交的投票请求。我们需要使用分片技术,或者允许选民将投票发送到多个服务器中的一个。
  2. 随着投票服务器数量的增加,确保不同服务器上不出现重复投票变得越来越困难。
  3. 攻击者可以通过网络伪造投票机的签名,并进行未经授权的投票。

为什么要使用区块链?

区块链架构为我们许多关键问题提供了很好的解决方案:

  1. 高容量:由于投票是去中心化的,投票可以放置在网络上的各个节点上,而无需单个中央服务器承担所有负载。
  2. 默克尔树:可以确保只接受最长的已验证投票链,从而难以进行未经授权的投票或修改已进行的投票。
  3. 冗余性:投票时会生成多个完全相同的投票结果副本。因此,必须在所有冗余服务器上伪造一次投票。

中本聪的比特币最初实现区块链时,采用了一种名为工作量证明(PoW)的技术来向链中添加新区块。这种方法要求网络上的所有矿工解决一个复杂的数学难题以获得奖励,同时还要将所有之前的交易添加到链中。这非常耗费资源,我的一位教授曾得意洋洋地告诉我,在全国范围内推广一次PoW区块链投票需要花费250卢比。

共识是指确保每个节点对所有已提交的投票达成一致,并且它们的账本完全一致且保持更新的过程。大规模快速达成共识是众多ICO和加密货币初创公司关注的焦点之一。这将加快交易确认速度,或许能让我们离完美解决方案更近一步。目前,确认一笔比特币交易需要15-30分钟,这意味着收款方要花半个小时担心是否发错了地址,或者至少要等待这么长时间才能访问这笔交易。相比之下,Visa每秒可以处理约24,000笔交易。这才是更理想的速度。

委托权益证明

委托权益证明(DPoS)是速度最快的共识算法之一,EOS 代币就采用了这种算法。他们声称,DPoS 可以在 21 个“委托”服务器上每秒确认 3000 笔交易。权益证明的难点在于,EOS 的目标并非在所有可用节点上达成共识。在每个确认轮(称为一个 epoch)中,系统会随机选择一个服务器作为“区块生产者”,该节点负责创建新区块并将其发送给所有其他委托节点。区块生产者随后统计所有投给该区块的票数,并将结果发送给其他所有委托节点进行确认。如果任何未经授权的节点试图擅自提议区块,该区块将被其对等节点拒绝,因为只有每个 epoch 中选定的委托节点才有权提议区块。

类似的架构也可用于投票,其中投票机充当普通节点,一组专用服务器充当投票确认的代表。
委托权益证明机制应用于全国的投票服务器节点。

当网络向链中添加一个投票区块时,会随机选择一位“代表”来确认构成该区块的投票的有效性。然后,该区块会被传播给所有其他代表,以就已提交的投票达成共识。恶意攻击者必须绕过投票认证机制,并成功地将无效投票提交到随机选择的代表服务器上。

通过将投票确认工作分配给多个代表,我们可以均匀分散投票过程中的负载。通过在每个周期确定性地选择区块生产者,我们可以确保系统在某些代表负载过重或发生意外故障时保持冗余。这样,我们将设计一个容错系统,从而显著简化投票过程。

我以前从未写过类似的文章,也不太确定该如何写结论,所以想听听大家的建议和反馈 :)

第二部分中,我们将讨论投票过程,包括选民身份验证、生物特征哈希、离线投票。

文章来源:https://dev.to/prnthh/muchain---designing-a-voting-system-for-1-billion-on-the-blockchain---part-1-4ab1