区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

2.3.5 零知识证明和Zcash

“零知识证明”(参见本书第3章)简单来说就是:证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

举个简单的例子,A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有两个方法可以解决:

(1)A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。

(2)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。

第二种方法就属于零知识证明的范畴。该方法的好处在于,在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。

零知识证明过程有两个参与方:一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄露这个秘密给验证者。双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,即证明者有没有掌握这个秘密。零知识证明是一种更加安全的信息验证或者身份验证机制。安全性和隐私性就是零知识证明的价值所在。

零知识证明的三个基本特性

(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。

(2)合理性。没有人能够假冒证明方,使这个证明成功。

(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。

零知识证明的典范——Zcash

在比特币网络中,用户需要将交易明文广播给所有矿工,由他们来校验交易的合法性。但是有些情况下,基于隐私的考虑,交易的具体内容希望不对外公开。解决这个问题的关键思路是:校验一个事件是否正确,是否需要对验证者重现整个事件呢?

我们拿比特币举个例子,一笔转账交易是否具备合法性,其实只要证明三件事:

(1)钱是否属于发送交易的一方。

(2)接收者收到的总额等于发送者发送的金额之和(可能转账有多个来源)。

(3)发送者的所有参与转账账户上多个对应的转账金额(金额总和等于接受者收到的总额)确实被正确销毁 数字货币转账允许一笔转账交易可以由不同的数字货币从多个账户上共同完成。

整个证明过程中,矿工其实并不关心具体的交易金额、发送者具体地址、接受者具体地址,矿工只关心系统账本上的钱是不是绝对守恒的。

Zcash项目就是利用了零知识证明实现了用户的交易内容隐私化。由于零知识证明在近两年的迅速发展,掌握和理解它的概念变得愈发重要,所以本书第3章将会对其进行更全面的分析讲解,这里只要有个初步认识就可以。