本文由币乎(bihu.com)优质内容计划支持
交易过程完全匿名是数字货币ZCash最大的亮点,正是这一点使得ZCash自提出以来便备受关注。ZCash匿名交易的实现依赖于一种叫做“零知识证明”的密码学手段。本文将通过打比方的手法,用通俗的语言,解释清楚ZCash的交易原理,以及零知识证明是如何运用到ZCash交易过程中的。
一、从比特币说起
为了有助于理解,我们不妨先分析比特币,作为铺垫。
我们先来打个比方说明比特币的转账原理。
这和日常生活中的银行转账是一个道理。通过银行转账,我们在交易时不必对实物货币进行转移,而是以银行记账的方式,实现“资产所有权”的转移。比特币交易的过程实质上就是一个“资产所有权”的转移过程,转入比特币的那一方“新建”一份资产所有权,而转出方需要“销毁”原先的资产所有权,被销毁的那张“支票”永远不会再出现。
二、ZCash的转账原理
与比特币一样,ZCash的交易过程也是 “资产所有权”的转移。
演示场景:Alice转1个ZEC给Bob。
转账前,Alice创建一张面额为1个ZEC的“支票”,
1.Alice确实拥有1个ZEC。
2.Alice使用私钥对这张支票签名,证明Alice拥有对这笔资产转账的权力。
3.这张“凭证”上多了一串随机数,用符号 r 表示。这串随机数的作用好比 “支票代号”,用来唯一识别该支票。A的“支票代号”为r1。
明确以上信息,Alice就可以进行ZEC转账了。
第一步:比特币一样,要先为B新建一张“支票”。Bob的支票代号(r2)与Alice的支
票代号(r1)不相同,
第二步:新的“资产所有权”生成的同时,必须要想办法销毁原来的“资产所有权”。即必须想办法让A手中的“支票”失效。与比特币简单粗暴的“直接撕毁”不同,ZCash采用“备注作废”的手段,达到同样的效果。怎么理解呢?就是在不对原先“支票”作任何处理的前提下,新建一个作废文件列表,录入需要作废的“发票代号”。
原先的A持有的支票仍旧存在,并没有消失,只是这张支票已经被记入“作废列表”。在确定资产所有权时要同时读取两个列表的信息,能确定Bob拥有资产所有权的判断方法是:作废列表中不存在Bob所持“支票”的代号。
可是为什么要这样设计呢?其实这样设计的目的是为了在交易过程中运用 “零知识证明”。
三、零知识证明
什么是零知识证明?
零知识证明 (被称为“zk-SNARK”)是实现Zcash的匿名特性的核心技术。“零知识证明”的定义是:证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。举个简单的例子:
A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方
法都打不开。这时有2个方法:
(一)A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。
(二)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙 。
后面这个方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。
那么零知识证明怎么运用到ZCash交易过程中呢?我们再回顾比特币和ZCash的例子。
A要向B转一个单位的数字货币(BTC/ZEC),即A要向B转移一个单位的资产所有权。这时有以下两个方法:
(一)比特币中的做法:A拥有一张1BTC的支票,要转账给B时,先给B新建一张1BTC的支票,同时当着B的面将自己原先的支票撕毁。
(二)ZCash中的做法:A拥有一张1ZEC的支票,要转账给Bb时,先给B新建一张1ZEC的支票,然后在一张约定有效的作废列表中,记录下A的发票的代号,证明A的支票已经失效。
ZCash的方法属于零知识证明。整个交易过程中,B并没有见过A的支票,但是还是实现了资产所有权的转移。在ZCash的整个交易系统中,A和B的交易还有其他见证者,即负责记录交易信息的矿工。同样道理,矿工也不必看到Al的支票,只要能确定代号为r1的支票已经作废了就行。