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

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)内容支持计划赞助

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now