一种更简单的比特币投票协议

一种更简单的比特币投票协议

田海波(B)、傅立青和何杰杰
广东省信息安全重点实验室,数据与计算机科学学院,中山大学,中国广东省广州 510275 tianhb@mail.sysu.edu.cn

摘要

最近,赵和陈提出了一种比特币投票协议,其中 n名选民可以通过比特币交易将资金投给由多数投票决定的两位候选人中的一位。他们的协议在投票者通过比特币交易提交选票的同时,保护了个人选票隐私。然而,该协议仅支持两位候选人,并依赖于门限签名方案。我们扩展了他们的方法,使投票者可以从 L位候选人中选择至少 kmin位、至多 kmax位来生成选票。我们还重新设计了一种无需门限签名的投票协议,以减少交易数量和协议复杂性。此外,我们引入了新策略,使比特币投票协议更加公平。

关键词: 比特币 · Voting · Privacy

1 引言

可信第三方(TTP)是安全协议中的一个强大组件,通常是协议中的关键部分。例如,证书颁发机构(CA)是一种TTP,能够证明身份与公钥之间的绑定关系。投票系统中的计票机构(TA)是另一种TTP,负责准确地统计选票。然而,由于其关键功能,TTP可能成为攻击目标。攻击者可能会攻击CA以获取伪造证书,或攻击TA以篡改投票结果。这些攻击可能发生在技术层面或社会层面,通常难以防御。

比特币技术基于一个大型动态点对点网络提供去中心化TTP。大致而言,该TTP可靠地记录交易并执行交易中的脚本。技术层面,网络中的节点运行工作量证明共识机制以生成新区块,创建新区块的节点被期望记录最近的比特币交易并执行相关脚本。这种对节点行为的期望基于理性经济人假设,因为存在交易费。比特币系统作为比特币交易的可信账本运行良好,因为 2009[17]以太坊作为比特币系统的后继者,提供了图灵完备脚本语言,能够支持更复杂的应用[22]。

这种生动的去中心化TTP无疑吸引了协议设计者基于类比特币系统构建他们的协议。我们发现以太坊上已有约100种去中心化应用,包括投票、合同签名、拍卖等[7]。然而,这些应用并未实现隐私保护。赵和陈[23]提出了一种比特币投票协议,其中投票者通过比特币交易提交选票。他们的协议声称保护选票的隐私性,这促使我们研究其构造方法。他们依靠秘密共享、承诺函数和 zkSNARK[21]来生成可被打开、汇总和验证的选票。他们分别使用“索赔或退款”[4]和“联合交易”[2]机制通过比特币交易提交选票。为应对交易延展性问题[6],,他们采用一种(n-n)门限签名,以确保没有投票者能提前申领其押金。

赵和陈的协议[23]主要存在三个缺点。其一是该协议仅支持两位候选人。其二是他们的投票协议较为复杂。一个更通用的认可投票协议应允许投票者在一定范围内选择候选人。假设有 L位候选人,范围为[kmin, kmax],那么赵和陈的协议可视为 kmin= kmax= 1且 L= 2的一个特例。他们协议的复杂性主要在于使用了 n‐n门限签名方案。为了生成此类签名,所有参与者必须使用各自的秘密份额来计算最终签名的一部分,并且彼此之间需要交换消息。为了安全地生成此类签名,还必须为其消息添加验证部分以证明其行为正当,这带来了新的复杂性。第三个问题是奖金分配策略。如果某些选民提前退出,奖金将无法再被使用,即部分比特币资金会丢失。在此情况下,诚实选民的资金也会损失。一种更合理的方式是将资金退还给投票者。

本文通过利用赵和陈的投票承诺协议作为子程序,添加zkSNARK证明并生成新交易,支持投票者从 L名候选人中至少选择 kmin人、至多选择 kmax人。新设计去除了门限签名,并采用最近的比特币改进提案65[20],从而构建了一个更公平、更简单的投票协议。

1.1 相关工作

比特币系统

比特币系统为实现“通过补偿实现公平”的理念提供了一种自然的方式。巴德等人[4]通过他们的“索赔或退款”模式提供了一种公平的比特币混币器。本托夫和库马雷桑[5]在通用可组合模型中对这一模式进行了形式化。安德里乔维奇等人[3]提出了一种新的“定时承诺”模式,用于构建公平赌博协议。他们[2]进一步提出了“同时定时承诺”模式以实现相互公平。赵和陈[23]在他们的比特币投票协议中利用这两种模式设计了两个投票协议。他们将“同时定时承诺”模式称为“联合交易”。基亚亚斯等人[16]使用“索赔或退款”模式构建了一个通用的公平多方计算协议。

