基于聚合签名与加密交易的全匿名区块链

2018-10-15 09:04王子钰刘建伟张宗洋3喻
计算机研究与发展 2018年10期
关键词:公钥密文矿工

王子钰刘建伟张宗洋,3喻 辉

1(北京航空航天大学网络空间安全学院 北京 100191)2(北京航空航天大学高等理工学院 北京 100191)3(信息安全国家重点实验室(中国科学院信息工程研究所) 北京 100093)

自从2008年中本聪提出基于区块链技术的比特币这一全新的去中心化的数字货币[1],电子现金技术就此进入了全新的发展篇章[2].传统的电子现金以1983年Chaum提出的盲不可追踪E-cash[3]为代表,用户通过可信中心机构实现交易交互,并利用盲签名技术保护用户隐私.然而在比特币区块链系统中,公开的账本揭示各交易从区块奖励交易(coinbase transaction)到未花费交易输出(unspent transaction output, UTXO)的所有细节.作为用户资产的合法证明,区块链账本包括各历史交易的输入交易签名、面额和输出交易地址;而输出交易地址又可以视为比特币系统用户身份[1,4].研究表明,电子现金的匿名性(anonymity)需要实现假名性(pseudonym)和不可连接性(unlinkability)[5].比特币区块链账本的输出交易地址是签名公钥经过一定杂凑变换的Base58Check编码字符串,具有一定程度的假名性;但由于交易关系在区块链中是显式表达的,各用户之间并非不可连接的.因此,比特币系统不匿名且容易泄露用户隐私[6].

针对比特币系统用户隐私的常见攻击方式为去匿名化(deanonymous)攻击[7-10],该攻击包括3个步骤[11]:根据区块链账本生成交易图;根据交易内容将交易图转化为地址图;根据社会工程学意义上的交易习惯将地址图转化为用户实体图.这些交易习惯包括:重叠的交易输入意味着多个输入交易地址被同一个用户实体控制;唯一的新产生的输出地址很可能是输入交易用户控制的找零地址.

需要指出的是,本文探讨的匿名性仅涉及区块链账本的协议层面,而针对点对点(peer-to-peer, P2P)网络的去匿名化攻击不在本文的探讨范围内.学术界针对区块链账本式数字货币协议层隐私保护提升措施包括3个方面:

1) 混币(Mixing).为打破交易之间的相互连接关系,Maxwell于2013年提出CoinJoin的思想[12],即若干用户执行相应协议,将等额比特币的交易输出至新生成的地址,从而混淆交易中的连接关系.基于这一思想的混币协议有众多改进和变体[13-23].尽管这些研究成果打破交易实体间联系,但是本质只保护了用户身份隐私,混币交易仍旧暴露交易金额.

2) 替代币(Altcoin).由于比特币系统在隐私性、交易速度、可扩展性等许多方面并不完美,因此基于区块链技术的替代币亦受到学者们的广泛关注,主要包括门罗币(Monero)[24],ZeroCoin[25]和ZeroCash[26].但这些替代币也各有缺陷.门罗币基本思想是同时混淆全网当前待执行的若干笔交易,本质仍借鉴了CoinJoin的混币概念,而门罗币分析攻击[27-28]表明非强制性混币的设计不足以迫使用户主动确保交易匿名集,弱匿名集的交易乃至非匿名性交易的增殖效应将大大削弱系统整体匿名性;且门罗币在不使用RingCT的情况下也无法保护交易金额隐私.ZeroCoin[25]只保护付款者隐私;ZeroCash[26]在其基础上将扩展隐私保护的内容到付款者、付款金额及收款者三方面,实现全匿名区块链系统,但该方案的效率较低.

3) 加密交易(confidential transaction, CT).Maxwell在2015年首次提出了基于Pedersen承诺的加密交易思想[29].矿工(miner)可在具体交易金额未知的前提下利用承诺同态性对交易的输入和输出总和进行验证.之后,该思想被持续完善与补充[30-31].但是Pedersen承诺在标准加密交易中无“打开承诺”的操作,交易收款者仍需额外通信信道协商交易金额.Dumb Account方案[32]利用非交互式零知识(none interactive zero knowledge,NIZK)证明技术来验证基于Paillier同态密文交易的合法性,符合CT的理念并可直接解密密文;但是其密文和公钥过长将导致交易效率极低.上述金额加密方案都未改善输入输出的不可连接性,仍旧暴露用户隐私.Ruffing和Moreno-Sanchez[33]在2018年将CT和CoinJoin的概念结合,提出了分布式隐藏交易金额的ValueShuffle协议,该协议同样因为无强制混币要求而不能抵抗分析攻击[27-28].

