这个标题相当拗口,就像零知识证明的定义一样让人充满疑惑,简单来说,零知识证明是指,在不揭晓我所知道或拥有的某样东西的前提下,向别人证明我有确实知道或拥有这样东西。
为了更直观地解释零知识证明的机制,在此我们继续请出Alice和Bob来进行说明(密码学的李华)。
在一个只有一个入口的山洞(阿里巴巴的山洞),Bob和Alice(以下使用A和B代指)都没有进去,洞里面有两条路(路径C和路径D),这两条路由一扇门连接,要说出密码才能通过这扇门。B希望向A证明她知道开门的密码,但不想将密码透露给A。
因此,A需要站在山洞外,B从其中一条路走进山洞,而A并不知道她选了哪条路;接着,A随机选择其中一条路,让B回到山洞入口。如果B最初选择从路径C走到门口,但A让她从路径D回来,唯一的方法就是穿过那扇门,而穿过门必须知道密码。
为了充分证明B真的知道门的密码,而不是运气好刚好选到了同一条路,这个过程可以反复重复好几次。在进行完这一步后,A就可以非常确信B知道门的密码,因为B确实穿过了门,与此同时B也不用向A透露密码是什么。
当然,上面的例子只是为了方便理解,事实上,零知识证明必须满足三个性质:
- 完备性:如果陈述为真,诚实的验证者将被诚实的证明者说服。
- 严密性:如果陈述为假,没有不诚实的证明者能够说服诚实的验证者。证明系统是诚实的,不允许作弊。
- 零知识性:如果陈述为真,没有验证者会获得除了这个陈述为真之外的任何信息。
又有人会问,这个东西有什么用呢?
事实上,和我之前发的那篇不经意传输的文章密码学|如何不炫富同时证明你更有钱一样,我们不希望有一个第三方(需要额外的信任)去参与到我们的交互中来,我们需要去中心化的方案,那么去中心化又有什么用呢?
对,比特币和区块链,它们需要去中心化的交易体系。
【以下例子取自知乎高赞回答】区块链主链过慢的交易速度和过高的gas fee曾经是很大的问题,所有交易都要发生在主链,造成链上堵塞,为了解决这些问题,以太坊发展出了Layer 2解决比特币链上拥堵、降低Gas费的需求,当前主流的Layer 2有两种方案:Optimism roll-up和ZK roll-up(ZK即零知识的缩写)。
Optimism roll-up是目前最为常用的方法,它默认对交易不执行任何计算,但为了防止欺诈,如果有人能够发现交易中的欺诈,可以进行证明并提出异议,如果异议被核实,欺诈者会受到惩罚,证明者会收获奖励。因为可能需要等待异议,Optimism roll-up中交易的等待时间会比较长。
ZK roll-up顾名思义,是使用到零知识证明的方案。ZK roll-up会打包数百个交易生成SNARK(简洁的非交互式知识论证)或 STARK(可扩展的透明知识论证)形式的有效性证明。ZK roll-up Layer 2的状态转移只需要提供有效性证明,不像Optimism roll-up需要交易的全部信息,需要的空间更小;同时Layer 2的数据转移到主链时不需要等待异议(因为都已经被证明有效了),完成的速度也更快。值得一提的是,目前基于ZK的方案不是完全完美的,有效性证明需要的计算量很大,同时因为改变了世界状态转移的方式,一些ZK roll-up没有EVM(以太坊虚拟机)的支持,但总的来说,
上图,以太坊联合创始人 Vitalik 在表格中对各大 L2 方案及其数据可用性进行了概述
除此之外,零知识证明还可以用于在不交换密码等秘密信息的情况下对用户进行身份验证等场景。不过,零知识证明目前使用的算法计算强度都较高,因为它们需要验证者和证明者之间的多次交互(在交互式ZKP中),或需要大量的计算能力(在非交互式ZKP中),这使得零知识证明目前并没有得到广泛应用,但是随着算法完善和算力提高,零知识证明也会越来越普及。