比特币系统基础上的协议会出现交易延展性问题[6]。基本上,一笔比特币交易的身份 TxID是一段哈希值

整个交易,特别是包含签名的输入脚本部分。但交易中的签名并未覆盖输入脚本。可以在输入脚本中插入一个“NOP”操作而不改变交易的有效性。然而,即使只是插入了一个“NOP”,TxID也会发生变化。攻击者还可以基于签名本身发起此类攻击,利用比特币系统中椭圆曲线点的表示形式。德克尔和瓦滕霍费尔[6]分析了该问题以及门头沟的失败。安德里乔维奇等人[3]指出,“索赔或退款”模式容易受到交易延展性攻击的影响。因此,他们提出了“定时承诺”模式。该模式由比特币系统的锁定时间字段支持,能够抵御延展性攻击[3]。

比特币改进提案(BIP)65[20]为比特币脚本系统提出了一种操作码 CHECKLOCKTIMEVERIFY,允许交易输出在未来某个时间点之前无法被花费。该操作码可用于进一步简化“定时承诺”模式。

比特币本身正在不断发展。一些研究发现影响了基于它的协议。Karam et al.[10]指出了比特币快速支付中的双重支付问题。Heilman等人[13]提出了日蚀攻击,即攻击者可以控制受害节点的网络连接,从而实现双重支付。Gervais等人[9]表明,攻击者可以任意延迟发送给受害节点的比特币交易,以较低的成本发起双重支付攻击。如果攻击者能够成功实施双重支付攻击,则基于比特币系统的协议通常会出现问题。幸运的是,目前已有一些方案被提出以缓解日蚀攻击[8,14],,并且相关作者[9]也展示了针对这些发现的防御措施。

投票系统

电子投票有着悠久的历史。典型的电子投票协议依赖于可信的计票方来保护投票者的隐私。对于谨慎的投票者而言,可验证计票更受青睐,因为投票者可以验证自己的选票是否被正确计入。为了降低单一可信计票方带来的风险,通常采用一组计票机构共同完成该任务,并使用门限密码学技术。赫利俄斯[1]就是这样一个系统,已有超过十万张选票通过该系统投出。

基亚亚斯和杨[15]首次提出了一种用于董事会投票的自计票协议。自计票协议具有一种公开的程序,允许任何人一旦所有选票提交后即可执行计票计算。该协议完全不依赖计票机构。格罗特[11],郝[12]提出了不同的自计票协议。一个理想的自计票协议应当保护投票者的隐私,确保在所有投票者提交选票之前部分投票结果的保密性,确保协议正确性的公开可验证性,并确保被破坏的投票者无法阻止选举结果的公布。同时实现这些特性并不容易。事实上,在自计票协议中,最后一位选民通常能够知晓投票结果,并可通过简单地退出投票流程来阻止其投票行为。

近期研究

郝[18]提出了一种用于董事会投票的智能合约,以实现最大程度的选民隐私。该方案结合了他们之前提出的自计票协议和“申领与退款”范式[4]。如果最后一位选民停止投票,则其将失去押金。显然,如果对其智能合约进行修改,增加对候选人的资金支持,就会转变为一种 ether(以太坊代币)投票协议。然而,我们在此提出的方案与他们的工作有所不同: –[18]中的选票是乘法循环群中的一个元素,并附带零知识证明。而我们此处的选票实际上是一些类似于赵和陈的方案[23]中的哈希值。不同的选择导致了不同的实现复杂度。郝等人[18]引入了一个外部库来执行密码学计算,这使得他们的投票合约过大而无法存储在区块链上。最终他们将程序拆分为两个智能合约。此外,区块链上的密码学计算成本高昂。相比之下,我们此处的方案仅使用哈希函数,而大多数区块链实例(包括比特币和以太坊)都支持哈希函数。当然,郝等人[18]生成选票的过程较为简单。相比之下,我们所使用的方法需要zkSNARK证明以及多轮次通信。因此,我们的方案具有“胖”客户端和“瘦”区块链代码的特点。[18]中的协议则正好相反。

最近,塔拉索夫和特瓦里[19]提出了一种使用Zcash的互联网投票协议。大致而言,他们要求每位投票者经过身份认证以获得一个Zcash投票代币。随后,投票者可自行私下将他们的Zcash投票代币给予候选人。最后,候选人通过将他们获得的全部Zcash投票代币公开发送至计票地址来展示其得票数。这无疑是一种不同且有趣的方法。然而,该方案高度依赖候选人和投票者的诚实性,且难以追踪异常行为。

