Belenios:简单私密且可验证的电子投票系统
电子投票系统在现代社会中越来越重要,而Belenios作为一个简单私密且可验证的电子投票系统,具有许多独特的特性和优势。本文将详细介绍Belenios的零知识证明、参与者、协议流程、设计选择与变体,以及安全证明等方面。
零知识证明
零知识证明在Belenios中多处被使用。选民需要证明他们加密的是有效选票,例如证明他们最多选择了选举允许的4名候选人;解密受托人则要证明他们正确解密了选举结果。所有零知识证明都使用Fiat - Shamir技术实现非交互性。
一个基本的零知识证明是离散对数的知识证明。例如,选民为证明她知道用于将选票 $v$ 加密为 $(g^r, y^r g^v)$ 的随机性 $r$,作为证明者,她按以下步骤操作:
1. 随机选取 $w \in Z_q$;
2. 计算 $c = h(g^r | g^w)$ 和 $s = w - r c \mod q$;
3. 返回 $(s, c)$。
验证者在收到证明 $(s, c)$ 和消息 $z = g^r$ 后,检查 $c = h(z | A)$,其中 $A = g^s z^c$。
对于有限的有效选票集合 $V$,选民可以类似地证明其加密选票 $v$ 属于 $V$,提供证明 $proof_v(v, r, enc(v, pk, r), pk, vk)$。相关的验证算法 $verifproof_v$ 在 $v \in V$ 时返回 true,否则返回 false。在Belenios中,零知识证明还依赖于选民的验证密钥 $vk$。
解密受托人也会使用零知识证明。在设置阶段,他们证明对其秘密密钥的知晓;在计票阶段,他们提供正确解密的证明。
参与者
Belenios包含四个主要参与者:
| 参与者 | 职责 |
| ---- | ---- |
| 注册员 | 也称为投票平台上的凭证机构,为每个选民生成并私下发送签名密钥,同时将相应的验证密钥发送给投票服务器。 |
| 选民 | 选择选票,其投票设备对选票进行加密和签名,并通过认证通道(如登录和密码机制)将选票发送到投票服务器。选民可随时检查其选票是否在公告板上,也可重新投票,此时仅保留最后一张选票。 |
| 投票服务器 | 负责维护公告板,即接受的选票列表。收到选民的选票后,检查选票的有效性(如签名是否有效),并将其添加到公告板。 |
| 解密受托人 | 选举的私钥不由单一机构持有,而是选择一组 $m$ 个解密受托人,其中至少 $t + 1$ 个受托人参与才能解密选举结果。例如,若7个受托人中需要5个参与解密,那么2个受托人丢失密钥也无需取消整个选举。 |
协议流程
Belenios的投票协议分为三个主要阶段:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(设置阶段):::process
B --> C(投票阶段):::process
C --> D(计票阶段):::process
D --> E([结束]):::startend
-
设置阶段
- 选举材料生成 :注册员为每个选民ID生成签名密钥 $sk_{id} \in Z_q$,并私下(通常通过电子邮件)发送给选民。同时,将对应的验证密钥列表 $vk_{id_1}, \cdots, vk_{id_n}$ 以随机顺序发送给投票服务器,其中 $vk_{id} = g^{sk_{id}}$。投票服务器发布验证密钥列表,这是公共选举数据的一部分,并为每个选民生成密码并私下发送给选民。
- 密钥生成 :选举的解密密钥不直接计算,而是选择 $m$ 个解密受托人,其中 $t + 1$ 个受托人足以解密选举。每个受托人 $i$ 随机选择一个 $t$ 次多项式 $f_i(x) = a_{i0} + a_{i1}x + \cdots + a_{it}x^t$,并将 $s_{ij} = f_i(j)$ 私下发送给受托人 $j$。选举的公钥设置为 $pk = \prod_{i = 1}^{m} g^{a_{i0}}$。为防止恶意受托人破坏选举密钥,每个受托人需要发布 $A_{i0} = g^{a_{i0}}, \cdots, A_{it} = g^{a_{it}}$ 来对其多项式进行承诺。最后,每个受托人 $i$ 计算其公钥 $pk_i = g^{d_{ki}}$,其中 $d_{ki} = \sum_{j = 1}^{m} s_{ji}$,并将 $pk_i$ 连同 $d_{ki}$ 的知识证明发送给服务器。
-
投票阶段
投票服务器维护的公共公告板 $BB$ 初始为空,同时显示选举数据,包括验证密钥集合和选举公钥 $pk$。选民投票时,先加密其选票得到密文 $c = enc(v, pk, r)$,生成证明 $\pi = proof_v(v, r, enc(v, pk, r), pk, vk)$ 证明选票属于有效选票集合,对 $c$ 进行签名得到 $s = sign(c, sk)$,然后将选票 $(c, \pi, s), vk$ 通过认证通道发送给投票服务器。
投票服务器收到选票后,检查选民是否已投票,是否使用了不同的验证密钥,以及选票的签名和证明是否一致。若存在相同验证密钥的旧选票,则移除旧选票,仅保留最后一张选票。选民可随时检查其最后提交的选票是否出现在公共公告板 $BB$ 上。
3.
计票阶段
投票阶段结束后,接受的选票列表 $BB$ 中的选票形式为 $((c_1, \pi, s_1), vk_1), \cdots, ((c_p, \pi_p, s_p), vk_p)$。任何人都可以计算加密结果 $res_e = \prod_{i = 1}^{p} c_i$,它对应着选举结果的加密。每个受托人 $i$(或至少 $t + 1$ 个受托人)提供 $res_{dk_i}^e$ 以及正确解密的证明。通过这些贡献,可以计算出 $res_e$ 的解密结果,即 $\sum_{i = 1}^{p} v_i$。
多候选人选举
在实际应用中,选民需要从 $l$ 个候选人中选择 $k_1$ 到 $k_2$ 个候选人。选票用 ${0, 1}^l$ 向量表示,例如 $(0, 1, 1, 0, 0)$ 表示选民选择了第二和第三位候选人。选票 $v = (v_1, \cdots, v_l)$ 用公钥 $pk$ 加密为 $enc(v_1, pk, r_1), \cdots, enc(v_l, pk, r_l)$,相关的零知识证明保证每个 $v_i$ 为 0 或 1,且选民选择的候选人数在 $k_1$ 到 $k_2$ 之间。
计票时,最终投票箱 $BB$ 中的选票形式为 $b_i = ((c_1^i, \cdots, c_l^i), \pi, s_i, vk_i)$。为每个候选人 $j$ 计算加密结果 $res_j^e = \prod_{i = 1}^{p} c_j^i$,然后由解密受托人对其进行解密,得到每个候选人获得的选票总和。
设计选择与变体
日志文件
Belenios的一个安全目标是防止选票填充。在允许重新投票的情况下,投票服务器需要存储选民与其验证密钥的对应关系,以确保选民不会使用两个不同的验证密钥投票,且不会有两个选民使用相同的密钥。若不允许重新投票,投票服务器则无需记录这种对应关系,这能提供更好的永久隐私保证。
无需筛选
与Helios不同,Belenios无需筛选,即投票服务器无需检查是否有密文被重复提交。这是因为零知识证明保证了选票是由获得签名密钥的选民生成的。例如,若不诚实的选民试图复制另一个选民的密文,由于证明中嵌入了原选民的验证密钥,该选票将被拒绝。
BeleniosRF变体
在Belenios中,选民可能会证明其投票对象。为避免此问题,提出了BeleniosRF变体,它提供了无收据性和可验证性。投票服务器在将选票发布到投票箱之前对其进行重新随机化,使得选民和其投票客户端都不知道完整的随机性,从而防止选民透露其投票对象。但这仍不足以防止买票行为,因为选民可能会出售其凭证(密码和签名密钥)。
BeleniosVS变体
Belenios的一个局限性是需要信任选民的投票设备。BeleniosVS变体解决了这个问题。选民会收到由注册员生成的投票表,其中包含候选人列表以及每个候选人对应的签名加密选票。选民只需扫描该选票并提供给投票设备,投票设备无法得知选票的值或修改选票。投票设备和投票服务器都会对选票进行重新随机化,以打破初始选票与投票之间的对应关系。选民还可以使用其他设备(如智能手机)审计投票表,或委托第三方进行审计。BeleniosVS保证了即使在投票设备不诚实的情况下,也能实现隐私和可验证性。
Belenios:简单私密且可验证的电子投票系统
安全证明
安全协议的设计通常容易出错,投票协议也不例外。因此,对协议进行安全证明是当前的最佳实践,它能明确安全保证和信任假设。对于Belenios,已经进行了符号证明和计算证明。不过,现有的符号证明比较抽象,缺乏对可验证性的证明。接下来,我们将重点介绍在密码学模型中进行的隐私和可验证性证明。
隐私和可验证性定义概述
在密码学模型中,消息是比特串,攻击者是任何概率多项式时间图灵机,这意味着攻击者可以使用任何在合理时间内运行的算法,并且控制所有公共通信并发送其能计算的任何消息。安全证明通过归约进行,即破坏投票协议的安全性应与破坏某些著名的算法问题一样困难,例如Belenios使用的ElGamal加密,其安全性依赖于解决决策性Diffie - Hellman问题的难度。
- 投票隐私 :对于投票隐私的定义尚未达成广泛共识,这里采用了BPRIV定义。该定义通过一个实验,让攻击者尝试区分“真实世界”和“模拟世界”。攻击者可以要求诚实选民在两个世界中进行不同的投票,并且知道两个世界中的所有选票。攻击者可以随时查看所在世界的公告板,也可以模拟不诚实选民投出任何选票,只要该选票能通过协议的验证算法,就会在两个世界中都被投出。实验结束时,攻击者会得到选举结果,为避免简单攻击,无论攻击者处于哪个世界,都会得到真实世界公告板应用计票函数的结果。如果能证明没有多项式时间的攻击者能以不可忽略的优势猜出自己所在的世界,那么该方案就满足隐私性。这个定义旨在确保除了选举结果外,没有其他数据会泄露选票信息。
-
可验证性
:可验证性确保选票能正确反映在选举结果中。根据选民的行为,可分为三种类型:
- 诚实且检查的选民 :严格按照投票协议进行投票,并执行所需的检查,例如在Belenios中,他们会检查自己的选票是否包含在公共投票箱中。
- 诚实但不检查的选民 :大多数选民属于此类,他们遵循协议但不完全执行检查,投出选票后就停止。
- 不诚实的选民 :完全由攻击者控制,可以提交任何他们想要的选票。
一个协议被认为是可验证的,如果选举结果满足以下条件:
- 包含所有诚实且检查的选民的选票。
- 包含部分诚实但不检查的选民的选票。
- 包含一组有效选票,其数量小于被破坏的选民数量,这保证了没有选票填充,即攻击者无法控制超过不诚实选民数量的选票。
总结
Belenios作为一个简单私密且可验证的电子投票系统,通过零知识证明、合理的参与者角色分配、严谨的协议流程以及多种设计变体,在选举的隐私性和可验证性方面提供了有力的保障。其安全证明基于密码学模型,为系统的安全性提供了理论支持。然而,即使有这些保障措施,仍然存在一些潜在的安全风险,例如BeleniosRF无法完全防止买票行为,BeleniosVS依赖于注册员生成的投票表的安全性等。在实际应用中,需要综合考虑各种因素,不断优化和完善系统,以确保电子投票的公正性、安全性和可靠性。
以下是Belenios主要特性的总结表格:
| 特性 | 描述 |
| ---- | ---- |
| 零知识证明 | 用于选民证明有效投票和解密受托人证明正确解密,采用Fiat - Shamir技术实现非交互性。 |
| 参与者 | 包括注册员、选民、投票服务器和解密受托人,各自承担不同的职责。 |
| 协议流程 | 分为设置、投票和计票三个阶段,确保选举的有序进行。 |
| 多候选人选举 | 支持选民从多个候选人中选择一定数量的候选人,通过加密和零知识证明保证选票的有效性。 |
| 设计选择与变体 | 如日志文件、无需筛选、BeleniosRF和BeleniosVS变体,分别解决了不同的安全和隐私问题。 |
| 安全证明 | 在密码学模型中进行了隐私和可验证性证明,确保系统的安全性。 |
下面是Belenios整体流程的mermaid流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(设置阶段):::process
B --> B1(选举材料生成):::process
B --> B2(密钥生成):::process
B1 --> C(投票阶段):::process
B2 --> C
C --> D(计票阶段):::process
D --> E([结束]):::startend
C --> F{是否多候选人选举}:::process
F -->|是| G(多候选人计票):::process
F -->|否| D
G --> D
这个流程图展示了Belenios从开始到结束的整个过程,包括设置阶段的选举材料生成和密钥生成、投票阶段、计票阶段,以及针对多候选人选举的特殊处理。通过这个流程图,可以更直观地理解Belenios的工作流程。
超级会员免费看
32

被折叠的 条评论
为什么被折叠?