综上所述,本文研究一种实现收付款者身份隐私保护、交易金额加密的全匿名区块链方案;该方案因系统性强制嵌入混币操作到全区块中,以抗文献[27-28]的分析攻击;并在方案构造过程中考虑密文长度,避免引入过多的交易存储开销而导致单个区块中的交易数目过少.

本文结合了混币和加密交易的思想实现付款者、付款金额及收款者三者隐私保护的全匿名区块链.本文利用BGN06加密方案*本文使用的同态加密方案最早于2005年由Boneh等人发表于TCC 2005会议[34],后由作者修订于2006年发表在作者个人主页,因此本文统一以更新稿年份代指本方案,即BGN06加密方案.的类Pedersen承诺同态性进行交易金额验证,且交易收款者无需额外通信可直接解密密文,相比Dumb Account方案[32]密文长度减少一半;利用新型NIZK证明技术BulletProof[35]验证交易金额的正值区间,改进原始CT实现[29]和MimbleWimble[31]中利用Borromean环签名的区间证明方案;利用BGL03单向聚合签名[36](one way aggregated signature, OWAS)及混币技术保护用户身份隐私;通过删除独立交易签名和加密方案公钥来提高区块中存储的交易数目.在本方案中,矿工负责交易验证、交易打包及交易混淆,符合矿工实体在原始区块链系统分工;嵌入混币方案到全区块的范畴可提升匿名集的大小,可抗分析攻击[27-28].

本文主要贡献有5个方面:

1) 在原始区块链系统中,矿工负责验证交易及区块的合法性.本文基于此特性进行适当修改,为矿工添加加密交易密文验证及交易混淆的功能以实现全匿名区块链.

2) 结合BGN06加密方案的同态特性,提出四步验证机制,符合真实区块链系统交易模型,确保交易发起者和验证矿工不能非法增加或减少其所拥有的未花费交易额度;且交易收款者无需额外通信信道即可获知输入交易金额.

3) 利用BGL03单向聚合签名方案聚合区块内部所有交易的输入交易签名,系统性嵌入混币技术到全区块的范围,保护交易用户身份隐私且可抗针对区块链交易数据的分析攻击[27-28].

4) 本文所采用的BGN06加密方案密文长度在相同安全性下为Dumb Account方案[32]中Paillier密文长度的一半;且为进一步降低区块中交易存储开销,矿工打包交易密文到区块的过程中,可删去加密公钥而只保留签名公钥以便于权属证明.对比评估本方案相比各隐私保护区块链方案,定量分析后可得知本区块链系统因实现全匿名特性而引入的交易存储开销是合理的.

5) 本方案相比ZeroCash[26]同样可实现付款者、收款者身份和交易金额三者隐私保护的全匿名区块链系统.但本方案不需要ZeroCash中的可信启动(Setup)阶段,不会因秘密参数泄露而造成货币滥发;且支持区块链数据修剪(Pruning),避免如ZeroCash中密文数据占用过大的存储开销.

1 背景知识

本节对比特币区块链系统及相关密码学进行详细叙述.其中,为简化叙述便于读者理解,本节关于比特币区块链交易结构的介绍采用Pay-to-Public-Key(P2PK)结构,并省略部分与本文思想无关的细节.本节分别规定本文所用的符号;分析比特币区块链系统的交易结构、区块结构和UTXO池;介绍CoinJoin思想与混币概念;介绍BGL03单向聚合签名方案、BGN06同态加密方案与Pedersen承诺方案、包括BulletProof正值区间验证和Pedersen承诺方案相等验证等在内的本方案所需要的NIZK证明技术.

1.1 符号定义

区块链系统用户实体为Alice,Bob,Carol,David;矿工Miner.抗碰撞杂凑函数Hash.大素数p,q,q1,q2;大合数n=q1q2.比特币区块链系统中交易为tx,区块为block;每一笔交易中输入、输出为TXin,TXout.模p,q和n的整数群表示为p,q和n;用于聚合签名的椭圆曲线群和双线性映射表示为,1和e1:×→1,用于BGN06加密方案的表示为2,3和e2:2×2→3.从集合或群中随机选取元素表示为.交易及其下标索引表示为:向用户公钥地址b发起的第a个输入交易为TXina,b,并生成向用户公钥地址d发起的第c个输出交易和TXtotal为交易发起用户用矿工验证公钥加密的密文交易;TXcoinbase为矿工的区块奖励交易.交易中加密的金额用v表示.密码学公私钥为PK,SK;密文C,明文消息M;数字签名σ.下标i为加密和签名叙述过程中用户索引,用户总个数为k.

1.2 比特币区块链系统