1.2 贡献

我们提出了一种简单的比特币投票协议。它允许 n名选民从 L名候选人中选出至少 kmin名、最多 kmax名胜出者,并使用比特币为胜出者提供资金。技术层面而言,该协议有两个改进:

– 我们扩展了[23]中的选票生成方法,以支持多于两位的候选人。当 kmin= kmax= 1、L= 2时,我们的扩展方法与[23]中的效果相同。
– 我们设计了一个更简单的投票协议,使用更少的交易。该协议采用“同时定时承诺”[2]以及BIP 65[20]中的一个操作码,以防止交易延展性攻击,并确保选民和候选人的公平性。

我们的比特币投票协议引入了针对多位胜出者和不诚实选民的新政策。大致而言,如果有多位胜出者,他们将平分所有投票者的资金。如果部分投票者在最终结果揭晓前终止投票流程,则在预期时间段后,他们的押金将由所有候选人共享,而他们的资金将被退还。与[23],中的不可花费的奖励相比,我们的政策更加公平。

2 预备知识

本节简要概述了比特币系统及其基本假设、比特币交易符号,以及BIP 65提案在“定时承诺”设计模式中的应用。

2.1 比特币概述

比特币系统

比特币系统包含一条由区块组成的链。每个区块包含一个区块头和一些比特币交易。每笔交易都有一个身份,即该交易的完整内容的哈希值。一个区块中所有交易的身份构成默克尔树的叶子节点。默克尔树的根存储在区块头的一个字段中。因此,交易通过区块头被绑定在一起。区块头中的另一个字段是前一个区块头的哈希值。该字段使各个区块形成一条链。新区块通过工作量证明共识机制生成。铸币者计算区块头候选者的哈希值,以生成并广播新区块。当大多数铸币者验证并接受该新区块后,它将被添加到链上,其中的交易也随之被确认一次。

比特币系统的基本假设

对比特币系统存在一些常见假设[3,16]。

  1. 假设各方通过不安全信道连接。
  2. 假设各方均可访问比特币区块链的当前内容。
  3. 假设各方可在最大延迟 maxD内向比特币区块链发布交易。
  4. 区块链上的已确认交易具有防篡改性。

假设2和假设3指出,每一方都可以连接到比特币区块链。如果Heilman等人[13]和Gervais等人[9]的观察结果无法得到解决,则这些假设不成立。他们的攻击可能导致双重支付,从而破坏任何电子现金系统的基础。我们相信比特币系统将采纳[8,9,13,14]中的建议来防御此类攻击。因此,只要比特币系统可用,假设2和假设3就成立。

比特币交易

一笔比特币交易包含若干输入和输出。我们沿用[3]中的方法,用一个方框表示一笔交易。在图1中,我们给出了两笔交易 TA和 TB。交易的创建者表示为 A和 B,它们实际上是两个公钥。如果 TB的一个输入包含了 TxID的 TA以及 TA的一个输出索引,则 TB的该输入应连接到 TA的对应输出。这种连接在图1中用带箭头的线表示。TB通常被称为 TA的赎回交易。

TB的输入包含与 TA的输出脚本(os)相匹配的输入脚本(is)。大致来说,

TB的输入脚本包含一个签名 SigB

以及公钥 B。TB的签名消息包含 TA的输出脚本和 TB的所有内容,但不包括输入脚本。此签名消息记为[TB]。有时需要表示一个交易中除输入脚本外的内容,这被称为简化交易[23]。它并不等同于包含其连接交易某些信息的交易的签名消息。TA的输出脚本包含公钥 B的哈希值和一个签名验证命令。为了将 TB连接到 TA,铸币者将TA输出脚本中的哈希值与 TB输入脚本中的公钥哈希值进行匹配,并验证 TB输入脚本中的签名。TA的连接要求记为 os(body, δB)。也就是说,输出脚本要求一个签名消息和一个签名来形成验证条件。这里的验证条件主要是验证一个签名,记为 verB(body, δB)。此处的签名消息 body需要是[TB]。一笔交易的输出还包括表示比特币的价值。图1中的符号 C和 δC表示任意用户 C的公钥及其签名。

2.2 BIP65 Proposal

