杨亚涛, 蔡居良, 张筱薇, 袁 征
1(北京电子科技学院 电子与通信工程系,北京 100070)
2(北京电子科技学院 密码科学与技术系,北京 100070)
3(西安电子科技大学 通信工程学院,陕西 西安 710071)
区块链技术因其“去中心化”与“去信任化”等特点,可在可信第三方不参与的情况下与陌生节点之间进行安全的信息传递,有效提高了信息交互效率,降低交互成本,在比特币、供应链等领域具有较为广阔的前景[1].哈希算法以及数字签名算法在区块链中应用广泛,用以验证区块以及交易的正确性.区块链在实际场景中应用时,不仅需要核验节点的公钥地址,还应验证各个节点的真实身份.传统的PKI体制因为可信中心的权重过大,不符合区块链“去中心化”与“去信任化”的特点.因此,无证书的加密与签名方案[2]可以在区块链技术中得到应用.2012年,Yu等人[3]提出一种在标准模型下可证明安全的无证书签名方案,但该方案需要使用5次以上的双线性对运算,计算效率较低.同年,Gong等人[4]提出基于椭圆曲线的无证书密码体制,但其并不能有效抵抗第一类超级攻击者的攻击.2017年,Tseng等人[5]提出一种抗连续泄漏攻击的安全无证书签名方案.
隐私泄露是区块链技术中不容忽视的问题[6].与传统中心化结构不同,区块链机制不依赖特定中心节点处理与存储数据,因此可以避免恶意中心或因其他原因导致的中心信息泄露[7].但为了验证交易信息,区块链中的所有交易记录必须公开,因此将显著增加信息泄露风险.Kosba等人[8]认为,交易地址暴露于区块链环境中容易被跟踪查找.因为区块链技术与当前 IT架构存在区别,以往的隐私保护方案并不适用.所以,区块链的隐私保护需要更具针对性的机制[9].2013年,Miers等人[10]基于比特币提出了拥有匿名性的区块链数字货币方案——零币.该方案通过运用零知识证明等密码学技术,以隐藏用户地址、切断交易双方联系的方式保证了交易的非关联性,从而达到匿名与不可追踪的效果.但该方案基于公有链进行设计,区块生成速度与比特币近似,无法进行高效率的交易流通,并且节点需要额外维护货币作废列表以保证交易的惟一性,在一定程度上影响了交易验证的效率.2016年,Shen等人[11]提出了基于环签名的区块链秘密交易方案.该方案随机选取无关地址后连同交易发起方进行环签名,达到混淆交易用户身份的目的.但该方案与零币方案均存在因切断交易关联性而导致溯源性较差的问题,难以在实际场景中得到应用,并且单次交易信息量过大,而该方案的匿名性取决于参与环签名的地址数量,为缩小交易信息量而减少地址个数,也将面临去匿名化的风险.
群签名的概念由Chaum和Heyst[12]在1991年提出后,它以独特的性质引起人们的关注并被广泛研究.群签名允许群体中任何一名成员代表整个群体对消息进行匿名签名.与普通数字签名一样,群签名可以公开验证,并且发生纠纷时,群管理员可以打开群签名以揭露签名者的真实身份.基于身份的群签名方案具有在身份标识验证的基础上,采用群签名的方式保护用户的隐私,兼具二者特点,在区块链环境中具有应用价值.目前,许多基于身份的群签名方案被提出.2008年,Zhang等人[13]提出一种针对恶意PKG的无证书群签名方案.2010年,陈虎等人[14]提出一种高效的无证书签名与群签名方案,具有前向安全性等特点,但其并不能使用户的不同交易隐蔽关联性,无法直接应用于区块链中.2012年,Zhan等人[15]提出基于身份的门限群签名方案.同年,Cheng等人[16]提出了实用的基于身份的群签名方案.2015年,Lin等人[17]提出一种基于群签名和基于身份签名的安全隐私保护协议.2017年,Bande等人[18]提出具有验证者本地撤销的安全隐私保护群签名方案,其安全性基于强RSA假设.但该方案并非基于身份,所以难以抵抗公钥替换攻击.以上方案虽然可以实现无证书签名以及利用群签名保护签名者隐私,但均没有针对区块链特殊架构进行设计,无法应用于区块链高开放度的环境中,对节点身份进行隐藏与保护.
本文的贡献在于,提出一种基于SM9算法可证明安全的区块链隐私保护方案,对现有SM9算法进行适当优化,提出了一种基于 SM9算法的群签名方案,以区块链中的联盟链为应用环境,实现对交易过程的隐私保护.方案效率较现有方案相比,所需指数运算与双线性对运算均有减少,运算效率得到提升,可以为联盟链的应用提供有效安全和隐私保护支撑.
区块链是一种按照时间顺序将数据区块以链条的方式组合成特定的数据结构[19],并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账,能够安全存储简单的、有先后关系的、能在系统内验证的数据[20].区块链可以看做存储数字记录的数据库,数据库由网络节点共享,节点可以提交新的记录,区块链网络通过共识机制保证节点之间数据的一致性,记录一旦被输入,就永远不会被更改或删除.
总体上区块链可以分为 3种类型:公有链、联盟链和私有链,本文设计的隐私保护方案主要在联盟链中实现.在联盟链中,区块链的区块和交易的有效性由预先设定的一个验证者群体决定,这个验证群体形成一个联盟.例如,要使得联盟链中的一个区块有效,需要联盟中 50%以上的成员认可通过,新区块才有效.区块链上的信息可以是公开的,也可以只对联盟成员可见.
SM9密码算法涉及有限域、椭圆曲线、椭圆曲线上双线性对的运算等基本知识和技术[21],其中,SM9数字签名算法包括数字签名生成算法和验证算法.签名者持有一个标识和一个相应的私钥,该私钥由密钥生成中心(key generation center,简称 KGC)通过主私钥和签名者的标识结合产生.签名者用自身私钥对数据产生数字签名,验证者用签名者的标识生成其公钥,验证签名的有效性,即验证发送数据的真实性、完整性和数据发送者的身份.
群签名是由包含下面过程的数字签名方案[22]组成.
(1) 创建:一个用以产生群公钥和私钥的多项式时间概率算法;
(2) 加入:一个用户和群管理员之间使用户成为群管理员的交互式协议.执行该协议可以产生群员的私钥和成员证书,并使群管理员得到群成员的私有密钥;
(3) 签名:一个概率算法,当输入一个消息和一个群成员的私钥后,输出对消息的签名;
(4) 验证:一个在输入消息原文、对消息的群签名以及群公钥后验证签名是否有效的算法;
(5) 打开:一个在给定一个签名及群私钥的条件下,确认签名人的合法身份的算法.
本文提出一种适用于区块链技术的隐私保护方案,通过对广播交易信息中用户身份信息进行多KGC群签名运算,实现隐藏用户身份以及同一用户不同交易之间的关联性.具体描述如下.
本方案基于联盟链进行设计,节点由主要节点与次要节点构成,具体结构如图1所示.
次要节点持有各自的签名密钥对与群签名密钥对,次要节点为群签名中的用户,次要节点之间可进行交易,完成区块链中点对点交易信息传递的流程.交易商定结束,需对信息进行群签名后进行广播,新区块将交易信息写入并由各个节点确认后即为生效.
次要节点之间需要使用签名来验证对方身份,并使用群签名生成需要广播的交易信息.
签名具体步骤如下.
1. 签名生成
设消息为比特串M,则次要节点A若需要对其进行数字签名,则首先计算群GT中元素g=e(P1,Ppub-e),并选取随机数r∈[1,N-1],计算w=gr以及整数h=H2(M||w,N),之后,计算整数l=(r-h) modN,若l为0,则重新选取随机数;l不为0时,则最后计算S=[l]dsA,可得到关于消息M的签名(h,S).
2. 签名验证
设验证者为次要节点B,其接收到的消息M′的签名为(h′,S′),如需要验证签名,则需要首先验证h′∈[1,N-1]以及S′∈G1,若均成立,则计算群GT中的元素g=e(P1,Ppub-e),再计算群GT中的元素t=gh′与整数h1=H1(IDA||hid,N),之后计算群G2中的元素P=[h1]P2+Ppub-s与群GT中的元素u=e(S′,P),再计算群GT中的元素w′=u·t,最后计算h2=H2(M′||w′,N)并与h′进行比较,若一致,则验证通过.
相比 SM9标准的签名验签算法,考虑到联盟区块链中多个主要节点与 KGC的功能要求,我们提出采用多KGC模式对标准SM9签名算法的参数生成步骤进行改进,将KGC的功能分配于主要节点,主要节点共同参与参数维护与密钥生成,符合联盟链部分去中心化的架构要求,以及将无证书体制与联盟区块链运作模式结合的需要.因签名算法基于SM9算法进行改进,故加密算法改进方式于此类似,不再赘述.
群签名主要功能如下.
1. 创建
设群管理员(group manager,简称GM)的身份为IDGM,则其需要向全部KGC申请建立群,KGC在核实GM身份后,将IDGM记录,以便之后KGC对新加入的成员生成并发放群私钥.申请群成功后,该群的公钥即为GM身份IDGM.群管理员的私钥则由签名算法生成并交由管理员GM保存.
2. 加入
当次要节点A想加入群时,主要分两种情况.
(2) 若KGC在群中,则次要节点A可直接将自己的身份IDA通过安全信道送于KGC核实,通过后,群密钥对生成方法与第1种情况相同.
3. 群签名
若群中次要节点A要对消息M进行群签名,则其需要首先计算g=e(P1,Ppub-e),并秘密选取随机数r1∈[1,N-1]与r2∈[1,N-1],计算w=gr1,之后计算h=H2(M||w,N),计算S1= (r2-1)·(r1-h) ·dsA与S2= (r2-1)(r1-h) ·dsAG,最后计算h1=H1(IDA||hid,N),P3′=[h1]P2+Ppub-s,P3=[r2]P3′得出次要节点A对消息M的群签名(h,P3,S1,S2).
4. 验证
对于接收到的消息M′与其群签名 (h′,P3′,S1′,S2′),群中次要节点B若想验证其是否属于群IDGM,则需要首先计算h1=H1(IDGM||hid,N),接着计算P=[h1]P2+Ppub-s,之后计算u1=e(S2,P)与u2=e(S1,Ppub-e),若u1≠u2,则验证不通过;否则继续计算u=e(S1,P3),g=e(P1,Ppub-e)与t=gh′,最终计算w′=u·t,得到h=H2(M′||w′,N).对比h′与h,一致则验证通过,至此可证明该消息由群IDGM中某个成员所签名.
5. 打开
在区块链交易中,节点间进行信息交互时需要核对对方身份,所以将签名算法与群签名算法一同使用,当需要核实信息签名来源时,KGC可根据所持有的用户信息IDA找到该用户所属密钥,并查看是否已被撤销或更新,以确定交易产生的时间以及是否合法.
6. 系统维护与成员撤销
当 GM 需要撤销群成员节点时,在将要撤销的成员信息中记录“已作废”标记;而当系统参数需要更新时,KGC可重新生成系统参数,并且更新用户信息,分发给群成员新的密钥对.同时保留曾经使用的系统参数.
次要节点之间的交易流程如图2所示.
交易进行时,发起方节点A需将与本次交易相关的上次交易信息的所属编号Num(TX0),与上次交易中,节点A所属的哈希值HashA(TX0),使用与上次交易相同的群签名要素P3(A)进行群签名(h,P3(A),S1,S2)后,结合本此交易的待交易信息UTXO0(B)(如货币数量等)进行签名,使用接收方节点B的身份为公钥进行加密,并将信息传递给节点B.交易请求信息①中包含的内容为
其中,Sig(M)表示基于SM9算法的多KGC签名方案,GSig(M)表示使用本文设计的群签名方案.
节点B接受后,使用私钥进行解密,使用节点A的公钥验证签名,以及使用群身份进行群签名验证,全部通过并且核对本次交易的输入P3(A)与上次交易的输出P3(A)′是否一致,相同后确认交易信息,无误后组合Num(TX0),HashA(TX0)以及UTXO0(B),并计算其哈希值,作为所属自己的本次交易输出哈希值,并将此数据进行群签名(h,P3(B),S1,S2),最终将结果签名,使用节点A公钥进行加密,返回节点A,交易确认信息②中包含的内容为
节点A解密验签通过后,将交易信息进行广播,并入新生区块中,广播的交易信息(TX)结构如图3所示.
广播的交易信息主要包括与本次交易关联的上次交易信息TX0以及本次交易的输出UTXO.TX0用于追溯上次交易的相关信息,并据此核对本次交易输入是否合理;UTXO主要包括各个输出所属的交易信息UTXO0以及输出哈希值与群签名,除了用于各个节点的确认之外,也作为下次交易输入的核对信息.
本方案基于联盟链,主要节点负责区块生成.各主要节点首先需商定区块生成的共识算法,确保不会生成分叉区块.次要节点不能生成区块.区块结构如图4所示.
其中,新生区块需要记录上一个区块的编号Num(Block0)以及其哈希值Hash(Block0)来保证区块之间的关联性.同时,生成区块时,需要确定本区块的编号Num(Block)并计算本区块中全部数据的哈希值Hash(Block),将此4个数据组合,进行签名,最后发布.
各节点在接受新区块时,需对其进行身份验证,确认其为主要节点生成,并且与最近一次生成的区块相关联后,再进行交易信息验证流程.各次要节点接收到交易信息后,需要首先验证其群签名是否有效,验证通过后,寻找与此交易输入关联的上一次的交易输出UTXO0,核对本次交易输入端的P3与上次交易输出端的3P′是否相同:若一致,则本次交易验证通过.当本次交易经过全部次要节点中半数以上验证通过后,才可并入新区块中.至此,节点A与B的交易确认有效.
本方案在保护节点用户身份隐私的同时,因交易采用 UTXO的形式,具有可溯源特性.在实际场景,如供货链、物品买卖、房屋租赁等交易中,不同节点用户交易过程中可能会产生纠纷,通过应用本方案,可进行溯源追责.本方案的具体交易流程如图5所示.
交易流程说明如下.
1) 当次要节点A准备向B发起交易时,需首先将与本次交易关联的上次的交易输出以及本次的交易内容进行签名与群签名,加密处理后,形成如公式(1)所示内容,发送至次要节点B;
2) 节点B收到后进行解密与验签,审核交易信息无误后,附上自己关于此次交易自身的群签名,做签名加密处理后,形成如公式(2)所示内容,返回节点A;
3) 节点A审核无误后,将所有相关信息组合成如图3所示的等待入链的交易信息,包括上次交易的编号Num(TX0)及哈希值HashA(TX0)、本次交易输入输出的群签名GSig(Hash0)与GSig(HashB)等内容,发送至主要节点V1.此时,交易发起方节点A与接收方节点B等候新区块发布与审核;
4) 主要节点V1将收到的所有交易信息以图4所示的结构写入新生区块,发布区块并等待次要节点反馈,所有进行交易后等待的次要节点收到发布的新区块后,对其中信息进行群签名验签,并将验签结果返回主要节点V1;
5) 当V1收到当前参与交易节点半数以上的验签通过信息后,将新生区块并入链中.至此,所有在此区块中的交易生效,交易流程结束.
上述交易流程中采用 UTXO的交易方式,所有节点均可通过查看已入链区块的交易信息进行交易溯源.如在货物买卖场景中,若交易接收方收到的货物出现了质量问题,则可以通过对该次交易逐链溯源的方式,找到该货物的首发地址,即为主要节点的供货商或该货物的生产厂家进行追责.
对于签名算法,在签名验证阶段,需要验证h2与h′是否相等,因为h2=H2(M′||w′,N),h′=H2(M||w,N),验证二者是否相等等价于验证w与w′是否相等.因为u=e(S′,P),而:
又因:
则:
所以验证通过,签名算法正确性得到证明.
对于群签名算法,在群签名验证阶段,需要比对u1与u2是否一致,所以其正确性证明如下:
u1=e(S2,P)=e(S2,([h1]P2+Ppub-s))=e(S2,([h1]P2+[ks]P2)),而:
由双线性对性质可得:
二者结果一致,所以可继续执行下面的验证过程.而:
二者同样一致,所以验证通过,方案正确性得到证明.
3.2.1 不可伪造性
根据无证书签名的安全模型[3]可知,方案需要做到成员密钥对于签名不可伪造.
· 第1类敌手——公钥替换攻击
对于签名算法,因为基于身份的无证书签名算法使用节点的ID为公钥进行签名,所以可抵抗公钥替换攻击.对于群签名算法,敌手E1知道群节点A的公钥IDA,若利用此身份进行通信,则必须伪造该身份的密钥对.
· 第2类敌手——恶意的KGC攻击
在区块生成与验证阶段中,主要节点负责生成区块,所生成区块中包含其自身签名,各节点需要验证后方可并入链中.除了主要节点,其余节点均不能生成区块,除了由主要节点生成的合法区块,任何新区块均为无效区块,保证了新生区块的不可伪造性.各个节点验证TX时,需要验证输入与输出的群签名,通过后才能并入区块,保证了交易信息的不可伪造性.
3.2.2 前向与后向安全性
当群签名方案的系统参数需要更新时,KGC需重新商定ks以及根据各自持有的kej确定主私钥,向所有节点发放新的密钥对.以前的系统参数仍要保留,群成员节点可以根据当时生效的参数来验证更新前的签名.对于系统参数而言,由于ks与kej均为随机选取,所以二者在更新前后不存在联系,敌手无法根据当前阶段的密钥伪造更新前的密钥.若敌手持有更新前的密钥,也无法加入群,同时也无法伪造当前阶段正确的群签名.
给定合法的群签名(h,P3,S1,S2),从算法流程可知:签名验证过程中,仅使用群身份IDGM作为公钥进行验证,来判断是否为群内成员节点,但不能验证具体成员节点身份.
本方案基于 SM9算法改进设计,除了初始参数与密钥生成之外,签名验签步骤基本一致,所以计算代价与SM9数字签名算法基本相同.而本方案还可有效抵抗恶意KGC攻击,弥补了SM9数字签名算法的不足.
为了说明本方案的运算效率与安全性,本文列举几种典型方案进行对比.现定义符号TE表示指数运算,TM表示群中元素点乘运算,TB表示双线性对运算.由于dsA为区块链中群成员节点持有,可将g=e(dsA,P2)视为预运算,不作为运算步骤考虑.可得到性能对比分析表,见表1.
Table 1 Comparison of efficiency and security表1 方案效率与安全性对比
在上述运算过程中,双线性对运算消耗资源较多,因此主要比较该运算在方案中的使用次数[26].从表1中可以看出:本文的方案在验签步骤上较文献[2]减少 2次双线性对运算,验签效率提高约 40%;与文献[23,24]相比,虽然双线性对运算的使用次数相同,但本方案指数运算分别减少4次与2次,计算效率整体得到提高.本方案与SM9算法与文献[25]相比整体效率相当.对于方案安全性,文献[2]与SM9签名算法均无法抵抗第二类攻击,本方案通过多KGC的方式,安全性更高,满足了区块链节点认证以及交易信息确认中保护身份隐私的需要.
除此之外,本文列举两种主流的区块链系统隐私保护方案进行对比.考虑到实际应用中可能发生的追责情况,方案应在保护隐私的同时,满足一定的溯源性,且为了满足高频率的交易请求,区块生成时间应在保证安全的基础上拥有较快的生成速率.对比分析表见表2.
Table 2 Comparison of different privacy preserving schemes表2 隐私保护方案对比
通过表 2对比可以看出:在交易关联性方面,文献[11]方案由于交易发起方通过环签名的方式隐藏身份,但通过统计分析等方法,仍存在暴露关联交易的风险;本方案在具有强匿名性的同时,由于P3=[r2]P3′,同一节点用户的不同交易均存在密码学计算困难问题,无法证明关联,保证了弱关联性.在溯源性方面,由于文献[10]方案采用货币“生成-销毁”以及零知识证明认证的方式来代替用户间的交易过程,导致溯源性弱;而本方案沿用区块链中的 UTXO方式进行区块生成,使得交易仍可溯源,在实际场景应用中,主要节点需要公开身份,而本方案初始交易均需由主要节点发起,故可在需要情况下进行溯源追踪.在交易信息量方面,文献[10,11]方案每笔交易需要产生的数据量较大,本方案在保证性能的前提下,交易信息量分别为两种隐私保护方案的1/5与1/3,减轻了区块容量的压力,方案更适用于实际应用,具有较高的安全性与通信效率.
本文主要测试方案中所使用的群签名算法的运行时间以及主要节点生成新区块后验证成功与并入链中所需的时间.方案仿真使用Java语言进行测试,使用Windows系统,CPU2.4GHz,内存为4GB.新生区块由一个主要节点产生,并由10个次要节点进行验证.由图6~图8可知,群签名生成与验证所需时间为21.632ms与46.141ms,所需时间较短;对于生成交易信息过程,在节点确认信息无误的情况下,生成发送至主要节点的交易信息所需时间为 133.642ms,所需时间较短;而对于区块验证过程,在不考虑区块内容传输时间的情况下,过半数节点验证通过,新生区块合理并入链中所需时间为63.572ms;主要节点产生新区块的间隔定为2s,由此可知,在拥有10个次要节点时,一次交易从产生到有效所需的时间为2.063s,交易时间相对较短,可以满足区块链交易实际需要.
本文通过将 SM9算法、群签名与区块链技术相结合,提出并设计了一种可应用于区块链环境中的隐私保护方案,通过多 KGC群签名机制隐藏了交易双方的节点身份.通过安全性证明与效率分析,本方案具有签名不可伪造性、可保证节点匿名性及前向安全性,计算效率较目前提出的方案有较大提升.综合而言,本方案在运算时间与安全性方面整体具有较大优势,可实现在节点间进行身份验证的同时,保护节点隐私的目的,符合联盟区块链部分去中心化和保护节点隐私的要求.本方案可应用于大量需要验证用户身份的场合,如房屋租赁、实物交易等等.如何根据具体应用场景简化交易流程,提高单位时间内的交易数量,可以作为下一阶段的研究工作.