面向联盟链转账隐私保护的+HomElG零知识证明协议
2023-10-12杨少坤
景 旭,杨少坤
(西北农林科技大学 信息工程学院,陕西 杨凌 712100)
作为区块链的应用模式之一,联盟链由多个机构组成的联盟构成,联盟指定的成员生成、共识、维护联盟链账本,节点的进入与退出需要满足一定条件并得到许可[1]。联盟链有灵活的智能合约[2]定制机制可以满足实际应用中复杂多变的业务需求。联盟链的账本对联盟所有参与方是透明的,当用户通过联盟链执行交易时,用户的资金、交易金额等隐私信息均可能被暴露。因此,研究联盟链隐私保护机制对于促进联盟链的应用、推广具有重要的意义。
目前,国内外学者关于区块链隐私保护研究已经取得一些成果。Wang等[3]使用Рaillier算法加密交易金额,通过承诺证明输入总额与输出总额相等实现交易合法性验证,但是密文和公钥过长导致效率较低且没有交易金额相关区间验证。刁一晴等[4]基于群签名和同态加密算法实现一种联盟链双重隐私保护方法,使用Рaillier算法和零知识证明实现交易金额的隐私保护,但Рaillier算法效率相对较低且仅进行了交易金额大于零的区间验证。Narula等[5]使用Рedersen承诺和Schnorr型非交互式零知识证明方法实现交易金额的隐私保护,但没有交易余额大于零的区间验证。She等[6]通过将敏感数据用Рaillier加密后上传到联盟链,实现了同态加状态下的共识,保护敏感数据的隐私,但Рaillier算法效率相对较低。张小艳等[7]基于椭圆曲线同态加密的特性,根据公开可验证承诺和零知识证明技术提出一种交易金额保密验证方法,但仅能验证交易金额相等,无法进行区间验证。李龚亮等[8]在Рaillier算法的基础上,提出了一种基于零知识证明的隐私保护算法,在应用端生成交易密文和零知识证明证据发送给智能合约端进行合法性验证,但基于复合剩余类困难问题,效率较低。综上可以看出,现有文献虽声称以区块链为研究对象,但本质上主要应用模式采用联盟链;虽然实现了隐私保护,但大都存在没有同时对交易金额相等,交易金额、交易余额的范围进行校验,交易合法性验证策略不够完善,以及主要选用效率较低的加同态Рaillier作为基础加密算法等问题。
针对上述问题,面向联盟链转账中需要保护账户余额、交易金额等隐私的需求,本文提出一种+HomElG零知识证明协议。首先,面向联盟链转账的需求,基于РBFT构造具有拜占庭容错的同态加密零知识证明共识交互场景;然后,根据联盟链共识场景,设计一种同态加密的零知识证明协议,基础加密算法选用高效的+HomElG算法,基于Σ协议和Fiat-Shamir算法的思想,构造可以实现交易金额相等、交易金额大于零和交易余额不小于零的非交互式零知识证明,使得交易合法性验证策略更加完善;最后,基于Hyperledger Fabric实现一个联盟链转账隐私保护原型系统,对协议进行测试与分析。
1 预备知识
G表示拥有大素数阶p的乘法群,g为G的生成元,Zp表示模p的剩余类环,表示Zp中对乘法可逆的元素构成的乘法群, logg h表示在乘法群G中以g为底h的离散对数,a◦b表示做Hadamard乘积,H为安全哈希函数。
1.1 ElGamal承诺方案
1.2 DL关系的Σ协议
关系R的Σ协议[10-11]定义了NР(noun phrase)语言LR,是一个由证明者和验证者共同执行的三轮证明系统,证明了证明者知道一个共同输入x∈LR期望的知识,具有完备性、特殊合理性和诚实验证者零知识性。Damgard[12]提出了一种关系R为离散对数(discrete logarithm,DL)关系的Σ协议,DL关系式为:
式中,p为大素数,q为p-1的最大素数因子,g为中阶为q的元素,w为仅证明者可知的私有输入,h=gwmodp,x=(p,q,g,h)是对证明者和验证者均可见的公共输入。
Σ协议的具体流程为:1)证明者选择随机数r∈Zq,计算a=grmodp并将a发送给验证者;2)验证者选择t比特位的随机数挑战e∈Z2t(2t<q)并将e发送给证明者;3)证明者计算z=(r+ew)modq,并将z发送给验证者判断gz=ahemodp是否成立,若成立,则验证者相信证明者知道正确的w值。
1.3 范围协议
Bünz等[13]提出的Bulletproofs是最常用的范围零知识证明方法之一,主要要求是有一个DL关系未知的公开承诺密钥 (g,h),使用Fiat-Shamir[14]算法,可以转化为一个安全的、在随机预言模式下完全零知识的非交互式协议。在DDH困难问题的组 (G,g,p)中,对于 (V,g,h∈G;v,r∈Zp;V=gvhrmodp;v∈[0,2n-1]),其中g、h的DL关系是未知的,V=gvhrmodp可以被看作是一个Рedersen承诺[15],Bulletproofs协议将会使验证者相信v∈[0,2n-1]。
1.4 +HomElG算法
+HomElG[16]算法包含3个过程,具体如下:
1) 密钥生成
首先,选择大素数q和正整数 κ ,使p=2κq+1,选择生成元g,使g生成一个q阶子群;然后,从Zq中随机选择一个私钥x,并计算相应的公钥y=gxmodp;最后,输出系统公共参数 (p,q,g) , 返回公私钥对 (y,x)。
2)加密过程
对于明文m∈M,随机选择r∈Zq,加密过程如式(1)所示,得到密文C=(c1,c2)。
3)解密过程
对于密文C=(c1,c2),解密过程下:
2 基于PBFT的联盟链转账隐私保护应用
假设联盟链中用户Alice需要向用户Bob转账v枚硬币,需要联盟链上节点共识但是都不希望其他成员知道v及Alice、Bob的账户余额等敏感信息。目前,主流研究是利用同态加密[17-18]和零知识证明[19-21]技术来实现。主要流程包括:首先,Alice用自己的公钥pkA和Bob的公钥pkB分别加密v得到CA和CB。然后,Alice为转账生成满足以下条件的零知识证明证据 π:1)在pkA和pkB下,CA和CB隐藏着相同的秘密值;2)转账金额大于零;3)转账后他的余额是不小于零的。最后,联盟链上节点通过智能合约利用系统参数和零知识证明证据 π,检验此次交易的有效性,但联盟链中可能存在拜占庭节点,拜占庭故障节点的行为是任意的,可能导致产生错误的交易合法性验证结果。
实用拜占庭容错算法(practical Byzantine fault algorithm,РBFT)是一种确保分布式系统与拜占庭故障节点一致性的通用解决方案[22]。与传统的拜占庭容错算法相比,РBFT效率大大提高,可以抵抗一定数量的拜占庭节点[23]。由于无法排除联盟链转账中拜占庭节点的存在,为了确保交易过程的合法性、交易结果的可靠性,本文协议在应用层共识[24]中采用РBFT算法,设计基于РBFT的联盟链转账隐私保护应用如图1所示。
图1 基于PBFT的联盟链转账隐私保护应用Fig.1 Privacy protection application for consortium blockchain transfers based on PBFT
基于РBFT的联盟链转账隐私保护应用的交易流程包括:
1)交易发起阶段。交易发起节点通过客户端INIT CLIENT将交易信息发送给智能合约ENC CONTRACT,如图1中的步骤①所示。
2)零知识证明证据生成阶段。交易发起节点通过智能合约ENC CONTRACT加密交易敏感信息,生成相关零知识证明证据 π;生成РBFT共识请求消息〈REQUEST,t,d,h,c〉,其中,t为时间戳,d为主体发送的包含交易密文信息及零知识证明证据 π等请求内容,h为d的消息摘要,c为主体的身份信息;将请求消息发布到联盟链中,如图1中的步骤②所示。
3)PBFT请求阶段。除交易发起节点外,联盟链其他节点可从联盟链中获取PBFT共识请求消息〈REQUEST,t,d,h,c〉;获得请求消息的节点向事先由全网节点选举出的主节点0发送确认消息;主节点0根据确认消息统计参与本次共识的节点个数,确定允许的最大拜占庭节点数f,如图1中的步骤③所示。在图1中,假设参与本次共识的节点个数为4,因此允许最大的拜占庭节点数为1。
4)PBFT预准备阶段。主节点0为本次请求d分配一个编号n,开始对本次请求交易的合法性进行判决,如图1中虚框中所示。
首先,节点0的客户端PEER0 CLIENT根据请求消息中的d获取交易密文及相关零知识证明证据 π,并发送给智能合约VER CONTRACT,如图1中的步骤④所示。
然后,智能合约VER CONTRACT从联盟链中获取相关系统参数,利用交易密文、零知识证明证据π及系统参数进行零知识证明,校验交易的合法性,如图1中的步骤⑤所示。
最后,智能合约VER CONTRACT将校验结果发送给节点0的客户端PEER0 CLIENT,如图1中的步骤⑥所示。
本次请求交易的合法性判决完成后,向其他参与本次共识的从节点1、2、3发送预准备消息〈PREPREPARE,v,n,t,h,f,i,r〉,其中,v为当前视图编号,i为当前节点的编号,r为交易的合法性判决结果,如图1中的步骤Pre-prepare所示。
5)PBFT准备阶段。收到主节点0发送的预准备消息后,从节点1、2、3首先对比请求信息与预准备消息的h、t,确保消息的完整性。其次,与主节点0的判决过程相同,判决本次请求交易的合法性。然后,向其他节点发送准备消息 〈PREPARE,v,n,h,i,r〉。最后,收到其他从节点的准备消息后,节点验证准备消息与预准备消息中v、n、r、h一致性;当有2f+1个一致时,进入确认阶段,如图1中的步骤Prepare所示。
6)PBFT确认阶段。每个节点向其他节点发送确认消息 〈COMMIT,v,n,i,S(r)〉,其中,S(r)为本节点使用私钥对交易合法性校验结果的签名;收到其他节点的确认消息后,通过i查找本地索引表中相应节点的公钥,各节点验证确认消息的签名、v、n、r;当有2f+1个确认消息一致时,验证通过,如图1中的步骤Commit所示。
7)PBFT响应阶段。各节点生成响应消息〈REPLY,v,t,n,h,c,i,f,q〉,其中,q为本次交易合法性验证结果,即确认阶段2f+1个一致的确认消息中的r,并将响应消息发布到联盟链上,如图1中的步骤Reply所示。
8)共识结果判定。记账节点从联盟链收集各节点的响应消息,当收集到至少f+1个相同的响应消息时,则根据响应消息中的q判定本次交易合法性验证是否通过,如图1中的步骤⑦所示。
9)账本更新。当共识结果判定为通过时,记账节点根据密文同态运算更新账本和状态数据库;否则,拒绝本次交易,向交易发起节点发送本次交易失败信息,如图1中的步骤⑧所示。
3 基于Σ协议的+HomElG零知识证明协议
在基于PBFT的联盟链转账隐私保护应用中,采用同态加密技术保护转账交易双方的交易敏感信息。与加法同态Paillier算法相比,在相同的安全级别下,+HomElG算法获得了接近86.7%的加密加速比和接近73.4%的解密加速比,是综合性能较优的加法同态算法,因此,本文选择+HomElG算法作为基础密码算法。
为了验证转账的合法性,需要联盟链成员采用零知识证明技术在应用层对转账交易过程进行PBFT共识。在PBFT共识过程中,验证节点需要在隐私条件下验证转账双方的交易金额相等、交易金额大于零、转账方的交易余额不小于零等,所以需要为最基本的转账正确性策略构造出相应的零知识证明证据[25]。Σ协议能够以模块化的方式为事务的基本正确性设计零知识证明,且可通过Fiat-Shamir算法转换为非交互式零知识证明。因此,本文提出基于Σ协议+HomElG零知识证明协议,满足基于PBFT的联盟链转账隐私保护应用的需求。
3.1 初始化
1)系统参数生成
由联盟链CA中心选择大素数q和正整数 κ,使p=2κq+1 ;选择生成元g,使g生成一个q阶子群;选择拥有大素数阶p0的乘法群G,并选择生成元h、g0,h和g0的DL关系未知;将 (p,q,g,g0,h,p0)作为系统公共参数写入CA中心的证书,其中, (p,q,g)用于加解密, (g0,h,p0)用于零知识证明生成ElGamal承诺。
2)节点密钥对的生成与分发
联盟链节点从Zq中随机选择私钥x,计算公钥y=gxmodp。以安全的方式将公钥提交给CA中心,以便将公钥写入节点的证书,实现公钥的安全分发。私钥由节点安全保存。
3)账户初始化
联盟链用户使用自己的公钥加密账户余额,发送给记账节点。在联盟链账本中,以(用户公钥,用户账户余额密文)对的形式存储。
3.2 零知识证明
在基于PBFT的联盟链转账隐私保护应用中,应用端(发起方的客户端)为智能合约端(联盟链节点)产生密文交易信息,并提供零知识证明证据;智能合约端基于PBFT共识算法验证交易的合法性。对于给定的消息m∈M,随机数r∈Zq,经+HomElG算法加密得到密文Cpk(m;r)。因为+HomElG算法满足如下条件:1)给定pk对应的sk,Cpk(m;r)不能被解密成两个不同的消息;2)对于任意两个消息 (m0,m1),对手无法区分Cpk(m0;r0)和Cpk(m1;r1);3)相同公钥下的密文满足Cpk(m0)◦Cpk(m1)=Cpk(m0+m1)。因此,经+HomElG加密后密文满足绑定性、隐藏性和加性同态。
3.2.1 相等性证明
应用端使用交易双方的公钥和系统参数,从Zq中选择加密过程中的随机数r0vA、r0vB,加密交易金额v得到密文CvA=(c1vA,c2vA)和CvB=(c1vB,c2vB)。基于Σ协议思想的相等性证明过程如下:
智能合约端根据接收到的数据使用安全哈希函数生成 η′=H(c1vA,c2vA,c1vB,c2vB,e1,f1,e2,f2) ,验证η与η′是否相等,防止应用端欺骗智能合约端;若相等,继续验证式(3)是否均成立;若成立,则相信密文CvA、CvB中隐藏着同一秘密值;否则,本次交易不合法。
3.2.2 范围证明
本文将+HomElG加密后的密文C=(c1,c2)的范围证明归约到全局公钥 (g,h)下的ElGamal承诺的范围证明。根据可证明安全理论,基于Bulletproofs证明El-Gamal承诺的秘密值满足范围证明,从而证明C=(c1,c2)中隐藏的秘密值满足范围证明。
1)交易金额大于零
应用端使用系统参数 (g0,h,p0),交易金额v,选择rvE∈Zp0,对v做出在公钥 (g0,h)下的ElGamal承诺。根据Σ协议思想将交易金额密文归约到ElGamal承诺的过程:
在将交易金额密文归约到ElGamal承诺基础上,交易金额大于零的证明过程包括:应用端对公开承诺密钥 (g,h) 下的ElGamal承诺Ev运行Bulletproofs,产生范围证明的证据 πv发送给智能合约端。智能合约端根据 πv验证Ev隐藏秘密值的范围,若验证通过,则交易金额大于零;否则,本次交易不合法。
2)交易余额不小于零
在将交易余额密文归约到ElGamal承诺基础上,交易余额不小于零的证明过程包括:对公开承诺密钥 (g,h) 下的ElGamal承诺Eb运行Bulletproofs,产生范围证明的证据 πb发送给智能合约端;智能合约端根据 πb验证Eb隐藏秘密值的范围,若验证通过,则相信交易余额大于0;否则,本次交易不合法。
3.3 协议分析
3.3.1 正确性分析
定理1 在联盟链共识时通过执行本文协议,验证者可以确信密文CvA、CvB下隐藏着同一秘密值。
证明:应用端向智能合约端发送证据(e1,f1,e2,f2,Zv,Zx,Zr1,η),并执行零知识证明式(6)。智能合约通过证据和系统参数验证式(3),过程如式(7)所示。若CvA、CvB隐藏着同一秘密值,式(7)中各等式均会成立,则诚实验证者确信密文CvA、CvB下隐藏着同一秘密值。
定理2 在联盟链共识时通过执行本文协议,验证者可以确信密文CvA与承诺Ev下隐藏着同一秘密值,CbA与承诺Eb下隐藏着同一秘密值。
证明:应用端向智能合约端发送证据(e11,f11,e21,f21,,Zx1,Zrv,η1),并执行零知识证明式(8)。智能合约端验证式(8),通过证据和系统参数验证式(4),过程如式(9)所示。若密文CvA与承诺Ev下隐藏着同一秘密值,式(9)中各等式均会成立,则诚实的验证者确信密文CvA与承诺Ev下隐藏着同一秘密值。同理可验证零知识证明式(10),使诚实的验证者确信密文CbA与承诺Eb下隐藏着同一秘密值。
定理3 在联盟链共识时通过执行本文协议,验证者可以确信承诺Ev中隐藏秘密值大于零,承诺Eb中隐藏秘密值不小于零。
证明:应用端向智能合约端发送证据 πv并执行式(11)。智能合约端通过证据 πv和系统参数验证式(11),若承诺Ev中隐藏秘密值大于零,由于Bulletproofs范围证明是完备的[13],则诚实的验证者确信承诺Ev隐藏秘密值大于零。同理可验证式(12),若承诺Eb中隐藏秘密值不小于零时,则诚实的验证者确信承诺Eb隐藏秘密值不小于零。
定理4 本文协议同态加法运算是正确的,即在密文条件下的同态加法运算与明文加法运算结果一致。
由式(13)、(14)可以看出,在密文状态下同态运算后解密的明文与先解密再计算得到的明文是一致的,因此,本文协议同态加法运算是正确的。
3.3.2 完备性分析
诚实的证明者执行本文协议未能通过验证概率为零知识证明式(6)、(8)、(10)、(11)或(12)失败的概率,根据正确性分析,诚实的证明者执行协议,零知识证明式(6)、(8)、(10)、(11)和(12)一定能被诚实验证者验证通过。
假设上述情况证明者不能欺骗验证者时,证明者要攻破零知识证明式(6)、(8)、(10)、(11)和(12)才能成功欺骗诚实的验证者,即:证明者破解了安全哈希函数,在计算上是不可行的,因此证明者很难成功欺骗验证者。
3.3.3 零知识性分析
定理5 攻击者由交易双方公钥推导出私钥是困难的,根据密文和已知参数恢复相应的明文信息也是困难的。
证明:由于本文协议选取的+HomElG算法的生成元g∈,且p-1包含大素数因子,若攻击者可由交易双方公钥y求出对应的私钥x,则说明其攻破了在上的离散对数困难问题,在计算上并不可行。因此验证者由交易双方的公钥推导出私钥是困难的。
由式(1)可以看出,从gr和y求出yr是DDH困难问题[16]。在没有私钥的条件下,若攻击者根据密文和已知参数恢复了相应的明文信息,则相当于破解了DDH困难问题。因此,验证者根据密文和已知参数恢复相应的明文信息也是困难的。
定理6 通过公开承诺密钥 (g,h)的ElGamal承诺,攻击者根据已知参数求出隐藏的明文信息是困难的。
由式(15)可知, logg0h可被计算,而 (g0,h)的DL关系是未知的。在多项式算法中,根据已知参数求解离散对数大概需要次群运算,因此验证者从已知参数和公开承诺密钥 (g0,h)下ElGamal承诺求出隐藏的明文信息是困难的。
零知识证明式(6)、(8)、(10)都是类似的相等性证明,下面将以零知识证明式(6)为例分析零知识性。攻击者可获得的公开数据为η、CvA、CvB、 (e1,f1) 、 (e2,f2)、Zv、Zr1、Zr2以及相应的系统参数,由定理5可知,攻击者从CvA、CvB、 (e1,f1) 、 (e2,f2) 获取关于v的相关知识是困难的; η为安全哈希函数,攻击者从 η中获取关于v的有效信息是困难的;Zr1、Zr2是关于未知数(r0vA,)和 (r0vB,) 的式子,Zv是关于未知数v和v′的式子,攻击者很难从一个含有两个未知数的式子确定其中一个未知数的值。因此验证者从零知识证明式(6)的证明中获得关于v的更多信息是困难的。在零知识证明式(8)、(10)中,由定理6可知,攻击者从公开承诺密钥 (g0,h)下的ElGamal承诺中获取关于v的相关知识是困难的,因此验证者从零知识证明式(8)、(10)的证明中获得关于v的更多信息是困难的。
零知识证明式(11)、(12)是两个Bulletproofs范围证明,由于Bulletproofs是统计零知识证明[13],因此验证者从零知识证明式(11)、(12)的证明中获得关于v的更多信息同样是困难的。
综上,本文协议在随机预言模式下是统计零知识证明。
4 测试与分析
4.1 测试环境
1)系统环境:ubuntu虚拟机18.04,8 GB内存,50 GB存储磁盘,处理器内核总数为4,带宽为1 000 Mb/s。
2)联盟链网络:使用Hyperledger Fabric 1.4.0搭建;部署peer0.coop.itcast.cn、peer1.coop.itcast.cn、peer0.nz.itcast.cn、peer1.nz.itcast.cn等4个peer节点充当记账节点,部署节点Orderer为排序节点;状态数据库采用levelDB;区块的最大交易数为10笔,最大打包时间间隔为2 s,最大字节数为10 MB。
3)共识协议:采用corgi-kx的РBFT算法(具体请查阅https://github.com/corgikx/blockchain_consensus_algorithm,2019-12-01),N0、N1、N2、N3充当验证节点。
4)Bulletproofs范围证明采用yjjnls的包(具体请查阅https://github.com/yjjnls/awesome-blockchain/tree/master/src/ConfidentialTx/zkproofs),其他运算主要采用go自带的math和math/big包。
5)编程语言:GO语言。
4.2 功能测试
假设联盟链的两个用户Alice和Bob之间存在一笔交易,即Alice向Bob转账100。首先,分别为Alice和Bob初始化500的账户余额;其次,Alice需要为交易生成零知识证明证据并上传到联盟链;然后,联盟链节点从链上获取零知识证明证据,通过PBFT算法共识交易合法性,共识交易合法通过后,记账节点更新Alice和Bob账户密文;最后,检查Alice和Bob的账户更新情况。
1)账户初始化。
在测试过程中,对链码实例化时,会为Alice和Bob初始化500的账户余额,经+HomElGamal加密后上传到联盟链,账户结构为账户标识(用户公钥)和账户余额密文,如图2所示。由图2可以看出,在链码mycc-1.0的Log中输出了初始化后Alice和Bob的账户情况,用户Alice的账户标识为Alice的公钥,账户余额为密文(c1,c2),用户Bob的账户同理。
图2 初始化账户余额Fig.2 Initialize account balance
2)Alice为交易生成零知识证明证据并上传到联盟链。Alice从联盟链CA中心获取系统公共参数,从CABob获取Bob的公钥,根据自己的公、私钥和账户余额、Bob的公钥、系统公共参数、转账金额等,按照第3.2节的过程,生成本次交易相关零知识证明证据并上传到联盟链,包括EqualEvidence(交易双方交易金额相等证据)、AmountEqualEvidence(交易金额大于零中相等性证明证据)、AmountRangeEvidence(交易金额大于零中Bulletproof范围证明证据)、BalanceEqual-EvidEnce(交易余额不小于零中相等性证明证据)、Balance-RangeEvidence(交易余额不小于零中Bulletproof范围证明证据),如图3所示。
图3 零知识证明证据上链Fig.3 Zero-knowledge proof evidence on the chain
3)联盟链节点从链上获取零知识证明证据,通过PBFT算法共识交易合法性。
首先,联盟链节点获取本次交易的相关零知识证明证据,如图4所示。
图4 获取零知识证明证据Fig.4 Obtain zero-knowledge proof evidence
由图4可以看出,通过链上交易TXID,Alice从“864bca7d7ed5c81b8843cc9dcbb5901d919f68123fc6f8 10e74ac2219d78a203”获得本次交易Transcation1的相关零知识证明证据。
然后,调用PBFT算法对交易合法性进行共识。联盟链节点根据相关零知识证明证据验证交易合法性时包括5个部分:VerifyEqual(交易双方交易金额相等验证)、VerifyAmountEqual(交易金额大于零中相等性证明验证)、VerifyAmountRange(交易金额大于零中Bullet-proof范围证明验证)、VerifyBalanceEqual(交易余额不小于零中相等性证明验证)、VerifyBalance-Range(交易余额不小于零中Bulletproof范围证明验证)。每个部分验证通过返回1,验证失败返回0;若节点的响应消息为“11111”时,则本节点验证本次交易合法。
参与本次共识测试的节点共4个,分别为N0、N1、N2、N3,允许的最大拜占庭节点数f为1,其中N0为主节点。由于共识过程中节点处理过程类似,下面以N0节点为例分析共识过程:
①主节点N0在获取到Request之后,根据零知识证明证据判决此次交易合法性并处理后生成Pre-prepare消息后,广播给其他从节点,如图5(a)所示。
图5 PBFT共识过程Fig.5 PBFT consensus process
②从节点在接受到Pre-prepare消息后,首先,比对Request与Pre-prepare的消息摘要,确保消息完整性;然后,根据零知识证明证据判决此次交易合法性并处理后,生成Prepare消息并广播给其他节点,如图5(b)所示。
③N0节点在收到其他节点(N1,N2)发送的Prepare消息后,首先,比对消息中的交易合法性验证结果,如果至少3(即2f+1,本次测试f=1)个节点的Prepare消息的交易合法性验证结果一致(包括本地节点),使用自己的私钥对交易合法性验证结果签名;然后,经过处理生成Commit消息,广播给其他节点,如图5(c)所示。
④N0节点在收到其他发送节点(N1,N3)的Commit消息后,根据各节点公钥验证确认消息的签名,至少3个节点的Commit消息的验证通过后(包括本地节点),确认本次交易合法性验证结果,经处理生成Reply消息,回复到联盟链上,如图5(d)所示。
⑤当记账节点收集到的Reply消息中至少2(即f+1,本次测试f=1)个合法性验证结果为“11111”时,本次交易合法性验证通过,记账节点根据密文同态运算更新账本和状态数据库。
4)检查Alice和Bob账户更新。
分别通过Alice和Bob的公钥查询账户余额密文,私钥解密判断账户是否已经更新。获取Alice的账户余额密文结果并解密,如图6所示。
图6 获取Alice的账户余额密文并解密Fig.6 Get Alice’s account balance ciphertext and decrypt it
由图6可以看出,通过链上交易TXID,“ab35eeb 31426f93711fc798b8698c6738968cc34d9799b192b6a4a 99c9e39b02”是上一次Alice账户的链上交易TXID,Alice从“f9039bb9b6c2124ed33195497ebc7ca6cbdd1f12 3f5f263a8c19a26c2773c914”获得本次交易账户更新后自己的账户余额密文C(c1,c2)。Alice根据获取到的密文C(c1,c2)和自己的私钥x解密账户余额,得到账户余额为400。
获取Bob的账户余额并解密过程与获取Alice账户余额并解密过程类似,得到账户余额为600,如图7所示。
图7 获取Bob的账户余额密文并解密Fig.7 Get Bob’s account balance ciphertext and decrypt it
4.3 性能测试与分析
4.3.1 不同密钥长度下的性能测试
使用不同密钥长度测试本文协议的效率如表1所示。为了降低实验偶然性,表1中数据均为50次测试的平均值,密钥长度越长,表明协议安全性越高。
表1 不同密钥长度下的效率对比Tab.1 Comparison efficiency under the different key length
由表1可以看出,随着密钥长度的增大,协议各阶段效率都会降低,但总体时间均在ms级,可根据实际情况选择合适的安全参数,一般情况下设置密钥长度为3 072位。
4.3.2 与其他协议性能的对比与分析
协议[3-4]的基础加密算法采用Рaillier的效率为1 500.6 ms;协议[3]交易合法性通过验证交易输入输出金额相等实现,即交易金额相等性零知识证明;协议[4]验证交易合法性时仅验证交易金额大于零[8]。协议[5]通过Рedersen承诺实现交易金额的隐藏,交易合法性通过验证交易金额相等和交易金额大于零实现。协议[7]基础加密算法采用椭圆曲线同态加密,交易合法性通过交互式零知识证明验证交易金额相等实现。协议[8]基础加密算法采用改进型paillier算法,验证交易合法性时需验证交易金额相等、交易金额大于零和交易余额大于零。为了方便比较性能,统一选择密钥长度为3 072 bit,测试数据为12 bit的十进制整数,保密算法效率包括密钥生成时间以及加、解密时间;将本文协议的范围证明的证据生成和验证时间相加后表示各阶段的范围证明时间。在相同密钥 长度下,各协议的效率对比结果如表2所示。
表2 相同密钥长度下的效率对比Tab.2 Comparison efficiency under the same key length
由表2可以看出:与协议[3-5,7]相比,本文协议不仅对交易金额相等进行零知识证明,而且对交易金额大于零、交易余额不小于零进行了零知识证明,交易合法性验证策略更完善;与协议[3-4,7-8]相比,本文协议在加解密算法效率、验证交易合法性的零知识证明效率均有优势。
5 结 论
本文提出了一个面向联盟链转帐隐私保护的+HomElG零知识证明协议。首先,设计了基于РBFT的联盟链转账隐私保护应用,详细论述了共识交互场景,通过同态加密和零知识证明技术,将交易敏感信息加密并生成相关零知识证明证据公布到联盟链上,供联盟链验证节点在共识过程中公开验证。然后,选用高效的+HomElG同态加密算法,基于Σ协议和Fiat-Shamir算法的思想,构造一种非交互式零知识证明协议,通过+HomElG算法加密交易金额及账户余额,根据密文生成相关零知识证明证据,可以对转账双方的交易金额相等、交易金额大于零、转账方的交易余额不小于零进行零知识证明,使得交易合法性验证策略更完善;在DDH前提下的分析可以看出,本文协议具有正确性、完备性、零知识性。最后,通过构建联盟链转账交易隐私保护原型系统,测试结果表明本文协议可以保护联盟链用户交易金额、交易余额等隐私信息,与同类协议相比,本文协议的效率更高、策略更完善。因此,本文协议可应用于联盟链转账隐私保护场景中,对于促进联盟链的应用与推广具有重要意义。
本文所设计零知识证明协议,在范围证明时使用了Bulletproofs,但采用了可证明安全理论,规约过程增加了相等性证明。联盟链转账过程中的隐私保护应包括身份信息的保护,是下一步的研究方向。