交易中的LOCKTIME字段可防止该交易在达到特定区块高度或时间之前被挖出。它可以用来证明未来某个时刻可以赎回该交易输出。例如,如果图 TB 1中的LOCKTIME设置了{v1}字段,则 TB交易未来可以赎回TA的输出。此功能被用于“索赔或退款”[4]和“定时承诺”[3]模式中。

然而,LOCKTIME字段无法证明在未来的某个时间之前不可能花费一笔交易的输出。也就是说,交易中的输出无法对任何赎回交易施加时间限制。BIP 65注意到了这个问题,并为比特币脚本系统提出了一种操作码 CHECKLOCKTIMEVERIFY,允许将交易输出设置为在未来的某个时间点之前不可花费。该操作码将其在交易中的参数与另一笔赎回交易的LOCKTIME字段进行比较。如果该参数大于

函数的定时承诺方案)

LOCKTIME字段时,操作码返回false且验证失败。它间接验证了期望的区块高度或时间已被达到。

由于CHECKLOCKTIMEVERIFY操作码的参数决定了输出可能被赎回的时间,我们使用符号CH(t)表示该操作码,其中t是参数,CH是操作码。我们在图2中使用CH(·)函数重写了“定时承诺”模式。

在图2中,A和B是两方的公钥。比特币区块链包含一笔未赎回的交易TA,该交易可通过密钥A赎回,价值为dB。

– 在承诺阶段,拥有密钥A的承诺者计算h = H(x)。他向比特币区块链发送交易CommitA。这意味着他揭示了h,因为它是交易的一部分。同时,它使用CH(t)函数指定一个未来的时间点t,在此之后该函数返回true。
– 在公开阶段,承诺者向比特币区块链发送交易OpenA,揭示秘密x。如果在时间t内,交易OpenA未出现在区块链上,则拥有密钥B的一方将交易PayB发送到区块链并获得dB。

显然,承诺者无需创建PayB transaction。这降低了通信成本,并简化了时间锁定承诺模式的整体逻辑。

3 比特币投票协议审查

赵和陈[23]提出了比特币投票场景。有n位选民,每位选民希望用1B资金支持两位候选人中的一位。获胜的

候选人通过多数投票选出(假设n为奇数)。投票协议应具有以下属性:

– 隐私性和可验证性。只有每个候选人收到的选票数量是公开的,而个人投票信息则保持隐私。然而,每位投票者仍可证明自己遵守了协议。例如,没有任何投票者可以为同一候选人重复投票。
– 不可撤销性。一旦投票的最终结果公布,获胜者将guaranteed获得全部资金nB.即使投票者所支持的候选人未获胜,该投票者也不能撤回其资金。

有趣的特性是关于选票隐私。赵和陈[23]提出了一种解决方案,其中选票实际上是一个哈希值。他们的解决方案包含两个协议。一个是投票承诺协议。在该协议中,选民可证明地共享一些总和为零的随机数。每位选民使用其随机数可证明地构造一张选票,并对选票进行承诺。另一个是投票协议,其中每位选民公平地打开其承诺。由于选票看起来像一个随机数,比特币节点只能将选票相加以统计某候选人的得票数。他们使用“索赔或退款”和“同时定时承诺”两种模式来满足不可撤销性。在简要回顾中,我们仅展示他们使用“同时定时承诺”模式的投票协议,因为该模式在通信上比使用“索赔或退款”模式更高效。

3.1 投票承诺协议回顾

共有n位选民{P1,…, Pn}。每位投票者拥有一张秘密选票Oi ∈{0, 1}。每位投票者都拥有zkSNARKs的证明和验证密钥。对于每个i ∈{1,…, n},我们使用VCi(Oi)表示用投票Oi生成承诺选票的流程。VCi(Oi)流程如下:

  1. 随机数生成 。生成n个秘密的随机数rij ∈ ZN,其中j ∈{1,…, n},使得它们的和为0,其中N是大于数字n的最小2的幂。对于j ∈{1,…, n},计算随机数的承诺函数(cij, kij) ← Commit(rij),其中kij是承诺cij的打开密钥。生成使用zkSNARK证明∑j rij= 0对于j ∈{1,…, n}成立的零知识证明。将承诺和零知识证明广播给所有选民。
  2. 随机数证明验证 。接收承诺并验证所有其他方的零知识证明。
  3. 密钥分发 。对于所有j ∈{1,…, n}{i},向Pj发送打开密钥kij。
  4. 可验证选票生成 。对于所有j ∈{1,…, n}{i},等待来自Pj的打开密钥kji,并验证rji= Open(cji, kji) ≠ ⊥。计算ˆRi ← ∑j rji和Oi ← Ri+ Oi,并承诺(Ci, Ki) ← Commit(Ri)并