比特币区块链系统包括用户和矿工2类实体.用户执行交易过程,生成交易并广播;矿工接收到若干交易,对这些交易的合法性进行验证后打包生成区块,对区块执行工作量证明,获得幸运数字(Nonce)后即将合法区块广播至全网,并更新UTXO池.以Alice发起一笔向Bob的交易为例,Alice将生成的交易广播,被临近矿工Miner收到后验证;Miner打包若干合法交易生成区块,并将合法区块广播至全网;且增加一笔指向Bob地址的未花费输出.比特币区块链系统架构及基于上例分析的交易发起与认证的过程如图1所示:

Fig. 1 Transaction proposing and confirmation图1 交易发起及确认

比特币区块链系统的交易结构包括交易ID、锁定时间和输入输出交易等信息.交易ID是交易实体数据的杂凑值;锁定时间约束了交易生效的UTC时间(国际标准时间);输入交易引用了当前交易的金额来源,来自于先前交易的输出;输出交易根据具体金额指向不同的输出地址.此外,输入交易需要提供对应先前输出交易公钥地址的签名以证明所有权.比特币区块链系统中的公钥与签名使用基于椭圆曲线的数字签名算法(elliptic curve digital signature algorithm, ECDSA);输出地址是ECDSA公钥经过若干杂凑变换而成的.值得注意的是,交易支持多输入、多输出,输出地址可为付款方控制的找零地址,以此实现比特币系统中金额的合并与拆分.比特币交易结构如图2所示:

Fig. 2 Bitcoin transaction structure图2 比特币交易结构

比特币区块包括区块信息、区块头部和区块本体3部分.区块信息包括网络魔法数(作为比特币客户端解析区块数据时的识别码)、区块大小.区块头部包括当前区块杂凑值、引用先前区块杂凑值、区块中交易的梅克尔(Merkle)树树根、幸运数字、困难目标和时间戳.杂凑当前区块本体、先前区块、幸运数字的结果应满足系统困难目标.比特币区块链结构如图3所示:

Fig. 3 Bitcoin blockchain structure图3 比特币区块链结构

比特币所有已验证(Verified)、已确认(Confirmed)且未花费(Unspent)交易被存入UTXO池中.矿工验证一笔交易是否合法的过程包括:输入交易是否未花费,即在UTXO池中存在输入交易;输入金额总和与输出金额总和相等;输入输出金额皆为正值;输入交易签名符合先前输出交易的公钥.如图4所示,以一实例详述上述过程.假设在先前区块中包含某笔交易支付给Alice的地址2比特币;Alice在区块1中第1笔交易分别对Bob和Carol支付1比特币;Bob在区块2中第1笔交易支付1比特币给David.矿工收到Alice发起的交易首先在先前的UTXO中寻找到该交易所引用的某人向Alice支付2比特币交易的杂凑值及其索引,而后验证输入输出是否相等、金额正值及公钥签名匹配,最后将若干合法交易打包成区块并进行执行后续操作.矿工针对Bob发起的交易验证过程类似,在UTXO池中寻找所引用的输入交易杂凑值,这里具体为区块1中第1笔交易,确认其索引1的输出金额1与当前输出金额1相等;确认其输出公钥地址匹配PKBob当前交易签名σBob.

Fig. 4 Bitcoin blockchain and transaction example图4 比特币区块链与交易实例

1.3 混币与CoinJoin

比特币区块链系统中的CoinJoin交易包含若干对金额相等的输入和输出,通过各种类型的协议打乱原本的输入输出关系.当交易发起者验证自己的输出地址存在于输出列表后,签署CoinJoin交易.当所有交易发起者签署该交易后,该交易生效并被广播给矿工.CoinJoin的本质是破坏输入输出关系,使得去匿名化攻击失效,即实现了付款者和收款者隐私.若干CoinJoin变体使用混币费用来防止DoS、女巫攻击.混币费用亦作为提升匿名集的动机.若某一交易与弱匿名集乃至无匿名交易混币,其真实匿名集则无法达到所宣称的大小,因此敌手可通过增殖效应对其去匿名化攻击,即CoinJoin的匿名性依赖于匿名集大小.此外,CoinJoin还存在一个重要的缺陷,即混币服务无法对参与混币的金额进行加密,且要求参与混币的必须为同一金额的交易.

1.4 BGL03单向聚合签名

本节参照文献[36]给出BGL03单向聚合签名的定义.单向聚合签名方案包括5个算法:密钥生成算法、签名算法、验证算法、聚合算法和聚合验证算法.聚合出的签名长度与聚合前的独立签名长度相当.聚合实体可以与签名实体完全不同,聚合算法只需获取参与签名用户单独的签名/消息对和公钥,即可生成聚合签名.聚合验证算法只需聚合签名、聚合用户公钥和消息集合,即可验证聚合签名是否合法.需要强调的是,聚合签名的潜在要求是聚合过程中被签名的消息应彼此不同.

