在国家重视和政策扶持下,区块链技术的迅猛发展,区块链作为一个共享数据库,存储于其中的数据或信息拥有“不可篡改”“全程留痕”“可追溯”“公开透明”“去中心化”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,拥有广阔的运用前景。零知识证明由于能在区块链应用中增强隐私性和安全性的潜力,也得到了广泛关注。
本文首先简要地介绍了区块链以及零知识证明的相关理论知识,接着对于当前区块链中零知识证明的应用进行阐述,包括zk-SNARK算法和ZeroCash区块链实现。最后,对于零知识证明在区块链中的应用进行总结和未来展望。
从本质上讲,区块链(Blockchain)是一种按时间顺序将数据块连接起来的数据结构,并以密码学的方式保证其不可篡改。在数据方面看来,区块链是一种近乎不可被篡改的分布式数据,而且这里的分布式特点不仅仅体现在数据的分布式存储,而且表现为数据的分布式记录。在技术方面看来,区块链技术是多种技术共同整合的结果,并不是一种新型的单一技术。这些技术通过一种新的形式结构整合在一起,构成了一种新的数据结构用于数据的记录和存储。
区块链具有以下特性:
零知识证明(Zero-Knowledge Proof)是由S.Goldwasser、S.Micali以及C.Rackoff在20世纪80年代初首次提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。最终,他们能够证明通过证明者到核实者之间的一些交互,他们可以从根本上减少两者之间需要传递的知识数量。他们主要关注的是信息泄漏,也就是验证者在验证一个声明是否有效的过程中会了解到多少信息。
例如对于现在登录网站而言,在Web服务器上存储了客户的密码的哈希值,为了验证客户实际上知道密码,目前大部分网站采用的方式是服务器对客户输入的密码进行哈希计算,并与已存结果对比,但是这种方式的弊病在于服务器在计算时就可以知道客户的原始密码,一旦服务器被攻击,用户的密码也就泄露了。如果能够实现零知识证明,那么就可以在不知道客户密码的前提下,进行客户登录的验证,即使服务器被攻击,由于并未存储客户明文密码,用户的账户还是安全的。
零知识证明可以分为 交互式 和 非交互式 两种。对于交互式而言,零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问。证明者通过回答一系列问题,让验证者相信证明者的确知道这些“知识”。然而,这种简单的方法并不能使人相信证明者和验证者都是真实的,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。
zk-SNARK 是“zero knowledge Succinct Non-interactive Argument of Knowledge”的缩写,是 非交互式零知识证明 中的一种,一个将实际的零知识证明类问题转为计算机程序问题的理论。作为目前密码学及其应用领域中最令人激动的成果之一,它使得人们可以对形如“给定一个公开的谓词和一个公开输入,我知道某个秘密输入,使得为真”的语句进行证明和验证。其实现过程大致可以分为以下几步:
t(x)h(x)= w(x)v(x)
。(t(s)h(s)k)=(w(s)v(s)k)
时,就无法知道具体的t(s)、h(s)、w(s)、v(s)
,因此可以使得信息得到保护。zk-SNARKs协议由三个算法组成:Setup、Prover、Verify 。zk-SNARKs的典型流程如图所示。
目前区块链中一些著名公链,例如BTC和ETH的交易,在交易成功后,我们去区块链浏览器或调用对应的RPC接口查看对应的交易记录,可以获得交易发送者地址、接收者地址和交易金额等数据。这些地址仅仅只是一串字母和数字,从而起到一定的匿名效果,但是这仅仅只是一种伪匿名,通过一系列的相关交易和对应的显示社会关系还是可能会暴露用户的身份,从而ZeroCash区块链便应运而生了。
ZeroCash是基于零知识证明来进行隐私保护的区块链,采用了zk-SNARKs的非交互式的零知识证明来证明某些特定的资产归自己所有,目的是 彻底解决交易被追踪从而暴露用户隐私 的问题。ZCash拥有一个匿名交易系统,它支持多种交易类型,其中一种就是能够 隐藏交易双方地址和交易数值的交易 。这是完全的隐藏,而不是说数据还存放在ZCash的节点数据库中,而不向外显示出的隐藏。而是连节点都不知道交易的内容。Zcash的强大隐私保证源于Zcash中的屏蔽事务可以在区块链上完全加密,但仍然可以通过使用zk-SNARK证明在网络共识规则下验证为有效。
在ZCASH中,摒弃了之前的UTXO方式,而是使用了一种基于UTXO,被称为NOTE(支票)的新方式代替。NOTE代表了当前账户对资产的支配权,与UTXO不同,账户余额的存储方式不再是“未消费的交易输出”,而是“未被作废的支票(NOTE)”;一个NOTE是由所有者公钥PK、所拥有金额V、和唯一区分支票的序列号r组成,表示为 NOTE=(PK ,v ,r) 。
ZCash交易分为两类:透明地址交易和隐藏地址交易。两个透明地址之间的交易则与比特币交易没有区别,透明地址交易的输入、输出直接是公开可见的NOTE信息;对于隐藏地址交易,隐蔽地址之间的交易也会出现在公有区块链上,所以大家都知道有一笔隐蔽交易发生了,手续费也会支付给矿工,但交易的地址、资金的数额以及备注字段都被加密过,是不可见的。
在数字经济全球化背景下,区块链的出现首次从技术上解决了基于信任的中心化模型带来的安全问题,并使得通过互联网进行价值转移成为可能,然而区块链的公开透明特性也给人们的隐私保护带来了巨大的挑战,因此如何实现隐私保护成为了阻碍区块链进一步发展的难题。将零知识证明应用于区块链已然为解决隐私安全问题做出了重大贡献。本文重点围绕零知识证明和区块链技术展开,阐述了零知识证明与区块链的相关理论知识,并且对零知识证明在区块链中的应用做了说明。未来区块链的隐私保护仍然任重而道远,如何实现快速高效、可信的零知识证明算法以及如何实现能够抵抗量子计算的零知识证明算法,都是需要进一步解决的问题。而且区块链+零知识证明的组合让用户重新掌握他们的个人数据成为了可能,可以在无需透露个人信息的情况下达成金融协议、创建在线账户或验证身份等。
[1] Sasson E B , Chiesa A , Garman C , et al. Zerocash: Decentralized Anonymous Payments from Bitcoin[C]// 2014 IEEE Symposium on Security and Privacy (SP). IEEE, 2014.
[2] Bensasson E , Chiesa A , Tromer E , et al. Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture[J]. Sasson, 2014.
[3] 李康, 孙毅, 张珺,等. 零知识证明应用到区块链中的技术挑战[J]. 大数据, 2018, 004(001): P.57-65.
[4] Alshaikhli I F T , Makarin R H , Mohd Bakri S K , et al. Zero-knowledge-proof[J]. Cryptography Past Present & Future, 2011.
[5] Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system. Consulted, 1:2012, 2008.