(Ĉi, K̂i) ← Commit(Ôi),其中Ki,K̂i为打开密钥。使用zkSNARK为以下约束生成零知识证明:
(a) Ri=∑j rji。ˆ
(b) Ĉi中的承诺函数值减去 Ci中的承诺函数值,结果为0或1。
5. 选票证明分发 。广播承诺Ci、Ĉi以及zkSNARK的证明。
6. 选票证明验证 。接收并验证来自其他各方的所有证明。

请注意,公开密钥分发步骤需要在每位选民之间建立安全信道。对于投票者Pi,VCi(Oi)过程需要n−1次安全单播和2次公开广播。此外,还需要运行zkSNARK3次以生成证明,并进行3(n−1)次证明验证。

3.2 投票协议回顾

利用所有已承诺选票,投票者可以生成或验证联合交易中的约束条件。在联合交易被比特币区块链确认后,投票者可打开其已承诺选票以取回押金,或选择不打开从而支付押金作为罚金。赵和陈[23]考虑了交易延展性问题,并采用门限签名方案来防止投票者提前申领其押金。注意,简化交易是指排除输入脚本的交易[23]。接下来,我们从Pi的角度描述他们的协议。

  1. 门限签名密钥生成 。Pi与其他投票者运行(n‐n)门限签名密钥生成算法,联合生成一个组ˆˆ地址pk并获得其私钥份额ski。
  2. 锁定交易 。Pi创建一笔交易LOCKi。其输入为(1+ d) Bˆ归Pi所有,输出为群公钥的地址pk。建议用于押金的金额d为2n。额外的1B用于资助获胜者。
  3. 返还交易 。Pi创建一笔简化交易BACKi,将资金从LOCKi返还至Pi的一个比特币地址pki。Pi向所有其他选民广播该简化交易BACKi。在收到BACKj对应j ∈{1,…, n}{i}时,Pi检查其输入所引用的哈希值不是hash(LOCKi)。也就是说,BACKj并未赎回Pi的押金。对于每个j ∈{1,…, n},Pi使用其秘密密钥份额ski运行门限签名算法对ˆBACKj进行签名。
  4. 联合交易 。Pi生成一笔简化交易JOIN,具体如下:
    – 该交易有n个输入,每个输入均指向一笔LOCKj交易,该交易为1 ≤ j ≤ n贡献了(1+ d)B。注意,Pi通过返还交易生成过程已知所有LOCKj的身份。
    – 该交易有n+ 1个输出:
    • out‐depositj, j ∈{1,…, n}:每个值为dB,需要满足以下任一条件:
    (1) 打开密钥ˆKi和一个可用Pi的比特币公钥pki验证的签名,或
    (2) 一个可用门限签名公钥ˆpk验证的有效签名。
    • out-prize:该输出的价值为nB,并且需要所有打开密钥Ki以及获胜者的签名。输出脚本包含用于确定获胜者的表达式。读者可以验证,如果某些打开密钥不可用,则无法花费该奖金。

Pi随后与其他选民运行门限签名算法,生成用于赎回nLOCKj交易的n签名,以获得1 ≤ j ≤ n。

  1. 支付交易 。Pi生成一个时间锁定的交易PAYj,可用于赎回out‐depositi输出以获得1 ≤ j ≤ n。PAYj的输出脚本将Pj的押金在候选人之间分配。也就是说,Pj可能在未来某个时间点受到惩罚。Pi与其他选民运行门限签名算法,对每个PAYj交易进行签名。
  2. 锁‐联合‐退回流程 。投票者Pi向比特币区块链提交LOCKi。当所有LOCKj对于1 ≤ j ≤ n都出现在比特币区块链上后,JOIN交易被提交至区块链。如果在BACK交易中的时间锁定时间过后,区块链上仍未出现任何JOIN交易,则Pi通过提交BACKi来终止整个协议,以取回LOCKi中的(1+ d)B。
  3. 申领交易 。Pi创建CLAIMi交易,提供公开密钥Ki以揭示已承诺的选票Oi,并取回其押金。
  4. 胜者交易 。获胜者候选人生成一笔Winner交易,以兑现在out‐prize输出中的nB。
  5. 公开揭示流程 。在JOIN交易出现在比特币区块链上后,每位投票者提交他们的CLAIM交易。如果所有选民都已提交其CLAIM交易,则确定获胜的候选人,该候选人可提交Winner交易。否则,将使用PAY交易来分配部分选民的押金。

