零币协议
零币是一种数字货币,它旨在创建一种真正匿名的交易方法。Zcash是一个去中心化的开源密码学货币项目,通过使用先进的密码学技术提供交易隐私和可选择的透明性。Zcash支付被发布在一个公有区块链上,但是交易发送者、接收者和交易数额是保密的。1
零知识证明
首先简要介绍什么是零知识证明,它指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的,在零钞的设计中,就采用了一种叫作zkSNARK ( zeroknowledge succinct noninteractive arguments ofknowledge)的非交互式的零知识证明。
zkSNARK是基于现代密码学的证明方式,需要一个NP问题作为基本难题,在P≠NP的假定下,暴力猜出一个输入量很大的NP完全问题(即NPC问题,下文简称NP难题)的解被视为计算上不可行,而要验证一个解是对应NP难题的解则较快。
zkSNARK在需要证明者向验证者证明自己知道某个知识时,构造与需证明内容对应的NP难题,该NP难题仅与此时的问题相关,与证明者掌握的具体知识无关,如需要向验证者证明,证明者知道一个k,满足高次方程f(k)=0,则高次方程f(x)=0的解x=k就是证明者知道的知识,而问题是f(x)=0,验证者和证明者基于该方程,可以得到同一个NP难题。
当证明者知道某个知识,例如前文所述的k,便可以方便地构造对应NP难题的解,而由转化的不可逆性(如2+2=4,而4无法推知是2十2得到的,即4无法转化为2+2),知道NP难题的解无法推出对应的知识,因此可以在不透露具体知识(k的值)的情况下,通过给出相应NP难题的解,证明自己的确知道所需的知识。由于暴力破解该问题视为不可行,则只有拥有所需知识的人能提供相应证明。
Zcash采用的NP难题是二次算数问题(quadratic arithmetic problem, QAP),对多项式等式的验证拥有O(1)代价的验证方式,即只取1个点对函数值进行验证(zkSNARK中succinct由此而来),由于任何高次方程的根数目不高于deg(f(x)),验证时恰好取到零点的概率接近于0,因此若取到零点则视为得到了1个多项式等式,这使得验证更为高效简洁。1
零钞运行原理介绍
如图中零钞系统的概览,其底层实现依然基于类似于比特币的结构,而零钞系统利用zkSNARK构造了去中心化的混币池,通过铸币(mint)与浇铸(pour)操作可以完成匿名性,所谓铸币过程,就是用户向使用一定数额的零钞兑换等值的承诺(commitment ),向1个列表中写人承诺的过程,其中承诺必须由1个一次性的序列号以及用户私钥才能计算得到,并且是不可逆的。
与比特币类似,零钞发行数量的增加基于挖矿所得,而矿工得到的零钞是可查询有记录的,其使用也需要私钥签名。因此若是直接使用零钞,其与比特币类似,可以直接完成各个地址之间的转账,但这时是不匿名的。而经过铸币操作得到的承诺与个人地址表面上无关(但是其生成依赖于公钥和1个一次性随机数),当用户想要花这个币时(即转账),与比特币需要提供签名不同,用户需要做2件事:1)给出序列号;2)利用zkSNARK证明自己知道生成存在于承诺列表中的某个承诺的用户私钥,这样,用户就可以在完全不暴露身份的情况下,花出这个币。
以上的简单情形有3个问题:1)币值总限制在已有承诺列表的数额中,实际使用不方便;2)发送方可以通过序列号来判断接收方正在花钱;3)接收方必须马上花掉得到的币,否则可能被发送方提取。为了解决这3个问题,零钞中引入了一种浇铸(pour)的操作来花销钱币。简单地讲,浇铸操作就是通过一系列零知识证明,将1个币铸造成多个等值的币。每个新币都有自己的密钥、数额、序列号等等,且部分信息需要用接收者私钥算出。除了发送者都无从得知接收者是谁,而发送者无法知道新币的序列号,因此无法使用这个币,也无法知道接收者在何时花掉了这个新币,从而解决了以上3个问题。
除了发送方和接收方,矿工作为零钞交易系统中确认交易的成分,他们会在不知道交易发起者是谁,交易接收者是谁的情况下完成交易确认。矿工只需要验证交易发起者的零知识证明,确认某个交易发起人可以使用承诺列表里的某一个承诺,并把承诺对应的序列号放人列表。在这个过程中,矿工不知道用户具体用了承诺列表中的哪个承诺,而仅仅是知道某个承诺被使用了。而由序列号的唯一性保证了同一个承诺不能被使用2次(即防止了“双花”)。
用户还可以用赎回操作将混币池中的零钞提取出来,即所谓赎回操作。赎回操作则是把一个承诺重新换为零钞,与之前的过程类似,矿工也并不知道哪个承诺被赎回换为零钞。因此甚至可以说不用向任何人转账,仅仅是把一个零钞放到混币池中再赎回,它的来源都不可追踪。
与此同时,零钞还采用了一系列的优化措施来提高整个运行系统的性能。
零钞在目前所有的密码学货币中是匿名性最好的,因此受到过市场狂热的追捧,在2016年10月底发行前后,单币价格估值曾高达几千个比特币。
目前币值稳定后,零钞的市值大约为5.7亿美元;单币价格为231美元,排名第6。1
本词条内容贡献者为:
肖志勇 - 副教授 - 江南大学