BGL03单向聚合签名方案:

1) 参数约定.大素数p,椭圆曲线群为和1,群生成元为g,双线性映射e1:×→1;

3) 签名.待签名消息为Mi∈{0,1}*,杂凑变换为Hi=Hash(Mi)∈,签名σi=∈;

5) 聚合.要求Mi各不相同,聚合结果为签名

6) 聚合验证.验证等式是否成立:

上述聚合签名方案的安全性依赖于随机预言模型,需要假设判定性Diffie-Hellman(DDH)问题容易但计算性Diffie-Hellman(CDH)问题困难的间隙Diffie-Hellman群(GDH),且双线性映射的原像为不同的群(co-GDH)[36].此外,聚合签名方案的单向性体现在从聚合签名中提取独立的签名个体的难度可规约到解CDH问题[37].

1.5 BGN06加密方案与Pedersen承诺方案

本节介绍BGN06同态加密方案[34]与Pedersen承诺方案[38].

1) BGN06同态加密方案

PKi=(ni=q1iq2i,2i,3i,e2i,gi,hi).

③ 解密.计算密文q1i次方得:

④ 同态性.密文域的乘法运算等于明文域的加法,即

故同态性要求用相同公钥加密,且盲化因子随机数影响密文形态.需要强调的是,若事先约定椭圆曲线,则群参数n与群生成元g可决定2群参数;且群3与双线性映射e2在文献[34]中用于密文加法同态性,该性质在本全匿名区块链方案中不需要使用,故删减后的公钥可保留为PK=(ni,gi,hi).

2) Pedersen承诺方案

文献[38]介绍的Pedersen承诺方案与BGN06加密方案密文形态类似,都将数域群上的秘密变换到椭圆曲线群上,并通过随机盲化因子防止秘密泄露.需要强调的是,在BGN06加密方案中,元素h不再是随机群元素,而是2的q1阶子群的生成元,并作为公钥的一部分.因此,BGN06加密方案赋予Pedersen承诺方案“解盲化”或“解承诺”的能力,这符合区块链交易中收款方可以直接通过密文确认自己收到交易金额的特性,而不需要依赖额外的金额传输信道.

1.6 零知识证明

本方案需要的零知识证明用于交易发起者(付款方)向交易验证者(矿工)验证交易的合法性,包括承诺内容相等证明和区间证明.所有证明过程是非交互的,即示证内容包含在交易发起者广播的交易内容中.

1.6.1 承诺相等证明

文献[40]介绍承诺相等证明协议为:证明者Prover欲向验证者Verifier证明承诺E和F是对相同明文M值的承诺.针对安全参数t,l,s1和s2,承诺随机数分别为r1和r2,模n1群中元素g1和h1,模n2群中元素g2和h2,承诺值分别为

其中,

r1∈[-2s1n1+1,2s1n1-1],
r2∈[-2s2n2+1,2s2n2-1].

步骤1.Prover选择随机数ω,η1,η2并计算

其中,

ω∈[1,2l+tb-1],
η1∈[1,2l+t+s1n1-1],
η2∈[1,2l+t+s2n2-1].

步骤2.Prover计算y=H(W1‖W2).

步骤3.Prover计算:

D=ω+yM,D1=η1+yr1,D2=η2+yr2.

上述D,D1,D2∈;并发送证明π=(y,D,D1,D2)给Verifier(包括承诺E和F);

步骤4.Verifier验证等式是否成立:

1.6.2 区间证明

高效非交互式BulletProof区间证明过程详见文献[35],本文由于篇幅所限,不赘述该方案证明过程.需要强调的是,BulletProof区间证明方案相比原始CT方案[29-31]中基于Borromean环签名的区间证明方案和Dumb Account方案[32]中区间证明方案在效率上有所提升.

2 全匿名区块链构造

本节将详细介绍基于聚合签名与加密交易的全匿名区块链系统.全匿名区块链系统保护用户在交易过程中的隐私数据,包括付款者身份、交易金额和收款者身份3类数据.因此,本方案拥有类比于ZeroCash[26]方案的全匿名特性.本节依次详述方案初始参量;详述矿工对加密交易合法性的验证过程;详述矿工对一个区块内所有交易聚合签名的打包过程;介绍全匿名区块链及UTXO池构造.本节相等证明的思路基于文献[32]、聚合签名的思路基于文献[16]并根据本方案的BGN06加密方案实际情况做出相应修改.