除了门限签名密钥生成算法外,投票协议包含六笔交易和两个流程。投票者Pi需要与其他选民共同创建BACK、Joint和PAY交易,以生成2n+ 1签名。该协议需要产生n(2n+ 1)个门限签名,这意味着选民之间存在较大的通信与计算开销。该协议的比特币轮次为4轮。第一轮用于LOCK交易。第二轮用于JOIN交易。第三轮用于BACK或CLAIM交易。最后一轮用于Winner交易或PAY交易。

4 通用比特币投票协议

赵和陈的比特币协议显然是一种典型的“是/否”选举,它是认可投票的一种特殊情况。在认可投票中,投票者可以从L名候选人中选择至少kmin、至多kmax名。一个有效的单次投票需满足以下条件

$$
{v_1,…, v_L: v_i \in {0, 1}, \sum_{i=1}^{L} v_i \in [k_{min},k_{max}]}. \quad (1)
$$

我们使用VCi(Oi)过程作为子程序,设计了一种灵活的投票承诺函数协议,并重新设计了投票“协定议时。承诺”模式足以防御交易延展性攻击,因为无需对未上比特币区块链的任何交易进行签名。通过BIP 65提案,表达该逻辑更加高效。当我们结合BIP 65提案使用联合交易时,该联合交易实际上是一种由所有参与方签名的支持时间约束的合约。任何一方都可以作为发起者创建联合交易的主体,对其进行签名,并将其发送给下一位参与者。下一位参与者可验证交易主体内容,若同意交易中的所有约束条件,则对该交易进行签名,并将带有两个签名的联合交易发送给下一位参与者。当最后一位参与者收到交易并完成签名后,即可将该交易提交至比特币区块链。若该联合交易被确认,则所有参与者的未花费比特币将被赎回。若该联合交易未出现在比特币区块链上,则无人会损失其币。若联合交易中某一输入所引用的未花费输出已被赎回,则整个联合交易无效,也不会出现在区块链上。我们在此利用该方法设计了一种更简单的比特币投票协议。

4.1 灵活的投票承诺协议

列出的候选人按{1,…, L}表示的顺序排列,共有L名候选人。共有n名选民{P1,…, Pn}。每位投票者Pi针对候选人c有一个秘密投票vci ∈{0, 1}。每位投票者都拥有用于zkSNARK的证明和验证密钥。对于每个i ∈{1,…, n},Pi的流程如下。

  1. 调用VCi(vci),由1 ≤ c ≤ L生成L已承诺选票Ĉci和Cci。注意ˆˆˆˆˆˆ(Cci, Kci) ← Commit(Rci)、(Ĉci, K̂ci) ← Commit(Ôci)、Ôci= Rci+ vci以及Rci由所有选民协作生成。
  2. 使用zkSNARK为以下内容生成并公开广播零知识证明:
    (a) Ĉci中c ∈{1,…, L}的已承诺值之和减去Cci中的值之和属于[kmin, kmax]。
  3. 接收并验证来自其他各方的所有证明。

即,该协议使用赵和陈的投票承诺协议对候选人进行“是/否”投票。共有L位候选人,以及L轮调用。在每轮调用中,VC(vic)过程已证明vic ∈{0, 1}。附加的证明表明,投票者已形成一个满足公式(1)的有效单票。如果L=1,kmin= 0,kmax= 1,则表示对该候选人的“是/否”认可。如果L=2,kmin= kmax= 1,其功能与赵和陈的协议相同,而一般方法如预期般效率低下。它支持L> 2的情况,复杂度呈线性增长。

4.2 SimplerVote投票协议

