论文部分内容阅读
伴随着经济数字化转型深入,以区块链技术为代表的多方协作技术逐渐普及,如何验证承载着多样化价值的数据有效性早已成为全行业的普遍需求。满足这一需求的关键是引入各式各样数字化契约,而支持契约中数字签名高效验证则是关键中的关键。Hyperledger Fabric是流行的开源许可区块链平台,它包含一种称为背书的机制,用于建立交易的有效性。对于块数据,每个节点都会使用其自己的私钥生成一个独立的数字签名,并将其广播到其他节点。其他节点将验证签名并将其写入下一个数据块。这样,当共识节点个数较大时,存储在每一轮共识块中的签名数据将继续增加,从而占据存储空间。每当新节点加入网络并需要同步历史块时,大量的签名数据将对网络带宽构成巨大挑战。聚合签名方案可以在一定程度上解决上述问题。与直接保存多个独立签名相比,使用聚合签名技术后,每个节点将收集其他节点广播的聚合签名片段,然后进行聚合并保存签名片段。这样,当一个新节点加入时,只需要下载聚合的签名数据来同步历史块,就大大减少了网络带宽的占用。为了提高系统效率,在保证海量签名数据能够被验证的前提下,对数字签名数据进行汇总和压缩。对于Fabric的背书系统,是由四种不同的系统链码维护的,分别是ECSS(Endorser System Chaincode)背书系统链码、VSCC(Validator System Chaincode)验证系统链码、MVCC(Multi-Version Concurrency Control)多版本并发控制链码、LSCC(Life Cycle Sys-tem Chaincode)生命周期系统链码。ECSS链码负责维护背书系统的背书部分功能,VSCC链码负责在提交到账本之前的背书验证,而MVCC链码主要是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,也就是状态数据库的维护、LSCC主要是对生命周期管理。由于VSCC是以一种队列形式依次验证区块中背书签名,从而导致大量的待验证区块在上链之前聚集,导致验证效率低下。也就是说每次VSCC验证的时候都会先针对每个交易,先编译出正确的背书验证策略,然后根据这个策略去验证每一个交易的背书签名,背书签名会根据背书策略的不同有多有少。而Fabric原版的背书签名采用的是ECDSA算法,所以假如要验证一个3-outof-5背书策略的背书签名首先需要反序列化至少三个X.509证书,再依次对至少三个签名进行验证。所以本文提出利用聚合签名算法代替ECDSA(Elliptic Curve Digital Signature Algorithm)签名算法,这样VSCC验证链码只需要验证交易中唯一的签名,从而提高其运行效率。而聚合签名大致可以分为两种,一个是交互式聚合签名(IAS),一个是非交互式聚合签名(NAS)。交互式聚合签名需要签名者互相合作,而非交互式聚合签名可以由一个签名者来聚合。交互式聚合签名需要牺牲网络传输延时去弥补验证的时间,而非交互式聚合签名可能存在安全问题。另一种划分聚合签名的方法是根据不同的底层技术,一种是基于双线性对的聚合签名,另一种是基于Schnorr的聚合签名。基于双线性对的聚合签名例如BLS(Boneh-Lynn-Shacham)聚合签名,而其签名验证的复杂度要比ECDSA高上一个数量级。例如,在验证区块中1000笔交易的聚合签名时,仍需要进行1000次配对计算,这可能比使用ECDSA时(对1000个单独签名进行验证)还要慢。但好处在于,由于聚合签名只占32字节,这种特性允许区块中放更多笔交易。Schnorr聚合签名是使用Schnorr签名的各方生成的对各自密钥的签名聚合,它可以把一笔多签交易的各个参与方的公钥和签名合并为一个公钥与签名,整个合并过程是不可见的,无法从合并后的公钥与签名推导出合并前的信息,并且在验证时仅需一次验证即可。目前,Mimblewimble已利用Schnorr签名算法实现签名聚合。在使用ECDSA进行多签的情况下,如果共有N个私钥进行了签名,则验证时需要对N个签名各自进行验证。由于Schnorr签名算法的线形特性,在同样的情况下,N个私钥的签名可以聚合成为一个签名。两种多签验证方式的资源消耗可以近似的比较为:ECDSA为一次取模加两次点乘,Schnorr为一次点乘的资源消耗。显而易见的结论是,使用Schnorr签名算法所消耗的资源更少。并且使用Schnorr签名算法进行聚合签名,可以提供如下额外的好处:一是可以大大减少验证签名的成本。Schonrr签名算法的优势是显而易见的,对于一笔多签交易,原本需要进行多次的验证,而聚合签名仅需验证一次,从而提升节点对于交易的验证速度,二是由于将多个签名聚合为一个签名,可以大大减少多重签名的大小,并且可以显著降低对于网络传输消耗的带宽,以及对于节点存储空间的占用。三是使用Schnorr聚合签名可以提高链上数据的隐私性。对于验证者来讲,聚合签名看起来和普通的Schnorr签名并无区别,无法分辨这一笔交易是普通的交易还是一笔多签交易,而参与交易的用户的公钥和签名都不会暴露出来。本文通过对代码的研究发现了背书系统的其中一个效率瓶颈在于VSCC验证,针对这一问题,本文首次将聚合签名应用于Hyperledger Fabric背书系统中,以优化其效率。