
一、当前存在的问题
区块链是一个分布式账本,具有公开、透明、不可篡改等优点。
但区块链应用到现实商业世界的时候,还有很多问题亟待解决,首当其冲就是隐私保护问题,如何解决公开、透明与隐私保护之间的矛盾,一直是区块链技术发展的重要方向,至今仍未完全解决。
比特币有较好的匿名性,是因为比特币的账户地址,是以非对称密钥的公钥经过一系列运算得到的。
比特币在网上传输的所有交易,都是公开的,也就是没有隐私。
普通民众,很难把公钥和真实世界的人的身份对应起来,从而给人造成一种比特币隐私保护能力较好的“假象”。
例如银行间转账,采用区块链系统来记录交易过程,虽然严格一致的账本,省去了繁杂的对账工作,但没有任何一家银行希望自己的资金往来,完全暴露在众目睽睽之下。
在使用区块链联盟链的场景下,虽然交易不会被公众知晓,仅仅是联盟内成员可见,但依然是不可接受的。
试想联盟内存在A、B、C三家银行,A和B银行的资金往来,A和B银行的客户账户信息,肯定不希望被C银行知晓。
除了在企业领域,在个人消费者领域,隐私保护的要求也越来越高。在2018年5月25日,史上最严格的欧盟隐私保护法案GDPR(General Data ProtectionRegulation,《通用数据保护条例》)付诸实施。
一旦有用户个人数据上链,区块链服务提供者(如果有区块链服务提供者而非公链的话),必须保证用户数据的隐私性。
在GDPR中,规定了公民对个人信息的若干隐私保护权利,包括:知情权、访问权、更正权、被遗忘权、限制处理权、拒绝权、数据可携带权、免受自动决策权等。
对于没有服务提供方,参与者完全对等的公链,例如比特币或以太坊,已经暴露一些隐私保护方面的难题:如果有人将其他人的隐私信息,以一条交易信息的附加信息的方式,记录到以太坊的公链上,则没有人可以将这条信息删除,这条信息永久存在于以太坊的公链上。
对链上数据加密,仅交易参与的双方可以解密,这可以解决大部分隐私保护的问题,但区块链系统必须直接面对这样一个问题:如何在链上数据加密的情况下,达成多方校验和共识,从而完成一笔交易。
二、常用解决方法
1.同态加密技术
密码学中的同态加密技术被引入到区块链领域,用以保障区块链在金融交易场景的隐私性。
同态加密(Homomorphic Encryption)是一种特殊的加密方法,对密文直接进行处理,与对明文进行处理后再对处理结果加密,得到的结果相同。
从抽象代数的角度讲,保持了同态性。
一般包括四种类型:加法同态、乘法同态、减法同态和除法同态。
以加法同态为例,它的基本思想是:如果有一个加密函数f,满足f(A)+f(B)=f(A+B),我们将这种加密函数叫作加法同态。
在做金融转账交易时,在区块链智能合约中看到的是同态加密后的密文数据,由密文数据直接运算,得到转账后的金额。
整个运算过程中的数据,包括区块链账本记录的数据,都是由同态公钥加密后的数据,只有持有对应私钥的客户端节点,才能够解密个人相关的数据,查看到明文信息,其他节点无法获取明文内容,从而保证了整个金融交易的隐私性。
目前可以达到商用水平的同态加密技术,只有加法同态技术。
在世界上一些顶尖科技公司,也在发展全同态加密方案,即一个加密函数,同时满足加法同态和乘法同态。
但因为乘法同态加密的性能还较差,目前还没有公开可见的支持全同态加密的商用产品。
2.零知识证明技术
零知识证明(Zero Knowledge Proof),是由S. Goldwasser、S. Micali及C.Rackoff在20世纪80年代初提出的。
它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。
零知识证明是代数数论、抽象代数等数学理论的综合应用,如果不是数学科班出身,很难真正理解零知识证明的内部原理。
在区块链领域中,交易的隐私保护和交易的多方校验、共识之间的矛盾,正是零知识证明技术要解决的问题。
| 举一个实际的场景:利用区块链系统,多家银行组成联盟链。联盟中某银行的A账户给另外一家银行的B账户转账100元,我们不希望区块链系统各节点看到A给B的具体转账金额,同时,又需要确定A给B的转账是有效的。 |
何为有效呢?
①A的当前余额足以支撑这笔转账,即Ac﹥At(Ac:A当前余额,At:A转账金额);
②A转账后剩余的金额加上转账金额,等于原来的金额,即Ac2+At=Ac(Ac2:A转账后余额,At:A转账金额,Ac:A转账前余额);
③A减少的金额,等于B增加的金额,即At=Bt(At:A转出的金额,Bt:B接收到的金额)。
为了保证交易金额的隐私性,A账户给B账户的转账金额,在整个区块链系统中都是采用上一节提到的同态加密技术进行加密的,对于执行智能合约的节点,当它执行A给B的转账逻辑时,面对的是一堆加密过后的金额,那么如何判断以上三个条件是成立的?
在以上的场景中,可以利用零知识证明相关的技术来完成加密后交易有效性验证,结合同态加密隐私保护能力,完成完整的交易隐私保护和校验流程。
目前在区块链领域,应用的零知识证明技术有几种,包括zk-SNARKs、ZKBoo、zk-STARKs等,其中以zk-SNARKs应用最为广泛。
zk-SNARKs是在一种非常适合于区块链的零知识证明技术,它的全称是zero-knowledge Succinct Non-Interactive Arguments of Knowledge(零知识,简洁,非交互的知识论证)。
它可以实现验证节点在不知道具体交易内容的情况下,验证交易的有效性。听起来是非常不可能的事情,但确实是可实现的。
Zcash是zk-SNARKs技术的第一个成功的商业应用,它成功实现加密数字货币交易过程中交易金额和交易方身份的完全隐藏。
通过Zcash应用我们可以看出,zk-SNARKs零知识证明技术具有证明材料生成慢(几十秒)、验证快(毫秒级)、证明材料体积小(288字节)的特点。
与比特币区块链系统相比,单笔交易的时延较大,但最耗时的证明材料生成过程,是在交易发起方节点完成,而链上交易的验证过程是快速的,因此系统整体吞吐率与非零知识证明加密数字货币相比并没有显著差异。
zk-SNARKs零知识证明技术目前也在飞速发展中。
在Zcash 2017年9月对zk-SNARKs技术的更新中,已经大幅度地提升零知识证明的计算性能,证明的生成时间由37秒缩短到7秒,证明材料生成过程中的内存消耗,也由大于3GB降低到40MB。
相信在不久的将来,zk-SNARKs技术在移动设备的应用,将变得更加可行。
zk-SNARKs技术有一个让人诟病的地方——它的算法依赖于初始的公共参数作为信任设置(trusted setup)。
这个公共参数是随机数,由它来生成zk-SNARKs的证明公钥(proving key)和验证公钥(verify key),这个原始随机数使用完之后需要立刻销毁,一旦泄露,拥有原始随机数的人可以随意伪造证明,从而使得零知识证明的正确性荡然无存。
目前,学术界采用多方安全计算的方案,来降低原始随机数泄露的概率。
利用安全多方计算构造原始随机数的过程可简单描述为:每一方都生成原始随机数的一部分,多方拼凑成随机数整体,而且每一方无法知晓其他方的随机数部分,在原始随机数利用完之后,只要有任意一方销毁了自己持有的随机数部分,将无法再还原这个随机数,从而保证了整个零知识证明系统的安全。
诞生于以色列理工学院的zk-STARKs技术是最近兴起的区块链零知识证明技术。公开资料显示,该技术与zk-SNARKs技术相比,优点是不需要信任设置(trustedsetup),并具有后量子安全性(在量子计算这种算力更加强劲的破解手段出现后,所应用的加密手段依然具备安全性),缺点是零知识证明材料的长度由zk-SNARKs的288字节上升至几百KB。
另外,截至目前,还未有公开项目使用zk-STARKs技术。
3.其他隐私保护技术
除此之外,密码学中的群签名、环签名等技术也被引入到区块链系统中,用以提升系统的隐私保护能力。
群签名是验证者利用群公钥来验证签名信息的正确性,但是不能确定群中哪个成员进行了签名。
虽然一定程度上保护了隐私性,但群签名中存在管理员的角色,群管理员可以最终揭示签名者。
而环签名则在群签名的基础上,去掉了群管理员的角色。在区块链交易中,环签名通过模糊身份认证,只能证明签名者属于某一个组,却不知道是属于具体哪个人,从而使得区块链交易具有高度的匿名性。
可信执行环境(Trusted Execution Environment, TEE)也被用到区块链的隐私保护领域中。
TEE在系统中(包括手机终端、服务器),是一个独立的环境,受硬件机制保护,与现有系统隔离,提供从文件到内存的全方位的安全能力。
它可以为区块链中密钥保护提供硬件级别的加密能力。
同时,TEE作为一个安全、可靠、中立的环境,可以用来执行区块链系统中,隐私性要求比较高的业务逻辑,比如前文提到的密文状态的交易有效性验证,在TEE内部,可以将密文解密成明文再进行运算,而不用担心明文数据被窃取,在数据离开TEE环境时,先转换成密文,再返回通用操作系统。
这里需要提一点,区块链系统仍会继承现有的中心化系统的隐私保护问题,因此,常规系统的隐私保护安全防护,在区块链系统里同样重要。
同时,区块链系统应该给用户足够的安全及隐私保护提示,很多时候不是系统不够安全,而是用户把钥匙交给了黑客。
因此,如何防范通过社交工程学相关的手段来破坏区块链系统的安全性及隐私性,同样是区块链设计者需要考虑的问题。
再回到本章开始提到的问题,对链上数据加密,并通过数学手段验证交易的有效性,确实能够解决区块链大部分的隐私保护难题,尤其是企业数据上链的情况。
但对于个人数据的隐私保护,尤其对于GDPR中提到的公民对个人数据的更正权、被遗忘权,与区块链的不可篡改性依然是相冲突的。
也有可能个人隐私数据上链是个伪命题——个人的隐私数据,并不适合在区块链上传播。
但也有可能在不远的将来,真的出现“可篡改”的区块链,当然,区块链的篡改过程,也是在多方见证和共识下完成的。