在拥有所有承诺的投票后,投票者可以生成或验证联合交易中的约束条件。从Pi的角度来看,投票协议的执行过程如下。

  1. 交易交换 。Pi广播一笔交易TPi其价值为d+ 1B。Pi接收所有选民的交易,并检查每笔交易是否包含价值至少为d+ 1 B的未花费输出。
  2. 联合承诺交易 。Pi生成如下简化交易JOINT COM:
    – 它有n个输入,每个输入引用了一笔交易,其中包含(1+ d) B拥有的由投票者。
    – 它有n+ 1个输出。
    • out‐depositi, i ∈{1,…, n}:每个价值dB,且需要以下任一条件
    (1) 打开密钥{K̂ci:c ∈{1,…, L}}和一个签名δPi ver-可使用Pi的公钥pki验证,或
    (2) 一个CH(t)函数返回true以及来自候选人的有效签名{δC1,…, δCL},使用Bit-公钥{C1,…, CL}
    • out‐prize:其价值为nB,且需要所有打开密钥{K̂ci:c ∈{1,…, L}, i ∈{1,…, n}}以及来自获胜候选人或所有选民的签名。如果可能,获胜候选人将被计算为一个获胜者集合WinSet。若某个候选人Cc的相关选票总和∑i Open(Ĉci, K̂ci)等于所有候选人记录中的最大值,则该候选人放入该集合中。即
    $$
    WinSet=\left{c\left|\sum_i Open(\hat{C}_c^i, \hat{K}_c^i)= \max\left(\sum_i Open(\hat{C}_v^i, \hat{K}_v^i)\right|v={1,\dots, L}\right)\right}.
    $$
    对于获胜者集合中的所有胜出候选人,应将其签名作为输入,并由他们共享所有资金。然而,如果没有足够的打开密钥来选出胜出者,则当CH(t+ maxD)函数返回true时,资金将退还给每位投票者。
  3. 联合承诺流程 。Pi收到来自Pi−1的由P1,…, Pi−1签名的部分JOINT COM交易。如果i= 1,它未收到任何内容,并创建简化的JOINT COM交易。Pi随后检查JOINT COM交易中的先前签名T xIDs和约束条件。如果一切正常,Pi对JOINT COM交易进行签名,并将其发送给Pi+1。如果i= n,则将JOINT COM交易提交至比特币区块链。
  4. 申领交易 。Pi生成一笔CLAIMPi交易以取回其押金ˆ,该交易提供打开密钥{K̂ci:c ∈{1,…, L}}以揭示其已承诺的投票。
  5. 胜出者交易 。当投票结果公布后,WinSet即被确定。WinSet中的胜出者联合创建一笔WIN交易以共享out‐prize输出。该WIN交易的输入脚本包含所有选票的打开密钥以及所有预期胜出者的签名。该WIN交易的输出包括每位胜出者的地址和比特币金额,每位胜出者均需进行核对。
  6. 联合申领交易 。L候选人共同创建一个JOINT CLAIM交易,以分担投票者的罚金。该交易有一个输入,指向JOINT COM交易的一个输出。它包含L个输出。每个输出有⌊d/L⌋B,并需要候选人的有效签名。注意,在计算⌊·⌋函数时,自然使用比特币的最小单位“satoshi”。
  7. 失败返还交易 。在JOINT COM交易确认后,一些投票者可能拒绝公开其选票。尽管这些投票者将失去他们的押金,但他们确实有机会通过此交易拿回资金。该交易有一个输入,指向n+ 1th交易的JOINT COM输出。它包含n个输出,每个输出有1B,并且需要所有投票者的签名。
  8. 申领‐获胜和联合申领‐失败返还流程 。在JOINT COM交易确认后,Pi提交其CLAIMPi交易。如果所有选民都提交了他们的申领交易,则候选人本地计算出胜出者。胜出者创建WIN交易并将其提交至比特币区块链。如果有部分选民停止而未提交申领交易,则他们的押金将通过候选人的JOINT CLAIM交易分配给所有候选人。候选人在一个maxD时间段内获得奖金或收取不诚实选民的押金后,可通过FAIL RETURN交易将资金返还给所有选民。

该协议的时间线如下:
– 从投票者Pi的角度来看,我们假设在时间t0i,Pi接收到一个部分JOINT COM交易。它应检查CH(·)函数中的参数t,以确保其他参与方有足够的时间联合创建交易并申领其押金。设Δ为投票者处理该部分交易的时间。Pi应检查t−t0i ≥(n+ 1 − i)Δ+ 2maxD。在时间t1i ≥ t0i+(n+ 1 − i)Δ+ maxD,如果Pi在比特币区块链上未看到JOINT COM交易,则它将赎回其交易TPi,以坚决终止该协议。否则,Pi提交CLAIMPi交易以取回其押金。在时间t2i ≥ t+maxD,如果有部分选民未申领其押金,Pi将收到一个部分FAIL RETURN交易。Pi应检查其地址是否在输出脚本中,签名后将其交给另一名投票者。
– 从候选人Cw的角度来看,在JOINT COM交易在比特币区块链上完全确认后,该候选人将注意到交易中的时间参数t。在时间t0w> t,该候选人检查是否所有投票者都已公开其选票。如果存在一些未公开选票的投票者,所有候选人有机会通过JOINT CLAIM交易逐一联合没收这些投票者的押金。否则,候选人检查自己是否为获胜者。如果该候选人不是获胜者,则无需进一步操作;如果其在获胜者集合中,则该候选人有机会联合创建WIN交易以分享奖金。

