一种基于区块链的强匿名电子投票协议

文档序号:26938126发布日期:2021-10-12 13:20阅读:102来源:国知局
一种基于区块链的强匿名电子投票协议

1.本发明属于信息安全领域,具体涉及一种基于区块链的强匿名电子投票协议。


背景技术:

2.区块链具有去中心化、不可篡改、匿名性等特点,无中心化ttp,使得数据不会被某一方主导,数据存入区块链后无法修改,增加了数据的可信性,匿名性则可保护用户隐私,天然符合电子投票系统的需求。区块链技术诞生以来,学术界和工业界对其本身的优化及其在各个领域的应用进行了深入的研究,投票也是区块链技术的探索应用领域之一。比特币(bitcoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的p2p网络。比特币是一种p2p形式的数字货币。点对点的传输意味着一个去中心化的支付系统。比特币作为新型的去中心化的数字货币在投票、设计公平交换协议等领域也有着广泛的应用。当前基于比特币的投票方案中,对投票者的身份隐私保护不足,影响了投票的公平性。混淆问题源自程序混淆,目的在于通过一定的技术手段,在保持原程序的功能不变的同时使得程序变的“不可识别”,是密码学研究的热点之一。
3.关于区块链在投票领域上的应用,zhao等人较早提出使用比特币设计投票协议,他们的方案在于使得n个投票人各拥有1个比特币,为两个候选人之一进行投票,此协议只能进行2选1投票。另外在该方案中存在丧失匿名性的问题,投票的公平性无法保证。jason等人提出一种prepaid bitcoin cards(pbcs),pbc包含预支付了比特币的地址及对应私钥,但其方案分发实物浪费人力物力。bartolucci等人设计了一种基于份额的区块链投票协议,即所谓sharvot协议,但无法满足多候选人和多选票人的需求。takabatake等人使用zerocoin辅助比特币来为选票提供匿名性,但当投票规模较大时效率较低。


技术实现要素:

4.为解决现有技术的上述问题,本发明提供一种基于区块链的强匿名电子投票协议,实现了n个投票者在m个候选者中匿名选出一个获胜者的目的,解决了匿名性的问题。通过兼容比特币区块链确保数据的可信性,借助混币策略为投票过程提供强匿名性,确保投票者的隐私安全,增强投票的公平性。链上交易方案可确保投票者数量不受比特币脚本限制,并且投票失败可赎回比特币。
5.本发明提供的协议具体如下:
6.该协议包括监管者、混淆商、投票者、候选者、区块链五类实体。
7.所述监管者为所述协议引入的可信第三方(trusted third party,简称ttp),实体对应为政府、银行等可信权威机构。监管者审核申请注册的投票者、候选者及混淆商,负责公开协议执行过程中的部分信息并向混淆商颁发群证书。监管者的引入牺牲了一定的去中心化属性,但极大提升了协议执行效率,增加了协议安全性,是值得的。
8.所述候选者为被投票者,向监管者申请注册并成功才可被投票,获得票数最多的候选者胜出。
9.所述投票者向监管者申请注册并成功后可获得投票权,混淆身份后构造选票,将其投给期望的候选者。
10.所述混淆商向监管者申请群证书后才会被投票者认可,对合法投票者的比特币地址进行混淆,将比特币转移到匿名比特币地址。
11.所述区块链为数据存储和协议执行的基础设施,以匿名且不可篡改的方式记录投票情况。
12.所述监管者审核后共有m个候选者c
j
={c1,c2,...,c
m
},n个投票者u
i
={u1,u2,...,u
n
},候选者取得至少k个选票才可胜出;所述协议分为预投票和投票两个阶段:
13.s1、预投票阶段
14.所述预投票阶段,分为身份注册、身份混淆、选票生成三个步骤。
15.其所述步骤具体为:
16.s1.1身份注册
17.所述身份注册指的是候选者、投票者和混淆商向监管者提交信息注册,审核后构造投票者列表、公布候选者列表并向混淆商颁发群证书。具体为:
18.确定投票者和候选者的个数进行注册;设定有n个投票者u
i
={u1,u2,...,u
n
}和m个候选者c
j
={c1,c2,...,c
m
}。其中,每个投票者u
i
须有一个包含足够比特币的地址(bitcoin address,简称ba
i
),其对应公私钥对为(pu
i
,pr
i
)。投票者向监管者提交ba
i
及对应公钥和个人信息(包括身份签名)进行身份注册,监管者审核身份信息并验证签名与比特币地址对应后,为合格的投票者分发投票者编号(voter number,简称vn),并将其加入到投票者列表(voters list,简称vl),vl的每条记录由投票者的编号vn
i
和比特币地址ba
i
组成。
19.每个候选者构造c
j
一对公私钥对pu
j
=pr
j
*g,保留私钥pr
j
,向监管者提交公钥pu
j
及身份信息进行注册,监管者审核后,构造候选者列表(candidates list,简称cl)并公布,cl包括候选者的身份说明及其对应公钥。
20.每个混淆商向监管者提交身份信息注册,审核通过后向其颁发群证书。
21.s1.2身份混淆
22.所述身份混淆指的是审核通过的投票者通过混淆商执行混币协议得到匿名比特币地址,监管者公布匿名投票者列表。具体为:
23.集合vl中的所有合法投票者u
i
执行混币协议获得用于存储投票的匿名的比特币地址(anonymous bitcoin address,简称aba);在混淆协议完成后,监管者发布匿名地址列表(anonymous voters list,简称avl),avl={aba
i
}
i∈{1,...,n}

24.s1.3选票生成
25.所述选票生成指的是匿名投票者使用匿名比特币地址执行联合shamir随机秘密共享获取秘密份额,并使用秘密份额构造选票。具体为:
26.每个投票者用自己的公钥加密秘密份额s
i
和支持的候选者的编号来构造选票,例如投票者u
i
给候选者c
j
投票,那么该票的形式为
27.s2、投票阶段
28.所述投票阶段分为构造投票交易、收集选票、投票成功、投票失败四个步骤。所述投票阶段主要任务是投票者构造投票交易,将选票公布于区块链上,候选者解密选票获取
秘密份额。如果有候选者收集足够的秘密份额则投票成功,获胜的候选者构造获胜交易,如果投票失败则由投票者构造退款交易。其所述步骤具体为:
29.s2.1构造投票交易
30.所述构造投票交易指的是匿名投票者列表中的每个投票者构造投票交易,将预投票阶段生成的选票公开到区块链上,设置交易输出的解锁条件为胜出的投票者或超时由自己解锁。其中,在比特币协议中主要采用p2sh脚本和cltv操作符,以实现匿名电子投票。特币中每个交易可包含多个输入脚本和多个输出脚本,这些用于创建交易的脚本使用基于堆栈的脚本语言编写。每个输入脚本与来源交易的输出脚本关联,直至创块(coinbase)交易。在p2pkh(payto public key hash)形式中输出脚本仅存储公钥的哈希值,输入脚本则额外存储公钥用于验证是否和哈希值匹配。p2sh(pay to script hash)形式的脚本则用赎回脚本(redeem script)存储单个或多重签名的公钥,而输入脚本需给出所有私钥和序列化的赎回脚本。p2sh简化了比特币交易脚本中多重签名的使用方式,m-n组合的p2sh脚本被假设为公钥个数为n,至少需提供其中的m个公钥对应的签名可以解锁未花费交易输出(unspent transaction output,简称utxo)。具体为:
31.当所有投票者都构造完自己的选票之后,每个投票者u
i
构造投票交易votetx
i
附带选票;交易输出为x个比特币,交易的输入地址为混淆阶段生成的匿名比特币地址aba
i
,选票v
i
被记录于p2sh脚本。
32.投票交易的输出脚本基于“或”条件,条件一或条件二可解锁交易输出。
33.第一个解锁条件是一个p2sh形式的输出脚本。
34.创建m-n组合p2sh形式的utxo时,用户首先需生成赎回脚本,存储所有公钥;在比特币协议中,堆栈语言pushdata操作限制数据最大为520字节,赎回脚本受此限制最多仅能放置15个公钥;脚本形式为:
35.script m<pubkey1>

<pubkey
n
>n op_checkmultisig
36.然后使用hash160算法生成此脚本的20字节长哈希值,创建输出脚本:
37.op_hash160<hash of redeem script>op_equal
38.在p2sh脚本中还可以存储数据,只需将赎回脚本中闲置的公钥位替换为数据。例如有数据data1,data2,则赎回脚本形式为:
39.script m<pubkey1>

<pubkey
n
><data1><data2>n op_checkmultisig
40.投票交易输出脚本第一个解锁条件对应的redeem脚本rs中包含秘密共享的公钥p并存储选票v
i
,使用对应的秘密共享私钥签名可解锁,例如1-1组合,脚本形式为:
41.script 1<p><v
i
>1 op_checkmultisig
42.输出脚本存储通过hash160算法计算rs的20字节长哈希值,形式为:
43.op_hash160<hash(rs)>op_equal
44.第二个解锁条件以p2pkh脚本附带时间锁的形式添加。
45.检查锁定时间验证(check lock time verify,简称cltv)是一种比特币脚本操作符;它可以对交易的某个输出进行时间锁定,而不是锁定整个交易,交易输出中使用cltv操作符后能够限制该输出只能在指定时间之后被解锁。
46.s2.2收集选票
47.所述收集选票指的是每个候选者根据匿名投票者列表查询比特币区块链中的投
票交易,依次尝试解密包含的选票,收集解密成功的选票中存储的秘密份额。
48.该环节候选者收集自己的选票,获取秘密共享份额;具体为:
49.候选者c
j
在区块链上根据avl中所有地址的交易记录查找votetx
i
,查看p2sh脚本中的公开的投票v
i
,依次尝试用自己的私钥pr
j
解密v
i
,成功解密即可获得选票中的私钥份额s
i
以及候选者编号
50.s2.3投票成功
51.所述投票成功指的是候选者若能在规定时间之前收集足够的秘密份额来重构私钥,则构造获胜交易解锁所有投票交易,在本次投票中胜出。具体为:
52.如果某一候选者c
j
成功获取k个或更多的私钥份额s
i
,候选者可为每个投票交易都构造一个获胜交易wintx
j
,也可将多个投票交易的输出作为一个获胜交易的输入,使用秘密(简称s)签署每个输入,解锁投票交易输出脚本的第一个条件,即可获得n个投票交易votetx
i
中所有的utxo;公众可通过查询记录在区块链中的获胜交易来验证该候选者取得足够秘密份额,候选者成功重构秘密共享的私钥,在投票中胜出。
53.获胜交易输入脚本解锁投票交易中p2sh形式utxo,需提供s的签名并包含序列化的赎回脚本:
54.op_0<sig
s
><serialized redeem script>
55.s2.4投票失败
56.所述投票失败指的是若候选者超时之前未能收集足够的秘密份额,则投票者构造退款交易解锁自己构造的投票交易,赎回比特币。如果没有候选者得到足够的有效选票以重构秘密共享的私钥,将导致本次投票失败。具体为:
57.当时间超过t之后,投票交易第二个解锁条件的cltv操作符才会失效,防止投票者在确定投票失败前转走比特币。此后每个投票者u
i
都构造一个退款交易refundtx
i
,将n*x个比特币返还到原匿名地址aba
i
中。此交易输入为投票交易输出脚本的第二个条件,由投票者u
i
使用私钥签署。
58.进一步的,所述s1.2的混币协议主要由监管者、混淆商和用户三类角色组成。监管者为可信第三方,负责验证、签发群证书和审计。混淆商须经监管方认证,向用户提供混币服务,收取一定的混淆费。用户以匿名信道与混淆商通信,通过混淆商将一定数量的比特币从非匿名地址转移到全新的匿名地址。
59.进一步的,所述s1.3中每个投票者u
i
执行联合shamir随机秘密共享,任选秘密值a
0(i)
构造k-1阶多项式任取n个数x
i
(i∈[1,n])代入多项式并将结果f
i
(j)发送给其余n-1个投票者。每个投票者将收到的n个数据求和获得私钥份额为了构造正确的p2sh脚本使投票信息可以被广播,需要计算得到此私钥所对应的公钥;每个投票者u
i
计算公钥份额p
i
=s
i
*g,并将其发给其它合法的投票者。u
i
收到其余n-1个公钥份额p
i
之后,构造完整公钥
[0060]
进一步的,所述s2.4中本投票协议利用比特币的时间锁脚本设计了一个安全回滚
机制,即使在投票失败的情况下,选民提交的比特币仍可被赎回。此时所有投票者取回比特币,重新进行投票。
[0061]
本发明的有益效果是:
[0062]
1、该协议使用区块链确保数据的可信性,借助混币策略为投票过程提供强匿名性,确保投票者的隐私安全,增强投票的公平性。链上交易方案可确保投票者数量不受比特币脚本限制,并且投票失败可赎回比特币。
[0063]
2、该协议在投票之前,投票者需证明自己拥有足够的比特币用于投票,监管者会审核投票者和候选者的身份信息合法性。投票阶段只有avl中的合法投票者才能够执行联合shamir随机秘密共享获得私钥份额s
i
来构造选票,交易阶段只有avl中的地址构造的交易才被认为合法。未通过审核的投票者不会出现在avl中,无法参与秘密共享获取份额,所以无法构造合法选票,投票者无法通过生成多个比特币地址来发动女巫攻击。同时也会因为比特币地址未通过监管者审核而不在公开列表,识破外部敌手若想伪装成系统角色来试图参与投票。
[0064]
3、该协议通过混淆阶段混淆之后投票者u
i
使用aba
i
执行秘密共享及参与比特币交易都是匿名的,混币协议中采用多混淆商的凭证兑换方式避免了单一混淆商泄露用户信息的可能。由于使用匿名比特币地址,所以投票者无法将选票与投票者真实身份关联。这些设计使投票人无法得知当前选情或影响投票者决策,保证了投票的公平性。
[0065]
4、该协议公众可以查询监管者公开的候选者列表和匿名投票者列表来验证投票者和候选者的合法性。协议在混淆阶段切断了匿名比特币地址和真实身份的关联,投票者无法事先向第三方证明拥有投票权。
[0066]
5、该协议在投票阶段投票者需执行联合shamir随机秘密共享才能获取份额,选票中的份额由所有投票者发送的随机参数共同生成,无法事先向第三方证明构造了特定选票。这些措施使投票者无法事先向第三方提供投票的证明,保证了协议的无收据性。
附图说明
[0067]
图1为本发明的结构示意图;
[0068]
图2为本发明的整体框架图;
[0069]
图3为本发明应用混币协议的形式图;
[0070]
图4为本发明投票阶段的流程图。
具体实施方式
[0071]
实施例:
[0072]
附图仅用于示例性说明,不能理解为对本专利的限制,对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。下面结合附图和实施例对本发明的技术方案做进一步说明。
[0073]
如图1所示,本发明候选者、投票者和混淆商向监管者提交信息注册,审核后构造投票者列表、公布候选者列表并向混淆商颁发群证书。本协议假设监管者审核后共有m个候选者c
j
={c1,c2,...,c
m
},n个投票者u
i
={u1,u2,...,u
n
},候选者取得至少k个选票才可胜出。匿名投票者使用匿名比特币地址执行联合shamir随机秘密共享获取秘密份额,并使用
秘密份额构造选票。匿名投票者列表中的每个投票者构造投票交易,将预投票阶段生成的选票公开到区块链上,设置交易输出的解锁条件为胜出的投票者或超时由自己解锁。每个候选者根据匿名投票者列表查询比特币区块链中的投票交易,依次尝试解密包含的选票,收集解密成功的选票中存储的秘密份额。候选者若能在规定时间之前收集足够的秘密份额来重构私钥,则构造获胜交易解锁所有投票交易,在本次投票中胜出。若候选者超时之前未能收集足够的秘密份额,则投票者构造退款交易解锁自己构造的投票交易,赎回比特币。
[0074]
如图2所示,本协议整体分为预投票和投票两个阶段。预投票阶段在链下进行,投票者和候选者注册身份,投票者通过混币协议获得包含比特币的匿名地址,用其执行联合shamir随机秘密共享获取份额并生成选票。投票阶段通过比特币交易在链上进行,所有投票者构造投票交易广播到区块链,候选者收集选票获取秘密份额,若收集到足够份额则构造获胜交易,否则由投票者构造退款交易。
[0075]
s1、预投票阶段
[0076]
s1.1身份注册:
[0077]
确定投票者和候选者的个数进行注册;设定有n个投票者u
i
={u1,u2,...,u
n
}和m个候选者c
j
={c1,c2,...,c
m
}。其中,每个投票者u
i
须有一个包含足够比特币的地址(bitcoin address,简称ba
i
),其对应公私钥对为(pu
i
,pr
i
)。投票者向监管者提交ba
i
及对应公钥和个人信息(包括身份签名)进行身份注册,管理员审核身份信息并验证签名与比特币地址对应后,为合格的投票者分发投票者编号(voter number,简称vn),并将其加入到投票者列表(voters list,简称vl),vl的每条记录由投票者的编号vn
i
和比特币地址ba
i
组成。
[0078]
每个候选者构造c
j
一对公私钥对pu
j
=pr
j
*g,保留私钥pr
j
,向监管者提交公钥pu
j
及身份信息进行注册,监管者审核后,构造候选者列表(candidates list,简称cl)并公布,cl包括候选者的身份说明及其对应公钥。
[0079]
每个混淆商向监管者提交身份信息注册,审核通过后向其颁发群证书。
[0080]
s1.2身份混淆:
[0081]
集合vl中的所有合法投票者u
i
执行混币协议获得用于存储投票的匿名的比特币地址(anonymous bitcoin address,简称aba)。在混淆协议完成后,监管者发布匿名地址列表(anonymous voters list,简称avl),avl={aba
i
}
i∈{1,...,n}

[0082]
如图3所示,混币协议主要由监管者、混淆商和用户三类角色组成。监管者为可信第三方,负责验证、签发群证书和审计。混淆商须经监管方认证,向用户提供混币服务,收取一定的混淆费。用户以匿名信道与混淆商通信,通过混淆商将一定数量的比特币从非匿名地址转移到全新的匿名地址。
[0083]
首先所有混淆商向监管方注册,监管方审核通过后向每个混淆商提供群证书。用户向混淆商a提供包含全新生成的匿名比特币地址的凭证并使用存有一定数量比特币的非匿名比特币地址向混淆商支付转账金额和混淆费,混淆商a验证后对凭证进行群签名后发送给用户。然后用户向任一混淆商n提供群签名和凭证,混淆商验证群签名和凭证后向凭证中的匿名比特币地址支付比特币。这样用户就得到一个含有一定数量比特币的匿名比特币地址(这个地址的用途是什么,是在哪个步骤中体现的预投票阶段:当所有投票者都构造完自己的选票之后,每个投票者u
i
构造投票交易votetx
i
附带选票。交易输出为x个比特币,交易的输入地址为混淆阶段生成的匿名比特币地址aba
i
,选票v
i
被记录于p2sh脚本)。
[0084]
s1.3选票生成:
[0085]
每个投票者u
i
执行联合shamir随机秘密共享,任选秘密值a
0(i)
构造k-1阶多项式任取n个数x
i
(i∈[1,n])代入多项式并将结果f
i
(j)发送给其余n-1个投票者。每个投票者将收到的n个数据求和获得私钥份额构造正确的p2sh脚本使投票信息可以被广播,计算得到此私钥所对应的公钥。每个投票者u
i
计算公钥份额p
i
=s
i
*g,并将其发给其它合法的投票者。u
i
收到其余n-1个公钥份额p
i
之后,构造完整公钥
[0086]
每个投票者用自己的公钥加密秘密份额s
i
和支持的候选者的编号id
cj
来构造选票,例如投票者u
i
给候选者c
j
投票,那么该票的形式为
[0087]
s2投票阶段
[0088]
s2.1构造投票交易:
[0089]
如图4所示,当所有投票者都构造完自己的选票之后,每个投票者u
i
构造投票交易votetx
i
附带选票。交易输出为x个比特币,交易的输入地址为混淆阶段生成的匿名比特币地址aba
i
,选票v
i
被记录于p2sh脚本。
[0090]
投票交易的输出脚本基于“或”条件,条件一或条件二可解锁交易输出。
[0091]
第一个解锁条件是一个p2sh形式的输出脚本。
[0092]
创建m-n组合p2sh形式的utxo时,用户首先需生成赎回脚本,存储所有公钥。在比特币协议中,堆栈语言pushdata操作限制数据最大为520字节,赎回脚本受此限制最多仅能放置15个公钥。
[0093]
脚本形式为:
[0094]
script m<pubkey1>

<pubkey
n
>n op_checkmultisig
[0095]
然后使用hash160算法生成此脚本的20字节长哈希值,创建输出脚本:
[0096]
op_hash160<hash of redeem script>op_equal
[0097]
在p2sh脚本中还可以存储数据,只需将赎回脚本中闲置的公钥位替换为数据。例如有数据data1,data2,则赎回脚本形式为:
[0098]
script m<pubkey1>

<pubkey
n
><data1><data2>n
[0099]
op_checkmultisig
[0100]
投票交易输出脚本第一个解锁条件对应的redeem脚本rs中包含秘密共享的公钥p并存储选票v
i
,使用对应的秘密共享私钥签名可解锁,例如1-1组合,脚本形式为:
[0101]
script 1<p><v
i
>1op_checkmultisig
[0102]
输出脚本存储通过hash160算法计算rs的20字节长哈希值,形式为:
[0103]
op_hash160<hash(rs)>op_equal
[0104]
第二个解锁条件以p2pkh脚本附带时间锁的形式添加。
[0105]
检查锁定时间验证(check lock time verify,简称cltv)是一种比特币脚本操作符。它可以对交易的某个输出进行时间锁定,而不是锁定整个交易,交易输出中使用cltv操
作符后能够限制该输出只能在指定时间之后被解锁。
[0106]
设alice向bob转账,使用p2pkh形式的输出脚本:
[0107]
dup hash160<hash of bob's public key>equalverify
[0108]
checksig
[0109]
使用cltv锁定一段时间,设为2个月,则时间设置为当前区块高度+8640(块)或当前unix纪元时间+5184000(秒)。超时后p2pkh交易将能被bob使用自己的私钥签名解锁:
[0110]
<now+2months>checklocktimeverify drop dup
[0111]
hash160<hash of bob's public key>equalverify checksig
[0112]
投票交易输出脚本第二个解锁条件的p2pkh脚本包含投票者公钥pu,使用cltv操作符锁定一段时间,投票者可在超时后使用自己的私钥签名解锁,锁定一天时形式为:
[0113]
<now+1day>checklocktimeverify drop dup
[0114]
hash160<pu>equalverify checksig
[0115]
s2.2收集选票:
[0116]
该环节候选者收集自己的选票,获取秘密共享份额。
[0117]
候选者c
j
在区块链上根据avl中所有地址的交易记录查找votetx
i
,查看p2sh脚本中的公开的投票v
i
,依次尝试用自己的私钥pr
j
解密v
i
,成功解密即可获得选票中的私钥份额s
i
以及候选者编号id
cj

[0118]
s2.3投票成功:
[0119]
如果某一候选者c
j
成功获取k个或更多的私钥份额s
i
,那么便可通过拉格朗日插值公式重构秘密共享的私钥候选者可为每个投票交易都构造一个获胜交易wintx
j
,也可将多个投票交易的输出作为一个获胜交易的输入,使用s签署每个输入,解锁投票交易输出脚本的第一个条件,即可获得n个投票交易votetx
i
中所有的utxo。公众可通过查询记录在区块链中的获胜交易来验证该候选者取得足够秘密份额,候选者成功重构秘密共享的私钥,在投票中胜出。
[0120]
获胜交易输入脚本解锁投票交易中p2sh形式utxo,需提供s的签名并包含序列化的赎回脚本:
[0121]
op_0<sig
s
><serialized redeem script>
[0122]
s2.4投票失败:
[0123]
如果没有候选者得到足够的有效选票以重构秘密共享的私钥,将导致本次投票失败。
[0124]
当时间超过t之后,投票交易第二个解锁条件的cltv操作符才会失效,防止投票者在确定投票失败前转走比特币。此后每个投票者u
i
都构造一个退款交易refundtx
i
,将n*x个比特币返还到原匿名地址aba
i
中。此交易输入为投票交易输出脚本的第二个条件,由投票者u
i
使用私钥签署。
[0125]
根据上述技术方案,结合具体投票人数和候选人数等做进一步说明:
[0126]
s1、预投票阶段
[0127]
s1.1身份注册:
[0128]
设有3个候选者,6个投票者,其中u
i
代表投票者地址,x代表x个比特币用于投票,σ
(u1)代表投票者地址u1对应的数字签名。
[0129]
每个投票者u
i
均生成自己的地址address
i
和公钥私钥对(pu
i
,pr
i
),每个地址都有1个比特币,其中1比特币是用于投票的比特币,设有6个投票者u1、u2、u3、u4、u5、u6。
[0130]
每个候选者c
j
均生成自己的地址address
j
和公钥私钥对(pu
j
,s
j
),候选者的编号为分别为
[0131]
投票者提交自己的比特币地址和对应的公钥及身份信息向监管者注册,候选者也提交自己的比特币地址和对应的公钥及身份信息向监管者注册。混淆商向监管者提交身份信息注册,然后监管者颁发群证书,混淆商获得认证。候选者公布候选者列表cl。
[0132]
s1.2身份混淆:
[0133]
投票者通过混淆商进行身份混淆获得匿名地址。集合vl中的所有合法投票者u
i
执行混币协议获得用于存储投票的匿名的比特币地址aba。在混淆协议完成后,监管者发布匿名地址列表avl,avl={aba1,aba2,aba3,aba4,aba5,aba6}
[0134]
s1.3选票生成:
[0135]
假设所有人都不弃票,每个投票者u
i
执行联合shamir随机秘密共享,任选秘密值a
0(i)
构造k-1阶多项式任取6个数x
i
(i∈[1,6])代入多项式并将结果f
i
(j)发送给其余5个投票者。每个投票者将收到的6个数据求和获得私钥份额每个投票者u
i
计算公钥份额p
i
=s
i
*g,并将其发给其它合法的投票者。u
i
收到其余5个公钥份额p
i
之后,构造完整公钥每个投票者用自己的公钥加密秘密份额s
i
和支持的候选者的编号来构造选票,投票者u1给候选者c1投票,选票为投票者u2给候选者c1投票,选票为投票者u3给候选者c1投票,选票为投票者u4给候选者c2投票,选票为投票者u5给候选者c2投票,选票为投票者u6给候选者c3投票,选票为
[0136]
s2投票阶段
[0137]
s2.1构造投票交易:
[0138]
当所有投票者都构造完自己的选票之后,每个投票者u
i
构造投票交易votetx
i
附带选票。交易输出为1个比特币,交易的输入地址为混淆阶段生成的匿名比特币地址aba
i
,选票v
i
被记录于p2sh脚本。
[0139]
解锁交易输出,创建m-n组合p2sh形式的utxo,用户首先需生成赎回脚本,存储所有公钥。
[0140]
脚本形式为:
[0141]
script m<pubkey1>

<pubkeyn>n op_checkmultisig
[0142]
创建输出脚本:
[0143]
op_hash160<hash of redeem script>op_equal
[0144]
redeem脚本rs中包含秘密共享的公钥p并存储选票v
i
,使用对应的秘密共享私钥签名可解锁,即1-1组合,脚本形式为:
[0145]
script 1<p><vi>1op_checkmultisig
[0146]
输出脚本存储形式为:
[0147]
op_hash160<hash(rs)>op_equal
[0148]
s2.2收集选票:
[0149]
候选者c
j
在区块链上根据avl中所有地址的交易记录查找votetx
i
,查看p2sh脚本中的公开的投票v
i
,依次尝试用自己的私钥pr
j
解密v
i
,成功解密即可获得选票中的私钥份额s
i
以及候选者编号
[0150]
s2.3投票成功:
[0151]
假设所有投票者都投票成功。最终候选者c1获得3票,候选者c2获得2票,候选者c3获得1票。候选者c1收集到3个不同的私钥份额s
i
后,发起获胜交易,将6个比特币转移到自己的address1上去。
[0152]
s2.4投票失败:
[0153]
假设投票者u6投票失败,当时间超过t之后,投票交易第二个解锁条件的cltv操作符失效,每个投票者u
i
都构造一个退款交易refundtx
i
,将6*1个比特币返还到原匿名地址aba
i
中。
[0154]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改,等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1