26、Belenios:简单私密且可验证的电子投票系统解析

Belenios:简单私密且可验证的电子投票系统解析

电子投票系统在现代社会中越来越重要,它需要兼顾安全性、隐私性和可验证性。Belenios 就是这样一个具备这些特性的电子投票系统,下面我们来详细了解它。

零知识证明在 Belenios 中的应用

零知识证明在 Belenios 系统里有多处应用。首先,选民要证明自己加密的是有效选票,比如证明自己最多选了 4 位候选人。其次,解密受托人要证明自己正确解密了选举结果。所有零知识证明都通过 Fiat - Shamir 技术实现非交互性。

以离散对数的知识证明为例,这是一种基本的零知识证明。假设选民要证明自己知道用于加密选票 (v) 的随机数 (r),加密形式为 ((g^r, y^r g^v))。作为证明者,选民按以下步骤操作:
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 的主要参与者

Belenios 包含四个主要参与者:
|参与者|职责|
| ---- | ---- |
|注册商|也叫投票平台的凭证机构,为每位选民生成并私下发送签名密钥,同时将对应的验证密钥发送给投票服务器|
|选民|选择选票,其投票设备对选票进行加密和签名,然后通过认证通道(如登录和密码机制)将选票发送到投票服务器。选民可随时查看自己的选票是否在公告板上,还能重新投票,此时仅保留最后一张选票|
|投票服务器|负责维护公告板,即已接受选票的列表。收到选民选票后,会检查选票是否有效(如签名是否有效),然后将其添加到公告板|
|解密受托人|没有单一机构持有选举私钥,而是选定 (m) 个解密受托人,其中 (t + 1) 个受托人就能解密选举结果。例如,若 7 个受托人中有 5 个就能解密,那么 2 个受托人丢失密钥也无需取消整个选举|

Belenios 投票协议流程

Belenios 投票协议分为三个主要阶段:
1. 选举材料生成 :注册商为每个选民 (id) 生成签名密钥 (sk_{id} \in Z_q),并私下(通常通过电子邮件)发送给选民。同时,将对应的验证密钥列表 (vk_{id1}, \cdots, vk_{idn}) 以随机顺序发送给投票服务器,其中 (vk_{id} = g^{sk_{id}})。投票服务器公布验证密钥列表,还为每个选民生成密码并私下发送。
2. 密钥生成 :选举解密密钥不会以任何形式计算出来。每个解密受托人 (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}})。为防止恶意受托人破坏选举密钥,还会有额外检查:每个受托人 (i) 公布 (A_{i0} = g^{a_{i0}}, \cdots, A_{it} = g^{a_{it}}) 来承诺自己的多项式。受托人 (i) 可通过检查 (g^{s_{ji}} = \prod_{k = 0}^{t} (A_{jk})^{i^k}) 来验证收到的私钥贡献 (s_{ji}) 的一致性。最后,每个受托人 (i) 计算自己的公钥 (pk_i = g^{dk_i})(其中 (dk_i = \sum_{j = 1}^{m} s_{ji})),并将其和 (dk_i) 的知识证明 (pok) 发送给服务器。
3. 投票阶段 :已接受选票的列表 (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) 通过认证通道发送给投票服务器。服务器收到选票后,会检查选民是否已投票、验证密钥是否被其他选民使用、签名和证明是否一致等,仅保留每个选民的最后一张选票。
4. 计票阶段 :投票阶段结束后,已接受选票列表 (BB) 包含多张选票。任何人可计算加密结果 (res_e = \sum_{i = 1}^{p} c_i),它对应选举结果的加密。然后,至少 (t + 1) 个受托人提供解密贡献 (res_{dk_i}^e) 和正确解密的证明 (pok),从而计算出选举结果 (\sum_{i = 1}^{p} v_i)。

多候选人选举的处理