2.1 系统参数约定

本全匿名区块链系统所依赖的密码学工具包括BGN06加密方案[34]与BGL03单向聚合签名[36],因此需要对这2个方案的初始参数进行约定.其内容包括BGN06加密方案的合数阶椭圆曲线;BGL03单向聚合签名方案的素数阶椭圆曲线、大素数p、群和1、群生成元g、双线性映射e1:×→1.

2.2 矿工交易验证

矿工交易验证的本质是验证交易发起者(付款方)生成的交易是否合法:包括付款方对输入交易的权属证明(签名符合先前交易输出的公钥)、交易输入之和与输出之和相等及所有金额满足正值等内容.为叙述方便,本节在此暂时忽略对交易费的考量,但本方案支持交易发起者显式地向矿工可解密账户支付交易费用.验证交易的本质是确保交易发起者只能对自己所拥有的金额执行交易操作,无法凭空创造或恶意破坏交易金额.本节叙述矿工对交易验证的过程,包括在第2.2.1节详述四步验证交易输入、输出之和相等,在第2.2.2节介绍利用BulletProof验证金额区间及签名验证.

2.2.1 四步验证输入输出和相等

交易验证的本质是确保交易发起者无法作弊.因此交易验证的过程包括:交易发起者对自身拥有交易金额的正确解读与对交易输出金额的正确分发.不失一般性,本节以多输入、多输出的交易为例详述四步验证过程.

2) 交易生成.

PRNc,d,TXoutc,d←TXCreate(TXina,b),

其中,TXina,b表示用PKb加密的若干输入交易密文,下标a表示输入密文序号;TXoutc,d表示用PKd加密的若干输出交易密文,下标c表示输出密文序号.交易输入与输出均为对金额va,b或vc,d的BGN06密文,要求va,b,vc,d∈[0,vtotal],输入交易密文为

例如:输入、输出交易可为

TXin1,1,TXin2,1,TXin1,2,TXin2,2,TXin3,2,
TXout1,3,TXout2,3,TXout3,3,TXout1,4,TXout2,4,

即交易生成者输入为用公钥PK1加密的交易TXin1,1,TXin2,1,和用公钥PK2加密的交易TXin1,2,TXin2,2,TXin3,2;交易输出是用PK3加密的交易TXout1,3,TXout2,3,TXout3,3,和用公钥PK4加密的交易TXout1,4,TXout2,4.

3) 交易验证.矿工针对交易发起者的交易验证,

相等秘密验证过程参照1.6节,四步验证为:

2.2.2 其他验证

π5为BulletProof验证交易金额正值所用证明,验证过程详见文献[35].由于BGN06加密方案本质是针对n上的金额,因此负值模n计算后为正,可使得恶意交易发起者凭空创造或恶意毁灭交易输出金额.需要强调的是,由于验证过程包括输入输出求和相等验证,因此区间证明不需单独验证每笔交易金额的上限是否小于输入或输出总和.

单笔交易的签名验证过程与传统比特币区块链系统相同,即验证当前交易的σb与先前交易PKd中的签名验证公钥是否匹配.

2.3 矿工打包交易

矿工在验证完若干合法交易后,需要对合法交易打包成区块并进行工作量证明,以获得区块奖励.这里的潜在要求是所有交易为已确认(Confirmed)的交易,因此不存在对未验证(Unverified)交易的引用.所有交易将去除中间证明,只包括内容:

TXina,b,(PRNc,d,TXoutc,d),σb,PKd.

由于BGL03单向聚合签名方案要求聚合的签名消息完全不同,而同一区块中可能存在支付给相同收款方公钥且相同金额的交易TXoutc,d.因此,矿工需要对每笔输出交易的伪随机数PRNc,d进行验证,确保区块内(PRNc,d,TXoutc,d)完全不同,对于相同伪随机数、交易输出密文对的交易可延迟到后续区块处理.

矿工针对若干笔附带有伪随机数的交易内容进行随机排布,包括无输入的coinbase交易TXcoinbase,并聚合签名σ=∏σb,则区块内的签名和交易内容为

σ,TX=(TX1,TX2,…,TXi,…),
TXi=[TXcoinbase,TXina,b,(PRNc,d,TXoutc,d),PKd]i.

需要强调的是,为削减区块中次要信息所占据的空间以最大化提升区块中的交易数量,包含到区块中的交易输出公钥只需包含交易收款方签名公钥以用于交易权属证明,而不需要包含加密公钥.

2.4 区块链与UTXO池构造

