交易过程的完全匿名性是ZCash在数字货币中的最大亮点,这使得ZCash自提出以来就备受关注。ZCash匿名交易的实现依赖于一种叫做“零知识证明”的密码方法。本文将通过类比和常用语言解释ZCash的交易原理以及零知识证明如何应用于ZCash的交易过程。
我们的嘉宾是数字货币中最著名的CP:爱丽丝和鲍勃。
首先,从比特币开始
直接解释ZCash的交易过程可能比较抽象。为了帮助我们理解,我们不妨分析一下比特币作为铺垫。
我们举个例子来说明比特币的转账原理。
场景:爱丽丝转账1个比特币给鲍勃。
在转账之前,爱丽丝要提前准备好一个比特币。为了便于理解,我们把爱丽丝要转出的1比特币看作是一张面额为1比特币的“支票”,如图1所示。
图1
从这次“检查”中我们可以得到以下信息:
1.爱丽丝确实拥有1 BTC。
2.爱丽丝用私钥签了这张支票,证明爱丽丝有权转让这笔资产。
当支票的面额和转让权已经清楚时,Alice可以将钱转让给Bob。转移的原理很简单,就
就是给鲍勃创建一张新的“支票”,证明鲍勃拥有1个比特币。同时撕掉爱丽丝手中的“支票”,通过这种“旧”与“新”的方式实现资产所有权的转移。图二。
图2
以上逻辑其实不难理解,因为这和日常生活中的银行转账是一样的。通过银行转账,我们不必在交易中转移实物货币,而是通过银行记账实现“资产所有权”的转移。本质上,比特币交易的过程是一个“资产所有权”转移的过程,转移比特币的一方“新建”了一个资产所有权,而转让方需要“销毁”原有的资产所有权,被销毁的“支票”将不再出现。
二、ZCash的转让原则
和比特币一样,ZCash的交易过程也是“资产所有权”的转移。继续使用上一篇文章中“检查”的类比。
场景:爱丽丝将一个ZEC转给鲍勃。
在转账之前,Alice创建了一张面额为1 ZEC的“支票”,如图3所示。
请点击此处输入图片说明。
图3
可以从该凭证中获得的信息:
1.爱丽丝确实拥有1 ZEC。
2.爱丽丝用私钥签了这张支票,证明爱丽丝有权转让这笔资产。
3.这种“凭证”有一个额外的随机数字符串,用符号r表示。这一串随机数就像一个“校验码”一样唯一地标识支票。爱丽丝的校验码是r1。
有了以上清楚的信息,爱丽丝就可以让ZEC转学了。
第一步:像比特币一样,你首先要为鲍勃创建一张新的“支票”。鲍勃的校验码(r2)和爱丽丝的分支
票代码(r1)是不同的,如图4所示。
图4
第二步:当新的“资产所有权”产生后,一定要想办法破坏原有的“资产所有权”。也就是必须想办法让爱丽丝的“支票”失效。与比特币简单粗暴的“直接撕毁”不同,ZCash采用“备注作废”的手段来达到同样的效果。怎么理解呢?即,在不对原始“支票”进行任何处理的情况下,创建一个新的作废单据列表,并输入要作废的“发票代码”。如图5所示,
图5
从上图可以看出,爱丽丝持有的原始支票仍然存在,并没有消失,但是这张支票已经被记录在了“作废清单”中。在确定资产归属时,需要同时读取两份清单的信息。确定Bob资产所有权的判断方法是:Bob持有的“支票”代码在作废清单中不存在。
但是为什么要这样设计呢?其实这个设计的目的就是在交易过程中使用“零知识证明”。
三、零知识证明
什么是零知识证明?
零知识证明(称为“zk-SNARK”)是实现Zcash匿名的核心技术。“零知识卡
“明”的定义是证明者能够说服验证者一个断言是正确的,而不需要向验证者提供任何有用的信息。举个简单的例子:
为了向B证明A拥有一个房间的钥匙,假设房间只能用钥匙开锁,而其他任何一方
法律打不开。这时,有两种方法:
(1) A向B出示钥匙,B用这把钥匙打开房间,从而证明A有正确的房间钥匙。
(2) B确定房间里有物体。甲用自己的钥匙打开房间的门,然后拿出物件给乙看,从而证明自己确实拥有房间的钥匙。
后一种方法属于零知识证明。好处是在整个证明过程中,B始终看不到密钥,避免了密钥的泄露。
那么零知识证明如何应用于ZCash交易流程呢?
我们来回顾一下比特币和ZCash的例子。
爱丽丝想转让一个单位的数字货币(BTC/ZEC)给鲍勃,也就是说,爱丽丝想转让一个单位的资产所有权给鲍勃。这时,有两种方法:
(1)比特币的实践:爱丽丝拥有1BTC的支票。在给Bob转账的时候,她要先给Bob新建一张1BTC的支票,同时当着Bob的面把她原来的支票撕掉。
(ZCash的做法:Alice拥有1ZEC的支票。在给鲍勃转账时,她应该先给鲍勃新建一张1ZEC的支票,然后在一张约定的无效清单中记录爱丽丝的发票的代码,以证明爱丽丝的支票已经作废。
ZCash的方法属于零知识证明。在整个交易过程中,鲍勃没有看到爱丽丝的支票,但他仍然实现了资产所有权的转移。在ZCash的整个交易系统中,还有其他见证爱丽丝和鲍勃交易的人,也就是负责记录交易信息的矿工。同样,矿工也不必看到爱丽丝的支票,只要他们能确定名为r1的支票已经作废。
四。ZCash完整的匿名交易系统
有了以上铺垫,就可以进一步解释ZCash的匿名交易流程了。
这是同一个例子:爱丽丝把一个ZEC转给了鲍勃。本例中涉及的角色是转移方Alice和Bob,以及簿记员(矿工)。
首先,Alice和Bob都有一张支票,如图6所示。
图6
这两张“支票”都是有效的。Alice的支票从一开始就存在于整个ZCash网络中,Bob的支票生成后会向全网广播。
为了隐藏交易者的信息,两张支票要加密。整个网络中存在的“支票”实际上是这样的,如图7所示。
所有信息都是加密的,可以用所有者的私钥解密。
图7
同时,因为只能有一个资产,所以所有矿工仍然有一个无效列表。爱丽丝想同时广播她自己的“发票代码”,并将其输入到无效列表中。发票代码也是加密的。所以矿工能看到的信息其实是这样的。其中爱丽丝的支票原本就存在,爱丽丝的校验码r1和鲍勃的支票是爱丽丝在交易时广播的。如图8所示。
图8
矿工能得到的信息相当有限,但这并不影响他们对交易有效性的判断。
判断的逻辑相当简单:矿工得到爱丽丝给的校验码r1,在无效列表中搜索。如果r1已经存在于无效列表中,证明r1对应的支票早就无效了;如果作废清单中不存在r1,则证明r1对应的支票仍然有效。此时,矿工将r1输入到作废清单中,并将新生成的支票输入到支票清单中。因此,记账过程就是将原支票登记作废,将已有支票存入的过程。
在这个过程中,我们不难发现,矿工每笔交易只能收到一个发票码和一个新发票,而且两者都是加密的。所以矿工不知道这两方是谁,也不知道转了多少钱。
动词(verb的缩写)数据库资料库
其实你可以发现,按照上面的思路,你可以为ZCash的匿名交易写一个数据库。在下一篇文章中,另一篇文章将专门讨论数据库的构建。
本文是《雷英》特邀作者卡洛斯的原创文章。雷英(微信官方账号:RadarWinChina)是上海区块链的标杆企业,为整个区块链产业链提供技术和咨询服务。