前面介绍的是选民以整数表达选票的简化情况。实际上,在 Belenios 中,选民要从 (l) 个候选人中选择 (k_1) 到 (k_2) 个候选人。选票用 ({0, 1}^l) 向量表示,如 ((0, 1, 1, 0, 0)) 表示选民选了第二和第三位候选人。用公钥 (pk) 加密选票 (v = (v_1, \cdots, v_l)) 就是分别加密每个分量 (enc(v_1, pk, r_1), \cdots, enc(v_l, pk, r_l))。相关零知识证明要保证:
- 每个 (v_i) 为 0 或 1;
- 选民至少选了 (k_1) 个且最多选了 (k_2) 个候选人,即 (k_1 \leq \sum_{i = 1}^{l} v_i \leq k_2)。

计票时,最终选票箱 (BB) 里的选票 (b_i) 形式为 (b_i = ((c_1^i, \cdots, c_l^i), \pi, s_i, vk_i))。为每个候选人 (j) 计算加密结果 (res_j^e = \sum_{i = 1}^{p} c_j^i),再由解密受托人解密,得到每个候选人的得票数。

Belenios 的设计选择和变体
  1. 日志文件的作用 :Belenios 的一个安全目标是防止选票填充。选民认证分为登录密码认证和选票签名两部分,只有注册商和投票服务器都被破坏时,才可能添加非法选票。
    • 若允许重新投票,投票服务器需存储选民和其验证密钥的对应关系,以防止选民使用两个不同验证密钥投票,或两个选民使用相同密钥投票。
    • 若不允许重新投票,投票服务器无需记录这种对应关系,能提供更好的永久隐私保障。不过目前这些安全声明还缺乏证明,使用时需谨慎。
  2. 无需筛选机制 :与 Helios 不同,Belenios 无需筛选(即投票服务器检查密文是否重复提交)。在 Helios 中,这是为避免复制攻击。但在 Belenios 中,零知识证明能防止这种攻击。因为选票包含密文 (c)、证明 (\pi) 和签名 (s),若不诚实的选民想复制他人密文,由于不知道随机数 (r),只能使用相同证明 (\pi),而 (\pi) 包含原选民的验证密钥 (vk),所以还需包含原选民的签名 (s)。当该选民提交选票时,会因 ((id, vk) \in log) 且 (id \neq id’) 而被拒绝。
  3. BeleniosRF 变体 :在 Belenios 中,选民可能证明自己投给谁。为解决这个问题,提出了 BeleniosRF 变体,它兼具无收据性和可验证性。其依赖可重随机化签名加密技术,投票服务器在将选票发布到选票箱前会对其进行重随机化。这样,选民不知道部分随机数,无法提供对应随机数,从而防止选民透露自己的投票情况。但这仍无法完全防止买票行为,因为选民可能出售自己的凭证(密码和签名密钥)。
  4. BeleniosVS 变体 :Belenios 的一个局限是需要信任选民的投票设备。为解决这个问题,基于 BeleniosRF 提出了 BeleniosVS 变体。在这个变体中,选民会收到注册商生成的投票表,表上有候选人列表及对应的签名加密选票。选民只需扫描该选票并提供给投票设备,投票设备无法得知选票内容也无法修改。投票设备和投票服务器都会对选票进行重随机化,打破初始选票和投票之间的对应关系。选民还可使用其他设备(如智能手机)审计投票表,或委托第三方进行审计。BeleniosVS 能保证即使投票设备不诚实,也能实现隐私和可验证性。
安全证明

安全协议的设计容易出错,投票协议也不例外。比如 Helios 协议,2006 年提出,2008 年实现,但 2011 年被发现存在重播攻击,影响了隐私性。因此,现在的做法是对协议进行安全证明,明确安全保障和信任假设。

分析和证明安全协议有两种方法:
- 符号模型 :基于逻辑和重写规则,对协议的逻辑流程进行分析,使用抽象的密码原语表示。像 ProVerif 或 Tamarin 这样的成熟工具可自动发现漏洞或正式证明安全性,Tamarin 可能需要一些用户指导。
- 计算模型 :基于复杂性理论,将协议的安全性归结为一些算法难题,如离散对数或因式分解。执行模型精确到比特串级别,能提供更高的保障,但证明更复杂。协议的计算证明通常手动完成,不过最近也有用 EasyCrypt 工具进行机器检查的尝试。EasyCrypt 是专门用于证明程序概率等价性的交互式定理证明器,适合密码学安全证明,能提高证明的可信度。

