李一聪, 周宽久, 王梓仲
大连理工大学软件学院, 大连 116024
区块链上的数据公开透明化对用户数据的隐私造成了很多负面影响.由于去中心化的特点,用户可以随时查看链上其他用户的数据,并且当用户数据请求存储至区块链以及数据被系统验证时,这些数据信息会在一定程度上泄露给运行系统或其他用户,降低了链上数据的安全保密性[1].
因此,在保证数据去中心化特征的基础上,如何加强区块链数据的信息隐私安全性,已成为区块链隐私保障的核心问题.区块链交易层数据与服务应用端之间的传输机制隐私保密性以及区块链数据的安全可验证性也变得十分重要[2].设计合理的隐私保护机制和智能合约程序可以确保区块链的可扩展能力更强、交易处理规模更大,运算效率更高[3].
在区块链发展历程中,也涌现出许多隐私保护技术,例如环签名(Ring signature)[4]、混币技术(Mixed currency)[5]、地址隐身(Address stealth)[6]、零知识证明等.零知识证明旨在不泄露明文的情况下,通过密码学同态加密等手段产生有效证据,供智能合约验证密文有效性,从而实现隐私保护.
本文针对基于零知识证明的区块链隐私保护问题,首先概括了区块链结构与隐私泄露的关系,阐述了零知识证明的基本概念;其次总结了零知识证明在区块链隐私保护中的一些主流算法,并对这些算法进行比较和分析;最后阐述了已提出的基于零知识证明的区块链隐私保护方案,并对这些保护方案的特点进行汇总和归纳.
自2009年区块链技术开始迎来黄金发展期开始,区块链结构就在不断变化与升级.发展至现今状态,区块链在架构上基本可被拆分为网络层、交易层、应用层3部分[7].由于交易层负责控制全局账本、数据节点共识与激励共识、设定交易格式、智能合约验证等重要职能,并且其所涉及的数据种类繁杂、吞吐量庞大[8],因此交易层存在着比网络层、应用层更严重的隐私泄露问题,本文中阐述的零知识证明技术,就是解决区块链交易层隐私保护问题的一项关键技术.
如图1所示,零知识证明技术属于区块链链下扩容手段的可验证链下计算方式,数据首先通过零知识证明进行链下安全计算生成证据,之后将计算结果交由链上智能合约程序验证,形成链下计算、链上验证的隐私保护架构[9].
图1 可验证链下计算流程
零知识证明(zero-knowledge proof)理论在20世纪80年代由GOLDWASSER等提出.零知识证明技术是解决数据保密验证的一种密码学手段[10].
零知识证明分为交互式与非交互式两种.交互式证明靠验证器向证明者连续提出问题,并验证证明者提供的结果来判断数据真实性.交互式证明的验证效率低下,交互响应时间较长[11],而且交互证明只是概率性判断数据的真实性,证明的准确率不高.因此,目前应用在区块链隐私保护问题中的证明方式大多是非交互式证明,本文中研究阐述的也是非交互式证明.非交互式证明要求证明者通过配对函数、大数计算等密码学算法计算证明值,并将值发送给智能合约验证器[12].这个过程只需要执行一次,就可以准确地验证数据真实性,因此在准确率和响应时长都优于交互式证明.
非交互式零知识证明技术具有完整性、正确性、零知识性的特点.但在区块链隐私保护应用中,非交互式零知识证明还需要具有另外三个支撑性质:
隐私性(Privacy):对链上数据内容具有较好的隐藏能力.
可扩展性(Scalability):保证区块链分布式网络的交易规模.
链上可计算性(On-chain computability):保证链上验证所需计算量在可承受范围.
这3项性质直接决定了一种零知识证明技术能否稳健地执行链下计算,并高效地与智能合约参与链上隐私验证.因此,本文将上述3个支撑性质作为衡量不同非交互式零知识证明技术在区块链上性能的评判指标.
当前适合应用在区块链中的主流非交互式零知识证明有ZK-snark[13]、ZK-stark[14]、AZTEC[15]、Bulletproof[16].
本文按照时间顺序分别阐述了上述4种主流技术以及一些其它创新的非交互证明方法,如Shellproof[17]、ZKRP[18].为更清晰地了解这些技术的发展历程,本文列出了上述零知识证明技术被提出的顺序时间轴,如图2所示.
图2 证明技术的发展时间轴
ZK-snark技术起源于Zcash[19]电子货币的出现.ZK-snark技术也是现今为止作为解决区块链隐私问题最有效的零知识证明技术之一.ZK-snark主要分为四部分:多项式转换、随机抽样、同态加密、零知识认证[20].其执行流程如图3所示.
图3 ZK-snark执行流程图
首先,系统需要将验证的问题拆分并转换为一组基于Fujisaki-Okamoto承诺[21]的多项式等式,验证问题的真实性只需要验证多项式等式是否成立即可.这时,证明者(Prover)通过获取一组公共参考字符串(common reference string,CRS),来计算随机抽样测试点带入多项式后的计算结果,因为测试点是经过同态加密的,证明者不知道测试点的明文内容,但依然可以对测试点密文进行运算并通过解密得到明文的运算结果.最后证明者将计算结果发送给验证器(Verifier).若验证器验证等式成立,则相信证明者提供的验证问题为真.
早期ZK-snark的构建协议以Sonic[22]和Groth16[23]为主,Sonic支持通用可变的公共参考字符串,证据尺寸固定,但是验证成本较高.而Groth16的证明速度快、证明数据量小,因而被应用至Zcash平台.
但已有的ZK-snark构建协议最大的缺陷在于,需要系统提前为证明者与验证者提供公共参考字符串来完成验证,而公共参考字符串通常由小部分群体制定,使得其很容易被恶意攻击,提交假证据影响验证结果,形成信任危机.因此ZK-snark在隐私性能方面存在一定缺陷.但在2020年初,ZK-snark推出了许多全新的构建协议,这些构建摒弃了已有的可信设置,采用透明设置或通用设置来增加安全系数.例如采用透明设置的Fractal[24]、Halo[25]、SuperSonic-CG[26]以及采用通用设置并基于Sonic改进的SuperSonic-RSA[27]、Marlin[28]、Plonk[29].
ZK-stark由BEN等提出,ZK-stark的前身是SCI(Scalable Computational Integrity)证明系统[30],其开发目的是依靠抗碰撞散列函数来代替可信设置,从而解决传统ZK-snark的信任危机问题.但SCI不能够进行零知识证明,而且相比ZK-snark的证明性能较差.因此,BEN等[14]经过进一步改进,提出了ZK-stark.ZK-stark同样具有零知识特性,以及知识论证流程.ZK-stark也实现了将隐私数据的输入进行加密隐藏,这些处理思想在本质上与ZK-snark相同.
但ZK-stark与ZK-snark的不同之处在于,ZK-stark拥有可扩展性,ZK-stark的可扩展性表现在证明耗时与原始计算耗时呈拟线性关系,验证耗时与原始计算耗时呈对数关系.因此,当验证的数据集变得很大时,ZK-stark的验证时间将比ZK-snark快很多.另外,ZK-stark不需要生成公共参考字符串,因此ZK-stark的证明生成过程比ZK-snark更加透明,对外界具有更好的抗攻击能力.
AZTEC(anonymous zero-knowledge transact-ions with efficient communication)[15]作为一种新的基于智能合约端零知识证明的隐私保护方案在2018年12月被提出.AZTEC放弃零知识链下计算,将ZK-snark部署在智能合约中,目的是为了以更低的计算成本和更有效的方式去加密区块链数据,旨在将隐私交易保护实现在区块链平台上.
AZTEC将同态加密算法与一种范围证明结合,通过椭圆曲线标量乘法和双线性配对比较来验证交易的合法性.但这种方法依然需要椭圆曲线点作为公共参数从而构建可信设置.
Bulletproof又称子弹证明,是一种使用内积法设计的范围证明,由斯坦福大学密码学家BENEDIKT 等[16]提出.
Bulletproof由两部分组成,分别为内积范围证明与改进的内积参数协议.其中,改进的内积参数协议主要是将BOOTLE等[31]提出的内积参数论证如式(1)所示:
p=ga·hb·uc
(1)
进行参数向量维度的缩减,将向量协议n维向量a、b与n维元素g、h拆分为原来一半,将维度由n变为n/2,使论证的通信复杂度从6lg(n)降低至4lg(n),改进后的参数向量如公式(2)所示:
(2)
内积范围证明采用Pedersen向量承诺方案[32],将秘密值范围表示成一组向量内积,随后加入随机数因子将内积进行盲化,并利用改进的内积参数协议进行内积多项式合并.最终,验证器以验证一组盲化多项式正确性的形式,去验证秘密值范围是否合法.
Bulletproof的最大优点是,其生成的证据十分简短,仅需要组元素就可以证明秘密值在一定范围内.在时间上,证明者使用Bulletproof提供证据的时间和验证器验证的时间与维度n是线性的,并且Bulletproof支持聚合范围证明.但即使子弹证明对内积参数进行了优化,在处理实际问题中的计算成本仍然很高.
2.5.1 ZKRP
ZKRP[18]是一种基于Fujisaki-Okamoto承诺改进的零知识范围证明,由TSAI等提出.ZKRP为整数的范围证明设计了一种等式如式(3)所示:
M+R=ω2(m-a+1)(b-m+1)
(3)
假设证明整数m属于范围a至b,则有不等式(m-a+1)(b-m+1)>0,因为上述不等式容易暴露整数m的值,因此ZKRP引入系数ω2并将不等式变为等式,等式一边由0分解为M与R,只需要证明M为一个平方数,并且R>0则M+R>0,则可以相信整数m属于范围a至b.ZKRP首先根据Fujisaki-Okamoto承诺,给出初始证据c1、c2、c′,生成式(4)如下:
(4)
之后将EL证明(two commitments hide the same secret proof)[33]与SQR证明(committed number is a square proof)[34]相结合,通过提供相等数值的证据证明R>0和数值为平方数的证据证明M为平方数,进而证明M+R>0.这种ZKRP证明相比与普通的范围证明的优点是,它可以对任意范围的整数提供证据,证明相对灵活,性能稳定.
2.5.2 Shellproof
Shellproof[16]是一种基于Bulletproof改进而来的零知识范围证明.Shellproof利用特定的压缩标量对内积参数进行压缩,将Bulletproof中的n维向量a、b与n维场元素由式(5)改进为式(6):
(5)
改进为:
(6)
Shellproof只将参数向量的一半与x进行运算,取消向量与x的-1次幂相乘,其余算法步骤与Bulletproof相同,却将证明计算复杂度从Bulletproof的4lg(n)降低至2lg(n).
本文对比了4种方法的证据尺寸和验证时间复杂度以及可信设置情况,如表1所示,因为Shellproof是在Bulletproof基础上做出的改进,因此将Shellproof同时与主流算法作对比.
根据表1中信息可以看出,Bulletproof与Shellproof的性能更全面,其证据尺寸明显小于ZK-snark,并且验证时间复杂度更为稳定,可信设置也得到了完善.而ZK-stark的性能介于ZK-snark与Bulletproof之间,由于ZK-stark的证据尺寸过大,当分布式服务器性能不高时不建议使用ZK-stark进行证据生成.
表1 方法性能的分析比较
根据表2可以看出,Bulletproof与Shellproof通过内积参数法的改进,在隐私性上比ZK-snark、ZK-stark以及AZTEC有很大的提升的同时,并没有牺牲其可扩展性,其证据生成时间和验证时间仍然是线性的.但是由于内积参数法生成的证据,其智能合约验证运算较为复杂.因此,在链上可计算方面Bulletproof与Shellproof弱于ZK-snark.
表2 基于3种性质的方法比较
Zcash[19]由ECC电子货币公司于2016年发行,是最经典的采用零知识证明技术ZK-snark进行隐私保护的区块链应用.
由于在Zcash发行时,ZK-snark技术还是一种十分尖端的加密证明技术,在一定程度上可以有效保护账户隐私,因此Zcash很快发展成为世界上应用范围最广、安全系数最高的加密货币之一.但由于ZK-snark技术的证明验证时间很长,导致Zcash的匿名交易十分迟缓,这也是Zcash的弊病所在.因此,近年来ECC公司的开发人员以及密码学家也研究出许多ZK-snark新的构建形式,来优化证明速度以及安全问题.
RZcash[36]是由XUE等于2019年提出的一种基于零知识范围证明的区块链双账户隐私保护方案.其主要应用于Ethereum平台账户型区块链中,为了实现零知识的账户型区块链隐私保护,它与Zcash相似地提出使用一种隐私账户,将链上的交易金额和交易细节进行隐藏,并使用与ZK-snark技术相同的基于椭圆曲线的Pedersen承诺方案和范围证明对交易进行验证.
如图4所示,RZcash为账户生成的承诺分为交易承诺和余额承诺两种.其中交易承诺用来证明每笔交易金额,余额承诺用来证明交易前后的账户余额.RZcash隐私账户会在每次交易时根据交易金额生成交易承诺,并根据收款方不同的账户类型,获取不同的信息给付款方,当收款方是隐私账户时,则提供余额承诺,若其为开放账户,则直接传递账户余额.付款方计算并更新收款方的余额承诺以及收款账户余额,随后将交易承诺与更新的余额承诺发送给验证器,验证器利用零知识证明对承诺算式进行验证,并利用范围证明验证交易金额的范围是否合法.因此,RZcash隐私账户余额承诺是伴随交易的进行而动态更新的,当交易完成后,收款人的账户余额承诺也会更新.
图4 RZcash交易执行过程
Monero是在2014年基于中本聪比特币理论创建的另一种开源加密货币,又称门罗币.Monero最大的特点是隐私保护和可扩展性.在最初发布时,Monero主要基于CryptoNote协议实现隐私保护,并在区块链模糊化方面有显著的算法优势.在改进的Monero隐私保护方案中,Monero部署了Bulletproof进一步强化了基于零知识证明的隐私保护性能,事务体积显著降低.Monero区块链的分布式数据库,其数据库结构也各不相同,目的是提高效率和拓宽灵活性.Monero也设置了最小的环签名大小,以便所有数据都按照授权分配进行交易,并且实施了RingCT以隐藏交易金额.
Monero以优秀的隐私保护体系而受到广泛认可,但在一定程度上也损失了易用性和高效性.
StarkWare项目是一个使用ZK-stark技术实现区块链账户隐私保护的解决方案,其项目提供零知识证明和量子安全加密证明保障用户个人信息不外泄.StarkWare采用的ZK-stark技术利用零知识协议保护链上信息的隐私,并支持将大数据压缩成小样本减少计算量.而在实际应用上这种方案也比量子计算更高效、透明和安全.
StarkWare开发设计了一个完整的证明堆栈以支持用于生成和验证一般计算的快速可靠的完整性证明.StarkWare由证明端提供的证据不依赖于任何第三方数据源,并且不会透露隐私数据的具体信息,只向智能合约提供证据,以此实现零知识证明执行流程.
zk-AuthFeed[37]作为一种较新颖的隐私保护方案在2019年由WAN等提出.它提出在零知识证明之前对数据进行身份认证,并对应提出将ZK-snark与数字签名相结合的zk-DASNARK技术.zkAuthFeed主要由4部分组成:数据认证器、用户、验证器、智能合约程序.其中数据认证器提供可信的数据源,为zk-DASNARK生成必要的安全参数、公钥、私钥以及电子签名.用户将申请存储数据的证据和电子签名发送给验证器,由验证器负责审核提供的证据是否真实,计算结果是否来自于真正的请求数据.
另外,为了同时保护用户输入数据和输出证据的隐私性,zkAuthFeed对ZK-snark证据的计算结果R以及哈希值h也进行了加密保护的改进,改进过程如图5所示.其中R表示为付款证明值,h表示为与付款证明R相匹配的哈希电路输出结果.
图5 zk-AuthFeed的计算结果改进
将计算结果R以直接提供给智能合约的方式改为对R加密并间接向智能合约提供支付承诺的方式.随后,zkAuthFeed将哈希值h分为h与h′,其中h作为签名证据,h'作为验证签名并由认证器进行有效验证,进而保护整体哈希值h的安全.
基于目前的零知识证明技术现状,团队针对区块链隐私安全研究的工作思路由三方面展开:异构平台的零知识证明技术加速、零知识证明的区块链隐私保护应用范围、链上隐私数据的多样化适配.
零知识证明技术虽然已经应用在如Zcash、Monero等电子货币平台中,但其证据产生和智能合约验证的速度是十分缓慢的,例如采用Groth16协议的ZK-snark生成证据需要1~2min,执行验证需要1~10ms.这对于数据量庞大的金融区块链以及商业联盟链来说,是一项不可忽略的时间开销.在未来,团队希望将零知识证明隐私保护方案与异构平台进行更好地结合,使用CPU+FPGA异构并行处理的模式,加速零知识证明执行过程,异构平台的零知识证明加速流程如图6所示.
图6 异构平台的零知识证明加速
本地节点CPU传输指令至FPGA芯片,FPGA芯片通过调用公共参考字符串,对请求和需要加密的明文信息进行零知识运算处理.智能合约验证FPGA芯片提供的密钥和零知识证据是否合法,并将数据存储至区块链中.节点将椭圆曲线算法、对数函数等复杂的密码学运算交由FPGA芯片处理,使用CPU执行任务调度与智能合约程序验证等工作,在硬件的角度上解决证据生成时间慢、匿名交易迟缓的问题.
目前大部分零知识证明隐私保护技术都应用于电子货币公有链中,例如Zcash货币,却很少应用于联盟链的隐私保护中.
联盟链可以应用于深度学习数据保护、航空航天数据溯源、智慧城市数据跟踪等诸多场景.在未来研究中,应设计出更多适用于联盟链的零知识证明隐私保护方案,对更多场景的隐私数据进行保护.
而在联盟链中,需要去中心化管理的数据除货币数据之外,也涉及许多字符串、浮点数信息.例如智慧农业区块链涉及到的农产品信息溯源以及农产品交易物流信息.这些数据都具有不可篡改性,需要保证数据的真实正确性,因此这些字符类型数据的安全隐私问题也亟待解决.隐私数据多样化适配的研究重点是将零知识证明技术以及同态加密等算法适用到字符串中,使保护的隐私数据类型多样化,使零知识证明的隐私保护方案可以应用至更广泛的实际场景中.
未来基于零知识证明的隐私保护方案将以区块链为平台,应用于诸多技术领域,例如卷积神经网络模型的隐私保护、航天数据溯源等.其中,卷积神经网络利用非交互式证明的良好隐私性能,对模型的卷积层和权值参数生成零知识证据,并将训练数据存储至区块链中,使训练数据不可篡改、模型信息不对外公开,使验证者在不掌握模型信息的情况下,信任训练结果以及神经网络学习性能.在航空航天方面,航天器飞行数据可上传至区块链平台,使重要的飞行数据作为追溯对象不可篡改;利用零知识证明技术对数据进行加密,在不影响数据可用性的同时,加强数据私密性.
本文以区块链隐私安全问题为驱动,阐述了多种区块链中的零知识证明技术以及其对应的方案应用.本文也分析总结了不同种类零知识证明技术之间的特点与异同.目前,应用至实际区块链项目中的隐私保护解决方案仍存在时间复杂度高、隐私性弱、算力开销高昂等亟待解决的问题.而许多创新型方案,如Shellproof、ZKRP等,虽然理论新颖,但算法和技术确少实践考量,目前尚未得到实际应用和部署.因此,基于零知识证明的隐私保护方案还需要在未来不断地深入研究和改进,并在不同场景中逐渐得到广泛应用.最后,本文致谢中央高校基本科研业务费的大力支持.