区块链网站|NFTS Zcash(ZEC) 程序员看不懂的ZCash零知识证明

程序员看不懂的ZCash零知识证明

广告位

不是程序员也能看懂的ZCash零知识证明

交易过程的完全匿名性是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)是上海区块链的标杆企业,为整个区块链产业链提供技术和咨询服务。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/jzb/zec/4053.html
上一篇
下一篇

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部