Belenios 进行了符号和计算两种证明。不过现有的符号证明比较抽象,比如只在简化模型中证明了选票隐私性,且缺乏可验证性的证明。接下来我们重点关注在密码学模型中使用 EasyCrypt 工具进行的隐私和可验证性证明。

隐私和可验证性的定义概述

在密码学模型中,消息是比特串,攻击者是概率多项式时间图灵机,能使用任何在合理时间内运行的算法,控制所有公共通信并发送能计算出的消息。安全证明通过归约实现,即破坏投票协议的安全性应和破坏某些已知算法难题一样困难,比如 Belenios 使用的 ElGamal 加密,其安全性依赖于解决决策 Diffie - Hellman 问题的难度。
1. 选票隐私性 :目前对于选票隐私性的定义没有达成共识,有多种通过游戏定义的方式。这里采用 BPRIV 定义,它定义了一个实验,攻击者要区分“真实世界”和“模拟世界”。攻击者可要求诚实选民在两个世界中不同投票,且知道两个世界的所有选票。在实验中,攻击者可查看所在世界的公告板,还能模拟不诚实选民投票。实验结束时,攻击者得到选举结果。为避免简单攻击,即使攻击者在模拟世界,也会得到真实世界公告板的计票函数结果。额外数据(如正确解密证明)在真实世界由合法算法计算,在模拟世界由模拟器计算。若能证明没有多项式时间的攻击者能以不可忽略的优势猜出自己所在的世界,那么该方案就满足隐私性。
2. 可验证性 :文献中提出了多种可验证性概念。直观上,可验证性确保选票能正确反映在选举结果中。我们将选民分为三种类型:
- 诚实且进行检查的选民:严格遵循投票协议,会检查自己的选票是否在公共选票箱中。
- 诚实但不检查的选民:大多数选民属于此类,他们遵循协议但不进行完整检查,投完票就停止。
- 不诚实的选民:完全由攻击者控制,可提交任何选票。

若一个协议的选举结果满足以下条件,我们就说它是可验证的:
- 包含所有进行检查的选民的选票;
- 包含部分未进行检查的选民的选票;
- 包含一组有效选票,其数量小于被破坏的选民数量。这能保证没有选票填充,即攻击者不能控制超过不诚实选民数量的选票。

Belenios 作为一个电子投票系统,在设计上考虑了多方面的安全性和隐私性,通过零知识证明、多种设计选择和变体以及安全证明等手段,为电子投票提供了较为可靠的解决方案。但在实际应用中,仍需不断完善和验证其安全性。

Belenios:简单私密且可验证的电子投票系统解析

隐私证明的深入剖析

为了更清晰地理解 Belenios 如何满足 BPRIV 定义的选票隐私性,我们可以将这个复杂的实验过程用流程图展示出来:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始实验]):::startend --> B(攻击者控制公共通信):::process
    B --> C(攻击者要求选民在两世界不同投票):::process
    C --> D(攻击者知晓两世界所有选票):::process
    D --> E{攻击者选择操作}:::decision
    E -->|查看公告板| F(查看所在世界公告板):::process
    E -->|模拟投票| G(模拟不诚实选民投票):::process
    F --> H{实验是否结束}:::decision
    G --> H
    H -->|否| E
    H -->|是| I(攻击者获得选举结果):::process
    I --> J(判断攻击者能否猜出所在世界):::process
    J --> K{攻击者能否猜出}:::decision
    K -->|能| L(不满足隐私性):::process
    K -->|不能| M(满足隐私性):::process

在这个实验中,攻击者拥有很大的权力,他可以操控选民的投票行为,查看公告板信息,甚至模拟不诚实选民投票。然而,由于 Belenios 使用了 ElGamal 加密,其安全性依赖于解决决策 Diffie - Hellman 问题的难度,攻击者很难从公共的加密选票信息中获取到有用的投票内容。即使攻击者在模拟世界中,也会得到真实世界公告板的计票函数结果,这就避免了简单的通过结果差异来判断世界的攻击方式。额外数据在真实世界和模拟世界的不同计算方式,也增加了攻击者猜测的难度。

