0 引 言
目前大多数区块链系统的交易是以明文形式广播并存储在区块链账本上的,例如比特币
[1]和以太坊
[2],每个用户都可以访问。由此导致链上数据隐私泄露的问题
[3],如数字货币中,攻击者能够通过储存在区块链上的交易记录分析一个用户的交易习惯;金融领域的应用中,攻击者不仅能够借助链上内容分析出用户的个人交易信息,还能推断出整个金融市场的宏观趋势;在能源行业应用中,交易记录可能会泄露能源交换信息。如果不能解决隐私泄露问题,用户将不愿意将业务上链,这意味着隐私泄露已经严重制约区块链应用的落地。为了保护交易隐私,相关组织提出了许多强制性规范,如中国人民银行
[4]提出了明确要求,规定应对交易内容信息以及交易方信息至少其中一项进行加密,仅交易双方及审计方对隐私交易具有解密验证的能力。所以开展交易的隐私保护至关重要。
1 相关研究
交易的隐私可分为两个方面
[5]:一是匿名性(anonymity),即交易中的交易方是匿名的,发送方和接收方的身份只有交易双方和监管者可见;二是机密性(confidentiality),即交易的金额是以密文形式上链,只有交易双方和监管者可以得到正确的交易金额。近年来学术界对此进行了大量的研究。
在提升交易机密性的研究上,Maxwell
[6]第一个提出了隐私交易(confidential transaction)并将它应用在比特币上,通过Pedersen承诺
[7]和OR-proof建立支付机制,隐藏交易金额,并对Pedersen承诺使用OR-proof做范围证明保证交易的正确性。之后Chen等
[8]提出PGC,设计了twisted ElGamal,将ElGamal算法一部分输出转化为Pedersen承诺,直接用目前最好的范围证明方案Bulletproofs
[5]对承诺进行范围证明。在保证交易匿名性的研究上,有大量的工作通过混币的机制提升匿名性,比如Coinjoin
[9]等;也有大量的工作同时关注交易的机密性和匿名性,门罗币(Monero)
[10]使用了和Maxwell相似的方法保证机密性,用环签名
[11]和隐蔽地址
[12]增强了交易的匿名性,不过门罗币使用的环签名大小随着环成员的增加而线性增加,导致交易数据量增加。基于Zerocash
[13]协议的Zcash提供了两种交易模式:一种是类似比特币透明的交易,另一种是通过zk-SNARKs
[14]零知识证明方法实现隐私交易,目前Zcash生成交易时间较长而且使用zk-SNARKs需要提前生成一个较大的公共参考字符串(common reference strings,CRS)。Fauzi等
[15]提出的Quisquis是一种匿名隐私交易系统,该系统使用一次性账户和洗牌(shuffle)方法实现匿名性,使用ElGamal承诺完成保密性,但面临抢先攻击等问题。Bünz等
[16]提出了应用于以太坊的智能合约Zether,他们使用加法同态形式的ElGamal加密余额和转账金额,使用环签名确保匿名性,但Zether中的
⁃Bullets需要针对特定的问题设计一个比较复杂的Sigma协议
[17]。
交易系统提供隐私保护的同时,也应符合监管的要求
[18,19]。一个简单的监管方案是让交易方提供私钥给监管方,不过这存在极大的安全隐患,并且不符合隐私保护的政策。Zcash中的隐私交易
[20]需要为监管者额外生成密钥,并用监管者密钥加密交易金额,而监管者必须用私钥解密每个交易密文来达到监管的目的。PGC
[8]中提到可以用范围证明和零知识证明的方法确定满足监管的需求。不过监管方无法获取交易的具体金额,监管的内容受限,导致部分审计、统计等功能无法完成。Narula等
[21]提出的zkLedger在保证交易隐私的同时可完成审计的需求,不过他们的设计需要更改用户交易账本的结构,这样就不能直接用于比特币等公链,同时交易和审计的复杂度较高。也有一些隐私保护的方案,存在匿名性或者隐私性太强而导致被滥用的状况。如Pedersen承诺,如果不法分子利用它过强的隐私性进行洗钱等交易频率高、数额大的交易,监管方得不到相关信息,这些违法行为就难以察觉、控制。因此如何实现可控隐私,在保障用户交易隐私的情况下给予监管方更高的权限是一个重要挑战。
根据文献[
22]的调查,美国证监会(SEC)、美国联邦调查局(FBI)、美国金融消费者保护局(CFPB)等执法机构,对在区块链上进行的金融行为采取过监管行动,涉及反洗钱、偷税等多个问题。在近年来发展迅速的去中心化金融(decentralized finance,Defi)行业,加强监管的需求更为迫切
[23]。
为了在保护交易隐私的情况下方便监管,比如监管方能通过链上地址联系到具体个人,而太强的匿名性会给监管带来额外的负担,所以我们主要研究提升交易的机密性。目前实现交易机密性的方案主要可分为两种,一种是基于承诺的方案,另一种基于公钥加密。在基于承诺的方案中,承诺的打开值(openings)必须通过额外信道传输给接收者,如果接收方在某一笔交易中未能打开承诺,可能导致整个账户后续无法使用。基于公钥加密的方案中,最近研究较多的是基于ElGamal加密的方案。使用了加法同态形式的ElGamal加密方案的好处是密文部分既能保密交易金额、进行同态计算,又能解密出交易金额。不同于基于Pedersen承诺的方案可以直接使用Bulletproofs,基于公钥加密的方案需要解决密文与Bulletproofs结合的问题。基于ElGamal加密的三个方案,即文献[
8,
15,
16]中的方案,都需要在解密后计算一个离散对数难题才能从中得到交易金额,这只有在交易金额较小(小于
)时才容易实现。除了交易金额的限制外,还需要生产新的随机数来重新加密发送方的余额,这存在三个缺点:1) 需要对金额重新加密,并用私钥对两个密文进行相等性证明,会带来一些安全隐患;2) 重新加密增加了额外的计算量;3) 新的密文增加了上链内容。
在基于ElGamal加密的方案
[8,15,16]中,需要计算一个离散对数难题来得到交易金额,在交易金额很大时计算的难度会大大增加。为此我们提出了一种交易金额
可直接计算、监管的新方法PailGamal(结合了Paillier加密
[24]和ElGamal加密)。其中密文形式为
,
。密文
和
通过全局参数
确保了所有用户的密文均可进行同态加法,同时我们设计了Sigma协议将Bulletproofs与FO承诺格式
[25]的密文
和
结合。此外,我们提出了一种基于博弈论的思路来进一步减少上链密文,即发送方无需对密文做正确性证明。如果接收方发现密文不正确,可以向区块链提交ZK-proof来证明这是一笔无效的交易,发送方将损失代币并且不会对交易系统造成损害。根据博弈论的思路,发送方不会构造无效的密文,因此不需要为密文的正确性生成证明,而是由接收方来检验密文的正确性。新的解决方案在保证交易安全性和正确性的同时,大大减少了上链数据。
Paillier等
[26]提出了Paillier加密和ElGamal加密相结合的加密方案,其中私钥也可以通过管理员私钥计算得到,该方案主要基于ElGamal算法,其中密文形式为
,
,解密过程也与ElGamal算法相同,更像是把ElGamal算法扩展到
。我们的可监管PailGamal方案中的加解密算法依赖两个算法的原理,更偏重于Paillier算法
[24],该算法本身具有独立的意义。为了赋予监管者比普通用户更大的权力,在PailGamal中,拥有系统私钥的监管者可以像文献[
26]一样计算用户私钥。得到用户私钥的监管者可以解密该用户在一段时间内的总交易额或者选择性地解密单独几笔交易来进行监管,正常情况下只需要对一段时间内的交易进行监管,就可以保护用户的隐私。一旦发现了异常情况,才对用户的每一笔交易进行监管。
我们的贡献如下:1) 提出PailGamal同态加密算法,可直接解密获得明文;2) 根据PailGamal算法设计了一种交易金额可直接解密、支持对交易进行各种合法性证明、监管方可进行各种时间尺度上监管的隐私交易方案;3) 提出一种将Bulletproofs范围证明协议应用在FO承诺上的方案,并且可以推广到其他密文格式;4) 提出一种基于博弈论的方法减少链上交易数据量。
2 预备知识
2.1 所用符号
本文使用表示安全参数,一个可忽略的概率写作。令为一个多项式时间的算法,输入为,输出为,为两个大素数的积,是公开模数,表示与互素且小于的自然数构成的乘法群。令表示从随机选取一个数。
2.2 判定性Diffie-Hellman假设
设是阶为大素数的群,为的生成元,,则随机四元组和四元组(DH(Diffie-Hellman)四元组)是计算上不可区分的,称为DDH(Decisional Diffie-Hellman)假设。
2.3 承诺方案介绍
非交互式承诺方案由发送方和接收方组成,主要分为三个阶段:
:输入安全参数,输出模型中所需要的公开参数,其中定义了可选消息的范围,随机数的范围,承诺的范围由和来决定。
:发送方对消息和随机数进行承诺,计算,发送给接收方。
:发送方将发送给接收方,接收方验证承诺是否正确,如果相等则接受,否则拒绝。
承诺的同态性:指的是承诺方案满足同态性。如果对于消息,随机数,满足下式
则表示承诺方案满足加法同态,其中表示一种运算方法,如乘法。
2.3.1 Pedersen承诺
在阶为的循环群中,选取,Pedersen承诺可以计算中元素的承诺值。
承诺:对于输入的消息,选取,计算。
验证:为了验证承诺的正确性,需要提供。如果,接收方接受对消息的承诺,否则拒绝。
在离散对数假设下,Pedersen承诺具有完美隐藏性和计算绑定性。同时Pedersen承诺满足加法同态性。
2.3.2 Fujisaki⁃Okamoto承诺(简称FO承诺)
设Alice和Bob不知的分解,,的阶是足够大的素数,这使得在他们生成循环群中计算离散对数是计算不可行的。Alice不知和,选取,计算,发送给Bob作为对的承诺。Alice在不知道的分解和的情况下,不可能找到满足;Bob也不可能从中获得关于的任何信息,该协议是统计安全的,称该承诺方案为FO承诺。
2.4 零知识证明介绍
零知识证明系统由两方参与,分别称为证明者(Prover,简称)和验证者(Verifier,简称)。其中知道某一秘密,和经过若干轮的交互后,可以使相信的确掌握这一秘密,而不泄露除了该陈述为真之外的任何信息。比如可以说服一笔隐私交易是有效的,而不泄露具体的交易金额。零知识证明可以由以下三个概率多项式时间(probabilistic polynomial time,PPT)算法组成。
算法输入是,输出证明中所用到的公开参数,如公共参考串CRS。令是可在多项式时间内判别的NP(non-deterministic polynomial)关系,是陈述的证据,可以将依赖公共参数的关系的语言定义为
使用表示在证明人和验证者之间执行的交互,其中的输入是,的输入是。用表示验证者接受或拒绝,时接受,时拒绝。
任何零知识应用都要满足以下三个要求:
1) 完备性:如果陈述正确且输入为真,诚实的验证者将通过验证。即对于任意,有以下关系成立:
2) 可靠性:如果陈述输入为假,则不能通过任何作弊证明使得验证者通过验证。即对于任意,所有不诚实的证明人,有以下关系成立
3) 零知识性:除了相应的陈述外,其他人不能获取关于输入的任何信息。
公开掷币(public coin):如果每个来自诚实验证者的消息都是通过随机抛硬币产生的真随机数,称这个协议是公开掷币的。
范围证明:对处于消息空间(message space)、随机数空间(randomness space)的承诺方案来说,一个零知识范围证明符合以下定义
Bulletproofs:Bulletproofs是一个基于内积论证构造的范围证明协议,具有高效且不需要可信设置等特点。对于Pedersen承诺格式的密文,Bulletproofs可以快速证明承诺中的消息在特定的范围内。
Sigma协议:Sigma协议用于向证明知道某些秘密,协议的主要流程为以下几步:
1) 承诺:计算一个承诺;
2) 挑战:选择随机挑战发送给;
3) 回应:收到挑战后,计算回应发送给;
4) 验证:检查回应,输出接受或者拒绝。
一个Sigma协议满足标准的完备性(standard completeness)、特殊可靠性(special soundness)和零知识性。
特殊可靠性:对于任意、正确的和,其中,可以快速计算出其中的证据。
完美的特殊诚实验证者零知识(perfect special honest-verifier zero-knowledge,SHVZK):如果存在一个概率多项式时间的模拟器对于交互的敌手满足以下条件
;
;
则称这个公开掷币知识论证(Setup,P,V)是SHVZK知识论证。
在这个定义中,对于有效的证据和陈述来说,敌手无法区分其是真实的还是模拟的,即可说明证明系统是零知识的。
3 安全模型
本节主要描述了隐私交易系统满足的安全性要求以及交互过程中敌手拥有的能力。
为了简洁明了地描述出我们所强调的部分,参考Fauzi等
[15]工作,本文中只分析交易层的安全性,而不关注网络层和共识层的安全性问题。正如PGC
[8]和Zether
[16]中提到的,隐私交易系统需要满足正确性、保密性和合理性。正确性要求敌手无法伪造出一笔交易,交易只能通过诚实的发送方产生,即攻击者无法提交一笔交易使得诚实账户的金额减少,攻击成功意味着攻击者可以计算出诚实账户的私钥。保密性要求敌手无法获取交易的金额,同时不能以不可忽略的概率区分出加密金额是
还是
。合理性要求发送方不可以产生一个不合法但是通过验证的交易,无法自己作恶。
同时我们定义了敌手可以访问的谕言机来描述交互过程中敌手所拥有的能力。比如敌手可以控制一个诚实的用户完成一笔交易或者敌手自己发起一笔交易。敌手可以通过诚实的用户请求谕言机,发起一笔特定的交易,或者注入恶意交易到系统中,也可以通过谕言机获取系统中任意账户的私钥,不过不能获取挑战阶段所用到的账户的私钥。敌手可以访问谕言机的能力定义如下。
:敌手 向谕言机发起请求来获取一个诚实的账户,挑战者将请求的结果放在一个初始为空的诚实用户列表中。接收到请求后,的响应如下:生成序列号和一对公私钥,其中:为的公钥,为的私钥,把返回给,并在中记录下来,其中表示加密后的余额。
: 使用一个诚实账户的公钥向谕言机查询,如果在中,将其从移除并将其加入到恶意用户列表中,同时将返回给,这表示敌手可以控制一个诚实账户。
: 使用参数向这个谕言机请求执行一笔隐私交易,。收到请求后的响应如下:若或,返回。否则执行,并更新相关的账户状态,并将返回给。这表示敌手可以指导诚实账户发起一笔特定交易。
: 输入一笔交易,如果这是一笔有效交易,返回1,否则返回0。
:使用参数向这个谕言机请求执行一笔隐私交易,其中。如果,更新相关账户的状态。这表示可以自己生成一笔交易(可能是恶意交易)。
4 构建PailGamal隐私交易系统
本文使用PailGamal同态加密算法加密交易金额和用户余额,通过零知识证明的方法来保证交易金额和用户余额的正确性,然后通过对交易签名认证这笔交易,同时接收方也可以公开相关信息举报恶意交易;在需要实施监管时,监管方可以用系统私钥计算出用户私钥,进而解密出用户对应交易信息进行监管。我们使用的范围证明方案Bulletproofs无法直接应用在非Pedersen承诺格式的密文上,采用零知识证明的方法证明了Pedersen承诺与PailGamal密文包含相同的秘密,并详细介绍了整个设计中用到的零知识证明方案。
4.1 PailGamal算法
•
首先生成两个安全素数。令,,为系统私钥,由可信机构保管(监管者)。表示阶元素的集合,表示的不相交联合。然后随机选择一个生成元且满足。计算,选择随机数,计算,使满足。其中,表示求和的最小公倍数,表示求和的最大公约数。
• KeyGen
可信的监管者选择作为用户私钥。出于监管目的,监管者可以用系统私钥计算用户的私钥,。之后监管者计算并通过安全通道将发送给用户。
•
对于明文,选取随机数,并计算。所得到的密文为,其中密文部分为FO承诺的形式。
•
解密得到的方式为:,对随机数的解密为。
该算法满足正确性和加法同态性,而且无需计算一个离散对数难题
[27],交易金额较大时也可快速解密。对于
中的
,其模数或
的阶数为
,而对于
中的
,其模数或
的阶数为
。为了在应用中保持算法的加法同态性,我们建议
的长度是
长度的一半,同时该算法满足在DDH假设下的IND-CPA安全,具体证明见附录A.1。出于安全考虑,选择secp256k1曲线上的ECDSA作为签名方案。
4.2 交易系统的构建
•
输入一个安全参数,生成加密和零知识证明所用到的相关参数。
•
用户从可信方获得。然后根据本文的设计生成账户,计算作为账户的初始余额,其中,为对应的随机数。
•
输入发送方的公私钥对和接收方的公钥,交易金额。发送方当前余额密文为,其中表示了发送方当前的余额和对应的随机数。具体的交易过程如下。
发送方端:发送方首先检查是否且,验证通过后分别用和加密得到,交易金额的密文共有5个。发送方交易后的余额密文由两个部分组成,其中可以直接计算得出。因为每笔交易的都可解,可以认为发送方余额中的随机数已知,可计算。同时需要发送方用零知识证明的方法证明两个部分:(1) 对交易金额进行范围证明,交易金额在规定的范围内,证明完成后得到证据;(2) 对发送方现在的余额进行范围证明,现有余额要大于零,证明完成后得到证据。即证明以下陈述成立(详细过程见4.5.1节)。
之后用发送方私钥对这笔交易签名,得到,输出和交易信息。在这里发送方不需要做出交易密文的正确性证明,即不需要证明和是用双方公钥加密了相同的,而是交给接收方验证密文的正确性,即下文过程。所以发送方只需要将交易的密文()和聚合范围证明的证据上链即可,大大减少了上链的数据量。
•
用发送方的公钥验证的合法性,验证,验证是否有效,通过验证后将上链。
•
接收方在链上看到交易信息后验证,验证是否有效。对解密得到。之后接收方验证是否与接收到中的相同,如果相同,视为一笔正确交易,接收方更新账户的余额和随机数;如果不同,则判定这是一笔恶意交易,说明发送方改变了中的随机数,或者改变了中的随机数使得接收方无法计算出正确的随机数或者交易金额。诚实的接收方会执行函数,否则接收方无法正常进行后续的交易。这里表示接收方密文的第一个数据。
当发送方和接收方均为恶意用户,即接收方在收到恶意交易后并不举报(正常情况下接收方程序计算出恶意交易后会自动调用函数),但接收方更新的余额为链上承诺对应的真实金额,不是错误的金额(可能大于),所以接收方也无法获得大于的金额。
•
当接收方收到一笔恶意交易时,首先将和上链,并证明确实由链上的密文解出,即接收方证明以下陈述成立
并得到零知识证明的证据。智能合约端验证证据,验证有效后,合约计算
和
并检查是否成立。如果等式不成立,智能合约确认这是一笔恶意交易,对接收方账户做一次同态计算,回到恶意交易完成前的状态,同时销毁这笔交易对应的代币。因为正常用户在执行交易时只需要输入交易金额,出现上述恶意交易的原因是攻击者更改了或中对应的随机数,可以认为这种交易一定是发送方恶意构造出来的,所以合约判断出发送方作恶后销毁交易输入的代币来惩罚恶意的发送方。
•
以发送方用户为例,输入发送方的私钥和对应的密文,可以得到发送方用户的余额。
综上所述攻击方在这个流程中无法攻击成功,从博弈论的角度看攻击者不会执行无法获利甚至亏本且对诚实接收方无影响的攻击,所以可以默认不会出现恶意交易,系统可以安全运行。
4.3 监管系统的构造
从监管的角度看,监管者应该在需要时有权力知道每一笔交易的金额、交易方等具体的交易信息,而且监管者应当可以获取在一段时间内某个账户中的交易总额,以监管洗钱等犯罪行为。但是基于零知识证明的方案无法得到具体的交易金额,Zcash选择了一个可以提供给第三方的新密钥来加密交易金额,这种方法虽然有效但是增加了交易系统的复杂性和上链的信息,给交易的监管和审计带来了额外的困难。
为了设计出一种实用且高效的监管方案,我们赋予了监管方更大的权力,期望以最小的成本实现可监管的隐私交易系统。我们提出的方案满足以下要求:1) 系统中每个用户都处于监管之中,即监管这一特性对用户来说不是一个可选项;2) 监管方的活动与用户之间的交易相互独立,即实施监管、审计时不需要用户在线,用户进行交易时也不需要通过监管方;3) 对现有的用户账本结构做尽可能小的改变,就用户使用来说,新的监管增强的方案和现有方案没有区别。
在需要监管和审计时,监管方可通过系统私钥计算出用户私钥,从而进一步解密该用户对应的交易信息进行监管。这种方法的好处有两点:1) 不需要保存用户私钥,只是在需要对某个用户进行监管或审计操作时,计算出对应的用户私钥即可;2) 不需要监管方和用户交互,监管、审计的操作可以独立完成。与用监管方公钥加密用户私钥的方案相比,这个方案不需要将相关的用户私钥保存在数据库中,不需要传输私钥的步骤,省去了保管用户私钥的麻烦,同时不需要构造额外的一对密钥,系统私钥由受可信机构保管。监管相关的算法如下。
•
输入一个安全参数,生成的相关参数与PailGamal交易系统一致,包括系统私钥、系统公开参数等。
•
首先确定需要监管或审计的地址,根据公钥计算出对应的私钥,具体方法为。只有拥有系统私钥的监管者才能计算出,并进而求出,之后可以用私钥进一步验证每条交易的合法性。
•
计算出该地址对应的私钥后,监管者可以解密出该地址在一段时间内的每一笔交易金额,或者对该地址一段时间内的每笔隐私交易进行同态加法计算,并解密得到该地址在一段时间内交易总额,之后将监管方进行监管这一行为和监管所需信息记录下来。
•
对获取的信息和这个用户这段时间的交易总额进行审计,使用范围证明等相关的审计工具,如果审计结果为TRUE表示这个用户诚实,FALSE表示这个用户进行了一些违法行为。
4.4 结合FO承诺和Bulletproofs
由于Bulletproofs只能直接对Pedersen承诺格式的密文进行范围证明,而PailGamal的密文为FO承诺,对PailGamal使用Bulletproofs需要额外证明其与Pedersen承诺包含了同一个,之后再对Pedersen承诺使用Bulletproofs范围证明。这需要构造一个额外的Sigma协议,和Zether中使用的思路类似。所需要证明的关系有以下三个(4.5.1节展示具体Sigma协议的构造):
1) PailGamal密文与Pedersen承诺包含了相同的;
2) 交易金额大于零且处于正确的范围内(小于);
3) 发送方的余额大于零。
4.5 零知识证明
4.5.1 聚合范围证明
根据PailGamal加密的加法同态性质,计算交易后发送方的余额为
。因为
为FO承诺的形式,需要构造一个额外的Pedersen承诺,并证明
与该Pedersen承诺包含了相同的
,然后再对Pedersen承诺使用Bulletproofs。
是可计算的,
是交易的金额和随机数,可以直接使用
和
作为证据进行Bulletproofs聚合范围证明。其中要证明的关系由两部分组成:(1) 证明密文中的
在正确的范围内,即大于零且小于每笔交易金额上限;(2) 证明密文中的余额
和
与Pedersen承诺中的余额
相等。这里我们可以将证明简化为证明
成立(详细原理见Bulletproofs原文
[5],下文中所有参数均可以计算),(2)中的证明关系可以写作
根据Fiat-Shamir启发式
[28]证明
的一个非交互式的Sigma协议
如下:
1) 选取随机数,计算,;
2) 计算,作为随机挑战;
3) 计算,将发送给;
4) 计算
如果这两个等式成立,验证者接受以上论证。
4.5.2 Sigma协议安全性证明
正确性(completeness):由上面计算可知,如果按照协议的规定执行,正确性是很显然的。
特殊可靠性(special soundness):对于确定的,假定存在不同的和,,则可以通过以下的方法提取。其中,,可以解得。为了从M中解出和,需要使用不同的重新运行两次这个Sigma协议,得到,进而求出和,同理可求出和。这表示通过上述Sigma协议可以提取其中的证据。
特殊诚实验证者零知识性(special honest⁃verifier zero⁃knowledge):假设存在一个模拟器(simulator),它选取随机挑战和随机数,计算,显然使用可以通过验证,对于具有概率多项式时间能力的验证者来说,这些参数和真实协议中的参数是计算不可区分的。
4.5.3 证明)由链上密文解出
当接收方发现一笔恶意交易时,需要用私钥作为证据,向智能合约证明错误的交易金额和随机数确实由链上的密文解出,要证明的关系为
一个非交互式Sigma协议的过程如下:
1) 选取随机数,计算,;
2) 计算随机挑战;
3) 计算,并将发送给;
4) 计算
如果两个等式验证均成立,那么验证者相信确实由链上密文计算得出。
4.6 交易系统安全性分析
如上文中提到,我们隐私交易系统需要满足正确性、保密性和合理性,从可证明安全的角度对交易系统的安全性进行分析,具体的安全性证明在附录(A.3,A.4,A.5)中给出。而且链上的内容都通过了范围证明、合法性验证,所以可以认为监管方从链上获取的交易数据都是正确的。如果有错误的密文存在链上,即链上存在了一个错误但是通过验证的交易,由交易系统的正确性和合理性可知,这种交易出现的概率是可以忽略的。链上密文为FO承诺的格式,具有全局同态性,可以首先分析一个地址在一段时间内的总交易金额,如果有问题,再对具体的每笔交易金额进行分析。根据交易系统的正确性和同态加密的正确性推断出该方案是可审计的,满足审计可靠性。
5 性能分析
本文使用C++实现上述方案以进一步评估我们项目在通信和计算成本上的性能。出于测试的目的,仅验证了方案的可用性,并没有对代码做过多的优化。本文设计的隐私交易方案主要包括以下几个方面:(1) 一笔交易的具体信息,(2) 交易的发送方签名,(3) 聚合Bulletproofs的证据。基于OpenSSL实现了相应方案,选取4 096位的模数,中的每个元素需要512 字节,中的每个元素需要256字节。交易的大小为,表示元素个数,表示交易金额最大位数,这里选择。其中包括个元素为交易信息,个元素为数字签名,聚合范围证明需要个元素。
这些测试方案运行在AMDRyzen 3700X 3.59 GHz CPU 上,具体结果如
表1所示。与目前几种热门的注重隐私保护的区块链项目
[10,13,15]相比,可以看出本文方案在交易的大小和生成一笔交易的时间上均有不错的表现,并且聚合范围证明的应用也使得证明大小不会随着交易数目的增加而增加。在发现恶意交易时生成欺诈证明大小为2 KB,举报恶意操作也可以在很短的时间内(约200 ms)完成。此外在不引入额外密钥、不增加新密文的情况下,提供给监管方系统私钥来对每一笔交易进行监管,更适用于一些对监管性有要求的场景。
6 结 语
目前的隐私交易方案中存在效率低下或监管复杂等问题,针对这种情况,本文提出了一种高效的可监管的隐私交易方案和相应的同态加密算法PailGamal,并给出了交易系统和相应加密算法的安全性证明,使得用户在选择隐私交易方案时,根据应用场景和需求的不同,可以有更多的选择。我们隐私交易方案的主要思路为:通过同态加密使得数据可用,通过零知识证明保证数据合法。同时我们设计的简单的零知识证明协议和基于博弈论的“接收方挑战”的思路也可以应用于更多的场景。此外,我们了解到结合zkrollup的方案能进一步优化每笔交易的平均速度,将在以后的工作中进一步研究此问题。
国家自然科学基金面上项目(62172308)