摘要:在这篇文章中,你所有关于零知识证明的问题都将得到解答。

也许你曾经听说过ZK Proof或零知识证明。但是,你好像从来没搞清楚它是什么?什么是ZK-rollups?什么是ZK-SNARKs?在这篇文章中,你所有关于零知识证明的问题都将得到解答,所以请抓紧时间,让我们一起开始学习零知识证明的旅程吧!

什么是零知识证明?

零知识证明是一种证明方法,通过这种方法,一方(证明者)在不透露任何实际信息的情况下,可以向另一方(验证者)证明它知道一个秘密或一个声明是真实的。

上面提到的术语 “零知识 ”本身就是对以下事实的证明:没有透露任何信息,但第二方(验证者)理所当然地相信第一方(证明者)知道这个秘密或他们的声明是真实的。

那么,为什么我们需要零知识证明呢?当我们不相信别人会透露信息,但想说服他们我们知道这个秘密或我们的声明是真实的。

有两种类型的零知识证明:

  1. 交互式
  2. 非交互式

1️.我们先看一个交互式零知识证明的例子

假设你需要零知识证明你已经成年,但又不能实际透露你的具体年龄。我们需要一个第三方权威机构来证明你的年龄,该机构的骚操作是这样的:

“谢谢你提供的出生证明副本,我们已经知道你21岁的事儿了。这里有一个秘密号码,请秘密存储并保证它的安全。你可能在以后会需要它。”

“你的秘密号码将被哈希处理22次,为你制作一个最终的年龄哈希码(是的,系统的默认操作是将你的年龄+1进行哈希才能使发挥作用)。因此,在我们给你的秘密号码和这个最终的年龄哈希码之间有22次哈希处理。”

“我们会使用你的名字、一个时间戳和这个最终的年龄哈希码来进行包装。这就是你要给别人的证明材料。”

现在,只要你想向别人证明你已经超过18岁,那么你就必须有效地证明,从你的秘密号码到你的最终年龄哈希代码有超过18个哈希步骤。

要做到这一点,你只需向他们展示最后18个哈希步骤,你需要首先通过自己做前4个哈希步骤(将你的秘密号码进行4次哈希处理),然后给他们结果;即第四次哈希处理的结果。

然后他们对你提供的结果再进行18次哈希(因为机构现在已经对你的秘密号码做了总共22次哈希处理),他们最终会得到最后的年龄哈希码,并可以验证你是否成年,因为这写信息都在你的证明套件中。

实际上,验证者会说:“给我们一个值,我们可以对其进行18次哈希,以获得与你的最终年龄哈希码相匹配的值。如果你不是18岁,那么你的最终年龄哈希码就不会有18次哈希步骤,我们就不能很好地认证你的真正年龄。”

这也是一个不错的例子

一个好的零知识证明的例子 – MathOverflow

但这种交互式方法也有一些局限性:

  1. 每次他们进行验证都需要进行整个冗长的过程。而这个过程其实是相当简单的哈希处理,想象一下进行实际的加密算法的计算是什么样的?
  2. 此外,无论是线上还是线下,双方都需要在同一时间、同一地点(网络平台)碰头。

2️.来看看非交互式证明

1986年,Fiat和Shamir发明了Fiat-Shamir启发式(Fiat–Shamir heuristic,非交互式零知识证明),从而成为第一个基于交互式零知识点证明的数字签名算法。

Fiat-Shamir启发式可以通过承诺方案(Commitment Scheme)变成非交互式零知识证明,因此产生了ZK-SNARKs或零知识的简洁非交互式知识论证。

为了使Fiat-Shamir启发式更加强大,我们使用了承诺方案。承诺方案是许多加密协议的基本组成部分。它允许承诺人公布一个值(称为承诺),并将这个值与一个消息绑定(binding),而不透露它(hiding)。

目前用于零知识证明的两个最突出的承诺方案是佩德森承诺(Pederson commitment)和多项式承诺(Polynomial commitment)。

但是,直到2013年左右,ZK-SNARKs才变得实际有效,开发者可以在现实世界的应用中实现和使用它。

我推荐你阅读Vitalik Buterin的这篇优秀文章‌,它总体上介绍了ZK-SNARKs为什么可用,并解释了它们是如何实现的。也许你不可能一下子就能搞清楚,多读几遍,一旦你理解了其中的内容,你就能明白其中的原理。

在后量子世界中,我们需要确保我们为ZK-SNARKs选择的加密函数不能被量子计算机强行破解。这就是为什么正在进行改进以实现后量子安全。如果你想了解更多这方面的信息,你可以看ACM的这个讲座:

改进的非交互式零知识与后量子签名的应用‌

好了,现在我们知道什么是零知识证明了,但是它们是用来做什么的呢?

在概念上它有两个主要的用例:

  1. 扩大区块链的交易规模
  2. 隐私——比如在医疗等领域保护个人数据安全

对区块链进行扩展——ZK Rollups

rollup是一种区块链的展解决方案,它通过在第一层网络之外执行交易,但在第一层发布交易数据来工作。这使得rollup可以扩展网络,并仍然从以太坊共识中获得安全性。

将计算移到链外就可以处理更多的交易,因为只有rollup的部分交易数据必须使用以太坊区块。

梳理“交易挖矿”发展历程:挖矿模型不断优化减小抛压

为了实现这一点,rollup交易在一个单独的链上执行,甚至可以运行一个rollup的特定版本的以太坊虚拟机(EVM)。

在rollup上执行交易后的下一步是将它们批处理并发布到以太坊主链上。

整个过程本质上是执行交易,获取数据,压缩数据,并将其以单一批处理的方式rollup(滚)到主链上,因此这个过程被称作“rollup”。

以太坊如何知道发布的数据是有效的,而不是由试图为自己谋利的不良行为者提交的呢