可验证性的实际保障

对于可验证性,我们可以通过一个表格来更清晰地展示不同类型选民的投票情况与选举结果的关系:
|选民类型|投票情况|对选举结果的影响|
| ---- | ---- | ---- |
|诚实且检查的选民|严格遵循协议,检查选票是否在公共选票箱|选举结果包含其选票|
|诚实但不检查的选民|遵循协议,但不进行完整检查|选举结果包含部分其选票|
|不诚实的选民|完全由攻击者控制,可提交任何选票|选举结果包含数量小于被破坏选民数量的有效选票|

这种分类方式有助于我们理解可验证性的具体含义。对于诚实且检查的选民,他们的选票一定会被正确反映在选举结果中,因为他们会检查自己的选票是否被正确记录。而对于诚实但不检查的选民,虽然他们的选票不一定全部被包含,但也会有部分被记录。对于不诚实的选民,通过限制选举结果中包含的有效选票数量小于被破坏选民数量,防止了攻击者进行选票填充,保证了选举的公正性。

不同变体的优势对比

我们将 Belenios 的不同变体的优势进行对比,用表格呈现如下:
|变体名称|解决的问题|主要优势|局限性|
| ---- | ---- | ---- | ---- |
|BeleniosRF|选民可能证明自己投给谁的问题|兼具无收据性和可验证性,防止选民透露投票情况|无法完全防止买票行为|
|BeleniosVS|需要信任选民投票设备的问题|保证即使投票设备不诚实,也能实现隐私和可验证性|依赖注册商生成的投票表,增加了系统的复杂性|

BeleniosRF 通过投票服务器对选票进行重随机化,使得选民无法提供对应随机数,从而防止了选民透露自己的投票情况。但由于选民可能出售自己的凭证,仍然存在买票的风险。BeleniosVS 通过让选民使用注册商生成的投票表,避免了投票设备获取和修改选票内容。然而,这种方式增加了系统的复杂性,需要注册商生成和管理投票表。

安全证明方法的选择考量

在选择符号模型和计算模型进行安全证明时,需要考虑多个因素。我们可以通过一个列表来分析:
1. 证明难度
- 符号模型:使用抽象的密码原语表示,证明相对简单,成熟工具可自动发现漏洞或证明安全性,Tamarin 可能需要一些用户指导。
- 计算模型:基于复杂性理论,将安全性归结为算法难题,执行模型精确到比特串级别,证明更复杂,通常手动完成,但有使用 EasyCrypt 工具进行机器检查的尝试。
2. 保障程度
- 符号模型:对协议的逻辑流程进行分析,能发现一些逻辑上的漏洞,但保障程度相对较低。
- 计算模型:能提供更高的保障,因为它将安全性与算法难题紧密联系,但证明过程复杂,需要更多的专业知识。
3. 适用场景
- 符号模型:适用于初步的协议分析和快速发现漏洞。
- 计算模型:适用于对安全性要求较高的实际应用场景。

Belenios 进行了两种证明方式,但现有的符号证明比较抽象,缺乏可验证性的证明。在实际应用中,可能需要结合两种证明方式,充分发挥它们的优势,以确保系统的安全性。

总结

Belenios 电子投票系统在设计上充分考虑了安全性、隐私性和可验证性。通过零知识证明、多种设计选择和变体以及安全证明等手段,为电子投票提供了一个较为可靠的解决方案。零知识证明在选民和解密受托人环节的应用,保证了选票的有效性和正确解密。不同的变体针对系统的不同局限性进行了改进,提高了系统的安全性和实用性。安全证明采用了符号模型和计算模型,虽然目前还存在一些不足,但为系统的安全性提供了一定的保障。

然而,Belenios 仍然面临一些挑战。例如,现有的安全证明还不够完善,需要进一步改进和验证。在实际应用中,还需要考虑选民的使用体验和系统的可扩展性。未来,可以继续优化系统的设计,加强安全证明的力度,提高系统的性能和可靠性,以更好地满足电子投票的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值