可追踪的区块链账本隐私保护方案
2020-12-07张思亮陈家辉
张思亮,凌 捷,陈家辉
广东工业大学 计算机学院,广州 510000
1 引言
区块链技术从以比特币[1]为代表的数字货币发展到应用广泛的分布式账本技术[2]。其数据不可篡改和去信任化的两大特性,实现了资产的可靠支付(如跨国转账),在现实世界中创造了价值转移的新形式,降低了社会信任的成本,有效提升了社会合作的效率。在各界积极探索区块链应用场景的同时[3],区块链技术中公开账本数据带来的用户隐私泄露问题也逐渐受到重视。传统区块链系统[1,4]中的用户往往使用假名(即公钥地址)参与交易,但仍将所有交易数据以明文形式登记在分布式账本上,由区块链结点进行验证。但因账本的公开性,传统区块链不能抵抗交易分析攻击[5]。目前已有大量研究通过使用密码学算法对账本数据进行某种程度的隐藏。但是,账本数据完全的隐藏又会带来另一个问题:完善的隐私使得区块链不受任何中心的监管而逃离法律的约束[6],变成非法交易和避税者的天堂。因此,区块链中的隐私保护需要在隐私性和可追踪性取得某种平衡,这是区块链隐私保护研究的难点之一。
本文对当前区块链的隐私攻击和隐私保护方法进行研究,提出了一种基于隐身地址、环签名、零知识证明技术的可追踪的区块链隐私保护方案。理论分析证明该方案相比现存方案具有更强的匿名性,并且提供了面向监管人的可追踪性,解决了各类文献中未能解决的监管问题。实验结果表明该方案相比传统区块链不会有显著的性能短板,具有现实意义。
2 相关工作
区块链账本中公开的交易数据和输入输出的公钥地址信息以及它们之间的可链接性使得攻击者可以追踪账本中的所有历史交易路径,降低用户匿名性。文献[7]分析比特币交易的特征后提出了交易图、初始用户图、用户图的网络结构概念,还将比特币系统外部信息与流量和时间分析等技术结合起来,以说明各种类型的信息泄漏如何导致系统用户的去匿名。文献[8]等通过攻击实验AddUnl来定量分析地址不可链接性。实验数据显示,即使通过不重复使用比特币地址作为隐私保护手段,依然可以将40%的用户真实身份和比特币地址联系起来。文献[9]提出了两类启发式聚类分析思想:(1)同一个交易的输入地址由同一用户集群控制,因为传统区块链交易通过签名验证交易的合法性,只有私钥的所有者才拥有合法的公钥地址签名;(2)一次性找零地址由输入地址的同一用户集群控制。文献[5,10]均指出在区块链账本层面保护用户的隐私需要对交易中的三个内容进行隐藏:交易发起者身份、交易接收者身份和交易数据。
当前已有很多的学术成果或开源项目针对区块链账本的交易分析提出了解决方案。这些解决方案大致可以分为两种:后向兼容的隐私保护方案和非后向兼容的隐私保护方案[5]。使用了前者的区块链能够兼容传统区块链,运行传统区块链的结点能够对新方案的交易和区块进行验证。而使用了后者的区块链系统不兼容传统区块链,导致传统结点无法对新型交易和账本进行验证。从交易协议来看,后向兼容的方案不需要修改传统区块链的交易协议,而非后向兼容的方案需要。
后向兼容的隐私保护方案。混币技术是后向兼容类方案的主要手段。混币将多笔交易的输入混合后定向输出到特定的混币地址,再从该地址中赎回原交易输出的虚拟资产。由于将交易重定向到某特定的混币中心,经过中转的原始交易中输入输出地址的链接性被破坏,保持了用户的匿名性。部分混币技术如Mixcoin[11]依靠第三方提供可信的混币服务,被称为中心化混币。Mixcoin 破坏了外部链接性,但混币服务商的腐败可能导致用户资产失窃或失去匿名性。CoinShuffle 协议[12]是一种去中心的混币协议,但匿名性取决于同时参与混币的用户数量,匿名程度低且多轮的加解密带来较大的开销。BlindCoin[13]同为中心化混币,其盲签名防止混币服务商获取交易链接关系,但盲签名支付协议带来了巨大的开销。另一部分混币技术不依赖第三方服务提供商,被称作去中心化混币。CoinParty 协议[14]受到Coin-Shuffle 的启发,使用MPC(安全多方计算)模拟可信混币服务商,提高了鲁棒性和扩展性的同时容易遭受DDoS攻击。
非后向兼容的隐私保护方法。非后向兼容的实现方案类型多样。Monero实现了CryptoNote协议[15],使用环签名和隐身地址隐藏交易双方的身份,但其环机密交易(Ring Confidential Transactions)存在交易过大的缺点。Zerocoin[16]和Zerocash[17]除存在效率问题之外,还各自有低匿名度和依赖可信初始化服务器的缺点。文献[18]通过在以太坊合约中执行Paillier 同态加密和NIZK 零知识证明隐藏交易数据,但其交易过大且未能隐藏用户身份。文献[19]使用聚合签名和同态加密构造全匿名区块链账本,但其交易构造仍然直接暴露用户公钥,并且大量点乘操作造成交易生成和验证缓慢。此外,其构造中的矿工只拥有同态加密公钥意味着需要可信启动阶段保证私钥的销毁。
综上所述,现有大部分研究成果在效率和隐私性上不能达到良好的平衡,并且均未能在可追踪性上有所考量。
3 预备知识
3.1 符号定义
3.2 隐身地址
隐身地址最早在2011年由名为ByteCoin的比特币论坛成员提出,其安全性依赖于椭圆曲线上的离散对数难题。为了解决原始方案中存在的私钥频繁使用等安全问题,2014年名为rynomster/sdcoin的开发人员提出了双密钥隐身地址协议(Dual-Key Stealth Address Protocol)[20],现对DKSAP协议描述如下:
参数设置:选择椭圆曲线群G 的p阶生成元g,抗碰撞哈希函数为H(⋅)。
隐身地址计算:发送方计算接收方的隐身地址S.A.作为交易的输出地址:S.A.=gc+s=gc⋅S,接收方可以计算c+s来进行签名。
交易扫描:在DKSAP中,接收方可以共享扫描私钥x和支付公钥S给代理服务器。这些实体可以通过计算S.A.=gc⋅S得到接收方的隐身地址,从而代表接收方扫描这些区块链交易。但是,他们无法计算隐身地址私钥c+s并花费资产。
3.3 d-CLASG环签名
环签名是群签名中的一种,能够将签名者的真实公钥隐藏在一个公钥集里从而隐藏签名者的身份。环签名被广泛用于区块链隐私保护方案[15,21-24]。本文使用的d-CLASG(紧凑可链接自发性匿名群签名)方案[24]能够使用多把私钥对多笔交易进行签名,并且其可链接性能够检测双花交易。d-CLSAG 方案发展自Monero 的环机密交易,相比后者签名更小,并且在匿名公钥集小于256 时验证速度更快。现使用乘法群的表达方式将d-CLSAG方案简略描述如下:
参数设置:选择椭圆曲线群G 的p阶生成元g,其中p为质数;签名密钥组数d。
密钥生成:KeyGen→(sk,pk)。KeyGen 函数选择d把私钥构成私钥向量与其对应的d把公钥构成公钥向量pk。
签名:Sign(m, 验证:Verify(m, 链接:Link((m, Pedersen承诺基于椭圆曲线密码学,在椭圆曲线离散对数不被破解的情况下不会泄露秘密数。其承诺形式如:gvhr,其中g是椭圆曲线群G 上的p阶生成元,h是椭圆曲线上的随机生成元,r是随机盲因子,v是秘密数且假设v=v1+v2,r=r1+r2,则有gvhr=gv1hr1⋅gv2hr2,即Pedersen承诺符合加法同态性。因此使用Pedersen承诺隐藏资产数量时,矿工可以在不知道秘密数的同时完成秘密数的加法。 BGN 同态方案[25]是基于双线性对提出的同态加密方案,安全性依赖双线性对上的子群决定性难题,密文支持多次的加法同态操作和一次乘法同态操作。现参照文献对BGN同态方案给出如下描述: 参数生成:q1、q2为两个大质数,n=q1×q2,椭圆曲线群G1阶为n,双线性对e:G1×G1→GT。 密钥生成:KeyGen→PK,SK。KeyGen函数生成公钥PK=(n,G1,GT,e,g1,h1),私钥SK=q1,其中G1,h1=uq2。 加密:Encrypt(PK,m)→C。假设明文m∈{0,1,…,q2},取,生成密文:C=g1mh1r。 解密:Decrypt(SK,C)→m。使用私钥SK=q1解密密文:,由于m∈ {0,1,…,q2}可以使用Pollard方法解得离散对数m。 BGN同态方案的密文与Pedersen承诺相似,其形式均为两个椭圆曲线群元素之幂的乘积,即两者均形如:gmhr,也同样拥有同态性。不同之处在于Pedersen承诺方案使用的椭圆曲线群的群阶为质数,群元素h是群上的随机元素,而BGN 同态方案使用的椭圆曲线群的阶为合数n,根据群理论可知h1是群上的q1阶生成元,持有密钥q2的一方可以拥有密文解密能力。 2013年提出的机密交易(Confidential Transactions)使用Pedersen 承诺隐藏资产数量,并利用Pedersen 承诺的加法同态性验证交易的输入之和与输出之和是否相等。Pedersen 承诺的秘密数在大于椭圆曲线群阶时的承诺等效于模群阶后的承诺。利用此性质,恶意的交易发起者可以凭空创造资产。为此机密交易中还需要包括零知识的范围证明以保证资产数量不大于群阶。 Bulletproofs[26]是一种新型的零知识证明方案。该方案包含两种证明系统,一种是证明两组向量的内积大小等于某个数的内积证明;一种是证明承诺中的被承诺数的大小落在一定范围内的范围证明,区块链技术中使用的就是这一证明系统。Bulletproofs 的范围证明较原始机密交易中的零知识范围证明更小更高效,同等证明范围下证明大小仅为后者的五分之一左右,证明时间是后者的大约四分之一。Bulletproofs 还支持证明聚合的功能。如果多个Bulletproofs零知识范围证明使用相同的证明范围,则可以将多个证明聚合为一个证明,而其大小仅以对数增长。Bulletproofs 的另一个特点是不需要可信的参数设置阶段,这与Zerocash 使用的zk-SNARKs 方案不同,因此较zk-SNARKs 更加适合用于区块链。由于篇幅限制,这里不再重复Bulletproofs 范围证明的具体过程。 在Bulletproofs中,资产数量使用Pedersen承诺方案隐藏,资产数量密文没有解密的方法,这意味着除了交易双方外没有其他人能够获知交易中的资产数量,这一事实与账本隐私可追踪的需求相违背。根据文献[20],BGN同态方案中的密文与Pedersen承诺类似,可以替换Bulletproofs 中的Pedersen 承诺且能够通过解密得到秘密数。 本章在提出可追踪的区块链账本隐私保护方案之前,首先提出可追踪的区块链账本隐私保护方案的实现目标。在可追踪的隐私区块链中仅有监管人能够对交易进行追踪,矿工和用户无法得到交易中的隐私信息,即对于矿工和用户,可追踪的区块链具有高度的隐私性;而对于监管人,可追踪的区块链不具有隐私性。 本章论述可追踪的区块链账本隐私保护方案中的交易构造和区块构造。为了简化描述,本文仅考虑P2PK(Pay to Public Key)的情况,并且忽略区块包含的必要信息(如区块高度、区块哈希、Nonce 等)以及挖矿等内容,重点描述与交易、验证和追踪有关的内容。 可追踪的隐私区块链包括三类角色:用户、矿工和监管人。用户生成交易然后广播给矿工,交易中需要包含四类信息:输入资产数量、资产所有权证明、输出资产数量、输出资产存放地址;矿工在收到交易后对交易进行验证,验证内容包括:(1)资产所有权证明有效;(2)输入资产数量等于上一笔交易中的输出资产数量;(3)输入资产数量之和等于输出资产数量之和。矿工还负责将验证通过的交易打包,放入区块链中。监管人负责在发生交易纠纷或者怀疑出现不法交易时追踪交易中用户的身份和资产数量,为追责提供证据。区块链系统中交易方式和追踪方式如图1所示。 图1 方案中的交易和追踪方式 由于本文方案不需要BGN同态方案提供的同态乘法运算,可舍弃与同态乘法相关的双线性对参数。因此监管人取同态加密公共参数(n,g1,h1),其中n=q1×q2,解密私钥q2,取生成监管密钥对 (t,T),满足T=gt,用户i取生成支付密钥对 (si,Si),扫描密钥对(xi,Xi)和追踪公钥Yi满足Si=gsi,Xi=gxi,Yi=Txi,其资产所有证明为σi,其资产数量密文的Bulletproofs 零知识范围证明为πi。此外Bulletproofs 所使用的椭圆曲线参数也需要与同态加密公共参数保持一致。设交易中用户i持有资产数量vi,该资产存放的隐私地址为S.A.i,接收该资产使用的共享秘密为ci,以监管公钥T对ci进行非对称加密的密文为ηi。 以用户i向j和k发起的交易为例,发送给j和k的资产数量分别为vj和vk。i拥有资产数量的密文,其中ri是盲因子,该笔资产存放的隐身地址是S.A.i=gci+si。i广播给矿工的交易内容如下: 矿工按照以下过程对交易进行验证: (1)检查S.A.i下的资产,如果资产不存在或则丢弃交易,否则进行下一步。 (2)对σi进行验证和链接,若验证失败或链接成功则丢弃交易,否则进行下一步。 (4)验证πj和πk,若任意一个验证不通过则丢弃交易,否则接收交易。 矿工在完成交易的验证后需要将交易打包成区块加入区块链。交易中用于验证的 Δr、l、πj、πk被删去,只包括下列内容: 隐身地址追踪:监管人解密隐私地址S.A.i对应的密文ηi得到ci,再计算得到用户i的支付公钥。 环签名追踪:监管人对pk中的pki(i={0,1,…,α-1})逐个计算(pki)t直到找到pkl满足(pkl)t=g(ci+si)t,则pkl为属于用户i的隐私地址S.A.i,随后按照隐身地址追踪中的方法追踪用户i的支付公钥。 追踪资产数量:监管人对用户i的资产数量密文进行解密得到明文vi。 本方案基于隐身地址、d-CLSAG环签名、BGN同态加密和Bulletproofs零知识证明。隐身地址的安全性基于椭圆曲线上的离散对数难题。隐身地址的安全性保证了隐身地址对应的支付密钥不被破解,即攻击者无法从隐身地址中推断出支付密钥ci+si。d-CLSAG环签名的安全性基于k-OMDL 困难性假设[24]。该难题可以表述为:给定群参数(p,G,g)和k+1 个群元素X={G}k+1,没有多项式时间算法能够让攻击者在访问舞弊预言机(Corruption oracle)不超过k次的情况下确定向量x={ℤp}k+1,对所有i满足。根据文献[24],d-CLSAG 环签名具有不可伪造性(Unforgeability),即给定一组公钥向量pk,攻击者无法伪造一个由pkl中任意一把公钥对应的私钥签下的d-CLSAG环签名。这一性质保证了攻击者无法通过盗用账本上的环签名转移他人的资产。另外,该环签名方案具有的可链接性也提供了抵抗双花交易的能力,即攻击者无法通过使用同一把私钥签下两个签名的方式恶意创造资产。BGN同态加密安全性基于双线性对上的子群决定难题(The Subgroup Decision Problem)。该难题可以表述为:给定双线性对e和椭圆曲线群G、G1,其中G 的群阶为合数n,则没有多项式算法能够在不对n进行因数分解的情况下确定元素X是否属于G 的一个子群。Bulletproofs 零知识证明的安全性同样基于椭圆曲线离散对数难题,即交易发起者向接受者发送的资产数量只能在ℤn中,无法恶意创造或销毁资产。 本方案使用了隐身地址而不是真实公钥作为区块链中的资产接收地址,账本中属于同一个用户的所有接收地址均不相同。隐身地址的使用隐藏了用户的真实公钥,使得攻击者无法将属于同一用户的交易输出联系起来。使用d-CLSAG环签名方案代替传统签名方案作为资产的所有权证明,将交易发起者的公钥隐藏在包含多个公钥之中,这使攻击者无法将上一笔交易的输出与下一笔交易的输入建立联系,从而抵抗针对账本的分析攻击。BGN同态加密方案保证了在群阶n足够大无法被分解的情况下,攻击者无法解密密文,即无法得知账本中的交易资产数量。相比文献[15-16],本文方案提供了交易资产的隐私保护,回避了由固定交易额带来的大量开销。相比文献[11-12,17],本文方案不需要可信服务器或可信初始化,杜绝了资产偷窃的可能性。相比文献[18],本文方案提供了用户的身份隐私保护,拥有更强的匿名性。相比文献[19],本文方案支持账本上的交易资产验证,更能抵抗矿工泄密下的交易分析攻击。 相比现存方案[1,4,11-19,21-23],本文方案提供了可追踪性,仅有监管人能够追踪用户公钥并且不会带来用户资产的安全性问题。方案中,资产数量使用BGN 同态方案进行加密,因此只有持有私钥的监管部门能够使用追踪私钥解密资产数量。d-CLSAG环签名可追踪部分原理与椭圆曲线密钥交换协议(ECDH)相同,其安全性基于椭圆曲线离散对数难题,因此只有监管部门能够确定签名者持有的隐身地址。隐身地址的共享秘密使用非对称加密的方式存放在账本中,而仅有监管部门才能解密,从而保证只有监管部门能够使用该共享秘密寻找隐身地址对应的真实公钥。监管部门无法通过持有的追踪私钥推断用户的支付私钥,即只能追查用户身份却不能伪造合法的交易转移用户资产,这保证了用户资产的安全。 由于d-CLSAG签名以及包含BGN同态密文的Bulletproofs 零知识证明的验证时间占交易验证时间的主要部分,本文针对这两部分做了验证和测试。实验环境为Ubuntu 19.10,CPU为Intel Core i5-8265U@1.60 GHz。 图2 给出了d-CLSAG 签名的验证效率与匿名集之间的关系。可以看出随着匿名集的增大,d-CLSAG 签名的验证速度逐渐减慢。 图2 验证时间与匿名集大小 图3展示了包含BGN同态密文的Bulletproofs零知识证明验证时间与证明范围之间的关系,其中椭圆曲线群阶n的大小为1 024 位。在单个证明的情况下,随着证明范围的增大,验证时间随之延长。由于实际场景中验证范围往往并不需要达到64 位,应用中可以选择合适的证明范围以降低验证时间。 图3 验证时间与证明范围 图4展示了包含BGN同态密文的Bulletproofs零知识证明验证时间与椭圆曲线群阶n之间的关系,其中证明的范围为(0,16]。随着椭圆曲线群阶n的增长,单个证明验证时间增加,其原因是椭圆曲线上的运算速度随着群阶n的增长而降低。在批量证明的情况下,每证明平均验证时间降低至单个证明的11.53%。 图4 验证时间与椭圆曲线群阶比特位数 以一笔交易包含两笔输入和两笔输出为例,本方案的验证过程中除了d-CLSAG环签名验证和Bulletproofs零知识证明验证之外,还包括了一次点乘和两次点加运算,经测试1 024 位点加运算需要42 μs 可忽略不计,1 024 位的点乘运算需要25.60 ms。在1 024 位,环签名匿名集大小为8的安全性下,本方案的每交易验证时间最短为25.60 ms+2.15 ms+226.80 ms=254.55 ms。在批量证明的情况下每交易验证时间可降低至53.90 ms。考虑到传统区块链2~10 min的交易确认时间,本方案开销不会对现有区块链系统的效率产生显著影响。 近年来随着区块链技术的持续发展,区块链应用的落地也在不断变成现实,传统区块链中一系列的隐私泄露问题也亟待解决。以往方法均把重点放在增强区块链用户隐私之上,缺乏对区块链监管方法的探索。本文基于可追踪的隐私地址、d-CLSAG 环签名和Bulletproofs 零知识证明提出了可追踪的区块链账本隐私保护方案。该方案在支持交易公开验证的同时保证了用户的隐私,并且允许监管人对用户的隐私进行追踪,解决了区块链隐私保护方案中的监管问题。理论分析表明其具有足够的安全性,相比其他同类方案具有更强的匿名性,并且提供了面向监管人的可追踪性。实验结果表明相比传统区块链系统,该方案在验证效率上不会带来显著影响,这对区块链的可追踪性研究具有重大意义。然而,在可追踪区块链的研究中如何降低交易长度和验证时间仍然是未来值得研究的问题。3.4 Pedersen同态承诺
3.5 BGN同态加密
3.6 Bulletproofs零知识证明
4 可追踪的区块链账本隐私保护方案
4.1 初始化
4.2 交易生成
4.3 交易验证
4.4 区块打包
4.5 交易追踪
5 方案分析
5.1 安全性分析
5.2 匿名性分析
5.3 可追踪性分析
6 实验验证
7 结语