Zcash核心:零知识证明(二)

in #cn7 years ago

Crazy Social Engineer. Cypherpunk Follower in China. 丧心病狂的社会攻城狮,加密朋克追随者。Weibo.com@Warrior比特币玩家,twitter『Bitcoin Warrior!』。

上一篇中我们提到了交互式零知识证明,这一次,我们真正来讲讲Zcash所使用的非交互式零知识证明。

非交互式零知识证明

顾名思义,非交互式即证明过程不需要反复在双方间传递信息,这个如何实现?我们以Zcash为例:

Alice要向Bob转一个ZEC,此时Alice拥有一张1ZEC的支票,要转账给Bob时,先给Bob新建一张1ZEC的支票,这时Alice和Bob都有了一张支票。

这两张“支票”都是有效的。Alice的支票开始就存在于整个Zcash网络,Bob的支票在生成后也会被广播到全网。

为了隐藏交易者信息,要对两张支票进行加密处理,在全网中存在的“支票”其实是这样子的。
信息都是被加密的,可以通过拥有者的查看密钥解密

同时,因为资产只能有一份,所有矿工手里还有一个作废列表。Alice要同时广播自己的“发票代号”,录入作废列表中。发票代号也是加密的。所以矿工们能看到的信息其实是这样的。其中Alice的支票是原先存在的,Alice的支票代号r1和Bob的支票是在交易过程中被Alice广播的。

矿工们能获取的信息相当有限,但是这并不影响对矿工对交易有效性的判断。

判断的逻辑相当简单:矿工拿到Alice给的支票代号r1,去作废列表中检索,假如作废列表中已经存在r1,则证明r1所对应的的支票早已失效;若作废列表中并不存在r1,则证明r1对应的支票仍旧有效,此时矿工把r1录入作废列表中,把新生成的支票录入支票列表中。所以记账的过程就是对原有支票登记失效,并存入现有支票的过程。

在这个过程中,我们不难发现,每笔交易矿工能接收到的东西只有一个发票代号,和一张新的发票,而且这两样东西都是被加密的。所以矿工并不知道转账双方是谁,也不知道转账金额是多少。Bob也不知道是谁转的账,但只要Alice把解锁支票的查看私钥通过私信给Bob,Bob就可以知道这笔交易的所有信息。

这种方法就属于非交互式零知识证明。整个交易过程中,Bob并没有见过Alice的支票,但是还是实现了资产所有权的转移。同时,Alice也可以通过发送查看密钥的方式向Bob证明自己身份。

本文由币乎社区(bihu.com)内容支持计划赞助

Sort:  

Congratulations @warriorwu! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You published 4 posts in one day

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Congratulations @warriorwu! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of posts published

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.26
TRX 0.20
JST 0.038
BTC 96240.27
ETH 3591.45
USDT 1.00
SBD 3.91