为验证先前交易的引用以匹配单向聚合签名的内容,UTXO池的结构也需要适当修改.原始的比特币区块链系统的UTXO结构为:hashTX,[Index],现修改为hashBlock,H(PNGc,d,TXoutc,d).这是因为,原始交易引用的索引是针对单一交易中不同的交易输出;而全匿名区块链中的输入索引是针对混淆交易顺序的区块中所有交易输出的索引.因此,针对1.2节中原始区块链与UTXO池结构所举实例,图4可对应修改为图5.

3 方案评估

本节详述本方案与其他方案效率与功能对比,首先论证本方案安全性与匿名性;其次详述本方案公钥长度、密文长度,及因功能提升所引入的区块中交易存储开销,并与参考文献对比;最后详述本方案与各区块链隐私保护改进方案在功能和效率方面的对比提升.

Fig. 5 An example of full anonymous blockchain and transaction图5 全匿名区块链系统与交易实例

3.1 方案安全性与匿名性

本方案基于BGN06公钥加密方案和BGL03聚合签名方案.其中BGN06密文安全性基于子群判定困难问题,该问题可简述为:在未知大合数群阶数的因数分解前提下,无法在多项式时间内判断某一随机群元素是否属于该合数阶群的素数阶子群;具体的安全性分析详见文献[34].BGL03聚合签名安全性依赖co-GDH群上的CDH困难问题[36-37].

本方案通过四步相等验证和BulletProof金额正值验证,交易发起者无法在交易生成过程中对加密金额作弊,且无法凭空造币或恶意毁币;无加密方案私钥的矿工收到输入交易密文无法正确解密,只能验证交易是否合法,因此矿工也不能造币或毁币.需要强调的是,本方案的交易金额权属证明不可只依赖密文解密能力而抛弃签名验证,因为除加密者外,解密合法密文并不能验证用户身份.但在方案实现中,可在链上数据中删去交易收款者加密公钥以提高区块中可容纳的交易数目.基于BGN06加密方案的密文交易符合加密交易的概念,确保用户交易金额隐私;矿工打包交易时随机排列合法交易,混淆了交易用户关系,确保了收付款者隐私.因此,本区块链方案是全匿名的.此外,本方案区块数据可支持公开验证,只需验证聚合签名、区块内的所有交易密文和伪随机数、输出公钥是否满足:

∏e1(PKc,d,H(PNGc,d,TXoutc,d))=e1(g,σ).

3.2 方案效率分析

3.2.1 公钥与密文长度

根据当前硬件系统的发展,密码学安全参数的选取需要保证基于大整数分解方案模数为2048 b(256 B),基于椭圆曲线方案的安全参数为256 b(32 B)[41].此外,对于使用256 b表达的椭圆曲线上的点可用33 B编码表示[29].因此,本方案中BGN06加密方案使用256 B表示大合数;使用32 B表示BGL03聚合签名的椭圆曲线.

由1.5节所述,若本方案在系统参数约定时优先约定加密方案所基于的椭圆曲线,则群2可由群参数nb与群生成元gb决定;且群3与双线性映射e2因不需要密文加法同态而删去.因此,本方案公钥长度为|PKb|=|nb|+|gb|+|hb|+|gxb|=801 B.但是,为提高区块可容纳交易数,本方案在矿工验证交易合法后,删去包含到区块交易输出地址中关于BGN06加密交易的公钥.因此链上交易所含公玥长度加密交易需要模大合数nb,因此本方案密文长度为|nb|,即256 B.

不考虑P2PKH,原始比特币区块链系统用8 B空间表示输出金额,33 B表示ECDSA公钥.参考文献[30-31]中标准加密交易实现的公钥,其结构包括扫描密钥版本、传统地址版本、扫描密钥、传统地址,并对上述内容进行Base58Check编码.其中扫描密钥本质是基于椭圆曲线的Diffie-Hellman(ECDH)协商密钥,协商出相同的随机数种子以用于生成相同的盲化因子.不考虑版本号和P2PKH变换,文献[30]所用中ECDH密钥长33 B,ECDSA公钥长33 B,共66 B.此外,文献[30]中的密文采用Pedersen承诺形式,承诺密文为椭圆曲线上点,长度为33 B.ValueShuffle协议[33]需要采用分布式协商算法混币并协商随机盲化因子之和,因此尽管在分布式协商过程中需要增加盲化因子所带来的通信开销,但其基础加密交易公钥、密文长度与原方案[30]相同.

若考虑相同安全性(大整数分解需要大合数为256 B),则文献[32]中Dumb Account系统需要的Paillier密文需要512 B长度表示(模n2群);加密公钥为大合数与群生成元,长度为256+256=512 B.同时考虑ECDSA签名公钥,总公钥长度为512+33=545 B.

3.2.2 交易与区块大小