除了交易交换过程外,更简单的投票协议包括五笔交易和两个流程。不使用门限签名必需。我们在图3中展示了该协议的主要步骤。该协议最多需要4个比特币轮次。第一轮用于JOINT COM交易。第二轮用于CLAIM交易。第三轮用于WIN或JOINT CLAIM交易。可能的最终一轮用于FAIL RETURN交易。

4.3 协议分析

我们分析了比特币投票协议的预期属性,并考虑了一些潜在问题。

隐私 。在投票协议中,Pi披露的投票为Ôci ← Rci+ vci,对应于c ∈{1,…, L},其中vic是针对候选人Cc的真实投票。由于Rci是一个为此投票分布式生成的随机值仅使用一次,且无人能以显著优势猜出vic。因此,个人投票保持私密。

可验证性 。在投票协议中,每位投票者只有一次机会在比特币区块链上进行投票。如果投票被正确构造,投票者不遵守协议只会损失其押金。在投票承诺协议中,有n(2L+ 1)个zkSNARK证明以确保每位投票者行为正确。基本上,这些证明表明随机数生成正确、随机数求和正确、针对候选人的选票构造正确,以及所有候选人的投票构造正确。

不可撤销性 。当投票的最终选票被公开后,获胜者集合WinSet即被确定。在该JOINT COM交易中唯一的未花费输出是n+1th输出,该输出可由WinSet中的所有胜出者或所有选民花费。请注意,一旦JOINT COM交易得到确认,所有投票者的押金和资金都已被赎回。只要比特币区块链能够防止双重支付,任何投票者都无法取回其资金,除非其所投票的候选人获胜,或者所有选民一致同意取回资金。即使所有选民都希望取回资金,他们也必须首先等待一个maxD时间段,以便胜出者联合申领他们的奖金。

安全通道要求 。正如我们所指出的,投票承诺协议需要在任意两个投票者之间建立安全单播通道。可以大致通过比特币交易按如下方式建立安全信道。假设投票提交协议中的“交易交换”步骤在投票承诺协议之前执行。并且我们要求Pi的交换交易应是由Pi签名的交易。让Pi创建一笔将d+ 1 B作为新输出的交易是自然的。接下来,Pi可以通过Diffie‐Hellman协议和当前区块头哈希值与Pj生成一个动态的共享密钥。也就是说,Pi和Pj使用他们在交换交易中的公钥建立一个固定密钥值,并利用当前区块头哈希值对该密钥进行更新。随着区块链的增长,该密钥持续更新。此密钥可用作对称密钥,以在两个投票者之间建立安全信道。

不合作选民 。我们的提议需要选民合作生成JOINT COM交易。如果其中一些人不合作,其他选民可以在没有经济损失的情况下退出。如果某些投票者拒绝公开他们的选票,则这些投票者的押金将由候选人共享。现在所有投票者都可以生成FAIL RETURN交易以取回他们的资金。然而,如果某些投票者不合作生成交易,则无法取回他们的资金。为了解决这个问题,一种简单的方法是拆分n+ 1th将JOINT COM交易的输出拆分为n个输出,每个输出为1B。尽管此方法增加了胜出者的交易数量,但对诚实选民更为公平。

比较 。我们给出表1来总结我们的协议与赵和陈[23]协议的主要差异。我们的协议是通用的,因为它支持L ≥ 1位候选人。并且我们的协议更简单,因为我们移除了门限签名并减少了交易数量。区块链上的交易数量可能因不同事件而异。至少,在[23],中应包含锁定、联合、申领、胜者交易。区块链上的交易数量为2n+ 2。相比之下,我们的协议需要联合承诺、申领、获胜者交易。区块链上的交易数量为n+ 2。

交易编号 门限签名 候选人编号
[23] 我们的 2n+2 n+2 n(2n+1) 2
0 L ≥ 1

5 结论

本文提出了一种简单的比特币投票协议。该协议依赖于区块链外的zkSNARK证明,为L候选人生成经过验证的选票。然后采用同时定时承诺模式,使投票者确认其选票,并确保选票应当公开。与近期的以太坊投票智能合约[18],相比,我们的协议展示了一种设计轻量级区块链代码以完成比特币投票任务的方法。显然,如果将资金设置为零B,我们的协议即成为一个纯粹的去中心化投票协议。与赵和陈的工作[23],相比,我们的协议更加公平、简单且高效。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值