由于本方案相比原始的比特币区块链方案将明文存储的金额转换到模n群上的密文,将导致交易(区块)大小对应提升;但由于采用了BGL03聚合签名的方案,将区块内所有交易的签名聚合成一个签名,且在交易包含过程中删除了BGN06加密方案的公钥,又从另一个方向缩小了区块中交易的大小.当前,区块链扩容问题为学术界研究热点[42],因此,本节定量评估本文与各参考文献中单一区块中可容纳的交易数目.

对于原始比特币区块链系统,近一年的区块平均大小为644.2 kB,包含交易个数为1 682[43].扣除区块头及相关信息约100 B,可计算得每个交易大小约为392 B.其中,交易头尾与输入输出无关的数据为8 B,不考虑P2PKH情况及交易输入输出个数计数器大小,每笔输入包含32 B引用先前交易杂凑值、4 B索引、64 B的ECDSA签名与4 B序号,每笔输出包含33 B的ECDSA公钥与8 B金额.因此若考虑输入与输出相等情况,平均约有2.649笔输入输出;考虑极限情况为单输入、6.832笔输出或单输出、3.299笔输入.根据上述交易输入输出数据,结合3.2.1节各方案公钥、密文长度,计算在极限输入输出、相等输入输出时各方案区块包含交易个数,结果如表1所示:

Table 1 Comparison of Public Key Length, Ciphertext Length and Transactions Number表1 公钥与密文长度

详细分析表1中加密交易密文在区块中交易存储开销的评估数据,BGN06的密文大小还是显著影响交易容量.BGN06的密文安全性基于合数阶双线性群上的子群判定问题,该困难问题的前提是合阶数分解困难,因此不能选用过小的模数n.需要强调的是,虽然本方案相比标准加密交易实现的密文长度无优势,但标准加密交易的Pedersen承诺无“解承诺”阶段,即用户在执行交易过程中,还需要增加额外的通信信道告知收款方具体交易金额,这不仅增加通信开销,容易泄露用户隐私,且收款方不能验证是否收到付款方所声称的交易金额.相比之下,本方案的BGN06密文支持收款方私钥解密,支持收款方直接通过交易信息获取交易金额,符合实际交易场景,且根据对比基于Paillier密文的Dumb Account方案[32],因功能提升所引入的交易存储开销是合理的.

3.3 方案特性与匿名区块链技术相关研究对比

在需要事先协商混币对象的中心化或分布式混币混币方案[13-15,17-18,20-23]中存在自举阶段(Bootstra-pping),即混币过程是用户非强制选择的.虽然可利用Xim[19]公告板配对混币用户,但一旦出现弱匿名集或无匿名性混币对象,其增殖效应将影响全网隐私保护效果[27-28],即使利用环签名方案内嵌混币服务的门罗币[24]也不能幸免.因此,只有类似本方案与OWAS方案[16]、ZeroCoin[25]等将混币强制嵌入交易系统的方案能保证匿名集的大小,使其足够抵抗此类分析攻击.相比之下,基于加密交易的方案[29-32]都不保护用户隐私,且Pedersen承诺交易密文[29-31,33]需要额外通信信道传输交易金额.若交易收款者无法直接解密交易密文,则不能验证是否收到付款方所声称的交易金额,直到下次花费该交易时才验证输入输出合法性.ValueShuffle方案[33]虽然结合加密交易和分布式混币实现了全匿名,但是非系统性嵌入混币不抗分析攻击[27-28].

综上所述,本方案相比若干片面的区块链隐私保护提升方案实现了全匿名性,并在区块交易容量上相比Dumb Account方案[32]有所提升.相比全匿名方案ZeroCash[26],本文方案的系统参数约定不暴露加密交易相关的敏感信息,不存在因初始化信息泄露而出现的货币超发风险;相比ValueShuffle方案[33]可抗分析攻击,用户身份匿名集覆盖到全区块.本方案亦可支持类似MimbleWimble[31]的区块链修剪,且修剪后的区块链需只需保留聚合的交易签名,进一步减小修剪后的区块链大小.本方案与上述相关研究的具体功能对比如表2所示:

Table 2 Comparison of Related Works About Anonymous Blockchain Improvement表2 相关匿名区块链改进方案功能对比

4 相关研究

混币技术基于Maxwell于2013年提出CoinJoin的思想[12],一笔CoinJoin交易混淆若干交易发起者制定的输出地址,要求混币的比特币金额相等且公开.这一思想对匿名性的提升程度取决于参与混币用户的数目,即匿名集.基于这一思想的混币协议有众多改进和变体版本,包括结合两方公平交换思想的方案[13];依赖若干中间人且兼容比特币系统的公平交换方案[14];依赖智能合约的盲签合约公平交换方案[15];基于单向聚合签名并将混币中心与矿工结合的系统性混币方案[16];引入可信第三方的Mixcoin方案[17]及其利用盲签名提升匿名性的变体Blindcoin方案[18];配对混币用户的Xim方案[19];基于CoinSwap思想[20],并兼容当前比特币系统的Tumblebit方案[21];基于密码学技术实现的点对点无中心混币协议CoinShuffle[22]和引入DC-net的变体CoinShuffle++方案[23]等.但是,尽管上述研究成果打破交易实体的联系,并在内外部不可连接性、混币效率、抗偷币、抗拒绝服务(denial of service, DoS)攻击、抗女巫(Sybil)攻击等方面各有所改进,但本质只保护了付款者和收款者身份隐私,CoinJoin交易仍旧暴露交易金额;且方案[13-15,17-18,20-23]需要自举阶段事先协商混币对象,并可能因为弱匿名集或无匿名性混币对象所导致的增殖效应而影响全网隐私保护效果[27-28].

此外,门罗币[24]、ZeroCoin[25]和ZeroCash[26]等替代币在引入改进功能的同时仍具有一定问题.门罗币[24]交易包含多个输入,利用环签名技术可证实输入交易的所有权却不暴露签名实体,其基本思想与CoinJoin混币概念类似,但文献[27]所述门罗币分析攻击可追踪约88%的交易数据起源.全网约62%的交易输入易遭受基于“链式反应”的分析攻击而暴露用户身份[28].此外,门罗币交易也不强制保护交易金额隐私.基于零知识证明技术的ZeroCoin[25]系统引入非可连接性“筹码”的思想,将混币的范畴扩展到全网可花费的所有“筹码”.铸币(Mint)时通过ZK技术证明付款者持有等额比特币,在不泄露付款者隐私的前提下自主获得“筹码”;兑换(Redeem)时亦利用ZK技术证实“筹码”的合法性并记录所有历史已花费筹码的列表.但是,ZeroCoin[25]不保护交易金额和收款者隐私,且相对于比特币系统维护未花费交易输出,维护已兑换筹码账本的代价相对高昂.ZeroCash[26]在ZeroCoin[25]的基础上将隐私保护的内容扩展到付款者、付款金额及收款者三方面,实现了全匿名;但是其问题包括需要可信第三方生成全局参数,底层的零知识简洁非交互式知识证明技术依赖不可证伪(Non-falsifiable)的密码学假设,方案整体的实现效率相对较低.

基于Pedersen承诺的加密交易[29-31]在不知道具体交易金额的前提下利用ECDH协商相同的随机数种子,基于此生成总和相同的盲化因子,并利用承诺同态性验证交易合法性.支持CT与区块链修剪的MimbleWimble方案[31]虽然大大提升了UTXO大小,但修剪后区块链数据本体大小趋于稳定.需要强调的是,上述方案[28-32]都不保护用户隐私,且需要额外信道传输交易金额[29-31,33].Dumb Account方案[32]通过Paillier同态密文实现加密交易,交易收款者可直接解密输入密文.但其密文安全性基于大整数分解,模n2群在当前算力条件下至少需要4 096 b密文以保证安全性,过长的密文和公钥长度将导致每一区块只能容纳很少的交易个数.ValueShuffle方案[33]虽然结合加密交易和分布式混币实现了全匿名,但是非系统性嵌入混币不抗分析攻击[27-28].

5 结 论

本文利用BGN06同态加密方案与BGL03单向聚合签名方案,将全区块系统性混币技术与加密交易技术完美结合,构造了全匿名区块链.结合类Pedersen承诺的相等证明,利用四步验证方案确保交易发起者和验证矿工无法凭空造币或恶意毁币,且矿工只能验证交易是否合法而无法知悉或者获取交易金额.本方案相比标准加密交易方案无需利用额外信道向交易接收者告知交易金额,相比Dumb Account方案[32]加密密文存储开销较小,相比ValueShuffle[33]避免混币用户间的额外通信信道.通过定量分析表明,本方案因功能提升所引入的区块交易容量开销是合理的.文献[44]提出转换BGN06方案到素数阶群上可在保持相同安全性的前提下进一步降低密文长度,后续工作将在此基础上继续研究全匿名且支持可扩展的区块链系统.

猜你喜欢
公钥密文矿工
基于新SEIRS 的矿工不安全行为传播分析
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
金牌挖矿工
矿工
支持多跳的多策略属性基全同态短密文加密方案
密钥共享下跨用户密文数据去重挖掘方法*
神奇的公钥密码
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究