# ZK零知识证明的实现方式和项目

By [0xJennie](https://paragraph.com/@0xjennie) · 2023-06-29

---

在当今的数字时代，隐私和安全成为了人们关注的焦点。我们希望保护我们的个人信息，确保交易和通信的安全性。但是，如何在验证真实性的同时保护个人隐私呢？这就引出了零知识证明这个神奇的密码学概念。想象一下，有一种方法可以向别人证明某件事情是真实的，但又不用泄露任何关于这个事情的具体信息。这就是零知识证明的魅力所在。在本文中，我们将探索零知识证明的原理和应用，带你进入一个神奇而有趣的密码学世界。

一、什么是零知识证明？
-----------

零知识证明（Zero-Knowledge Proof）是密码学中的一个概念，用于证明某个陈述的真实性，而无需泄露任何关于该陈述的具体信息。在零知识证明中，证明者能够向验证者证明某个陈述是真实的，同时不泄露任何关于该陈述的具体信息，使得验证者相信该陈述的真实性。

为了更好地理解零知识证明的概念，我们可以通过一个简单的例子来说明。假设有两个人，Alice和Bob，他们站在一扇关闭的门前。Alice声称自己知道门后面的密码，而Bob想要确保Alice确实知道密码，而不是仅仅猜测。然而，Alice又不想透露密码的任何一位字符给Bob。这时，零知识证明就派上了用场。Alice可以使用零知识证明协议向Bob证明她确实知道密码，但在此过程中不会透露任何密码的细节。这样，Bob可以相信Alice的主张，并确保门后面的密码不会被泄露。

零知识证明的概念和技术在密码学、安全协议、区块链和隐私保护等领域得到广泛应用。它允许在保护隐私的同时进行身份验证、数据交换和授权等操作，提供了一种强大的工具来解决信息安全和隐私保护的挑战。

零知识证明 ZKP 系统最早是由 Goldwasser、Micali 和 Rackoff 在他们的论文 The Knowledge Complexity of Interactive Proof Systems（即 GMR85）中提出的，该论文于 1985 年提出，1989 年发表。该论文主要说明了需要多少知识才能被证明。在交互系统中经过 K 轮交互后交换以证明一个陈述是正确的。如果交换的知识可以为零，则它被归类为零知识证明 ZKP。

基本上，零知识证明 ZKP 的目标是在证明速度、验证速度和证明量的大小之间进行权衡。理想的协议具有证明和验证快速、证明量小的特点。前者的数量由受信任的设置决定。

零知识证明 ZKP 技术最重大的突破是Groth在2010年发表的论文Short Pairing-based Non-interactive Zero-Knowledge Arguments，被认为是ZKP中最重要的一组**zk-SNARKs (简明非交互零知识证明) 的理论先驱**。

在接下来的部分，我们将深入探讨零知识证明的工作原理，并了解不同的实现方式和应用案例。

1\. 零知识证明的基本原理
--------------

1.1 交互式零知识证明的概念和步骤
------------------

零知识证明通常是通过交互式协议的形式进行的，其中包含了证明者（通常是一个个体或者系统）和验证者之间的交互。以下是交互式零知识证明的基本步骤：

1.  初始化：验证者和证明者之间建立通信，并共同设定证明的目标。
    
2.  提出问题：验证者向证明者提出问题或者陈述，例如“你知道某个秘密值x的特定属性吗？”。
    
3.  证明生成：证明者利用零知识证明协议生成证明信息，这些信息旨在向验证者展示陈述的真实性，但又不泄露具体的秘密信息。
    
4.  证明验证：验证者使用协议中约定的验证步骤来验证证明信息的正确性。如果验证者相信陈述的真实性，并确信证明者具有相应的知识，那么验证者将接受该陈述为真。
    
5.  重复步骤：如果验证者对证明信息不满意或者需要更多的证明，整个过程可以重复多次，直到验证者获得足够的信心来接受陈述为真。
    

1.2 零知识性质的解释：如何向验证者证明而不泄露陈述的细节
------------------------------

零知识证明的核心在于证明者向验证者证明陈述的真实性，而又不泄露任何关于陈述的具体细节。这意味着验证者可以从交互过程中获得有关陈述的一些随机性和性质，但无法得知陈述本身。

为了实现这种零知识性质，零知识证明通常基于一些数学和密码学原理。例如，零知识证明可以利用密码哈希函数，**将陈述转化为哈希值**，并通过比较哈希值的相等性来证明陈述的真实性。这样，验证者只能获得关于哈希值的信息，而无法了解原始陈述的内容。

另一种常见的零知识证明技术是**基于公开密钥密码学**，例如使用零知识证明的非交互式证明协议。这种协议允许证明者在没有直接的交互过程中向验证者证明陈述的真实性，通过构建一种特殊的证明结构来达到零知识性质。

1.3 零知识证明的正确性和安全性要求
-------------------

零知识证明的正确性要求是指证明者必须能够以高概率向验证者证明陈述的真实性。换句话说，证明者在协议中提供的证据应当能够让验证者相信陈述是真实的，且错误地接受错误陈述的概率非常低。

另一方面，零知识证明的安全性要求是指证明者在协议过程中不会泄露任何有关陈述的额外信息。这意味着即使验证者参与多次交互，并获得了多个证明，他们也不能从这些证明中获取到有关陈述的任何附加信息。

确保零知识证明的正确性和安全性是密码学和协议设计中的重要挑战，需要结合数学原理和密码学技术来确保协议的可靠性。

以上是关于零知识证明的基本原理的解释。在接下来的部分，我们将探索不同的零知识证明实现方式，并探讨它们在实际应用中的应用和局限性。

二、零知识证明的实现方式，及应用的项目
-------------------

1\. 🔹zk-SNARKs (简明非交互零知识证明)
----------------------------

zk-SNARK — — Zero-knowledge Succinct Non-interactive Arguments of Knowledge

这是一种加密证明，文件很小而且很容易验证。它利用椭圆曲线生成一个加密证明，该椭圆曲线假设无法从一个公开的基点找到随机椭圆曲线元素的离散对数。椭圆曲线的计算成本低于STARK的哈希函数，因此SNARK协议的**gas成本更低**。

**数字签名构成了 zk-SNARKs 的工作原理**。数字签名使用加密算法对敏感信息进行保护，使其对另一方隐藏，同时向该方提供所要求的必要证据。

\*\*那么具体它是如何完成的呢？\*\*步骤如下：

1.  证明者首先生成一对密钥，一个公钥，一个私钥。他使用私钥签署交易。
    
2.  然后证明者将此交易编码为 zk-SNARKs，这是交易有效的数学证明。
    
3.  证明与公钥一起发送给验证者。然后，验证者使用公钥检查公式是否正确，而无需了解有关交易的任何其他信息。由于只验证少量信息，因此可以非常快速地完成此检查，以确认交易有效。
    

zk-SNARK项目
----------

1）Zcash
-------

[Zcash](https://z.cash/)前身是ZeroCash。名字中的“zero”指使用零知识证明技术来实现隐私交易。Zerocash是早期出现的加密项目之一，推动了零知识证明技术在行业中的应用。

由于它是基于 UTXO 的，一些交易信息只是被屏蔽，而不是完全被掩盖。由于基于比特币设计的独立网络，它也很难扩展（与其他应用程序结合）。屏蔽（即隐私交易）的实际使用率不到 10%，意味着隐私交易尚未成功扩展。

2）Loopring
----------

[Loopring](https://medium.loopring.io/chainlink-and-loopring-collaborate-on-oracles-for-zkrollup-dex-protocol-c1c8094afc27) 是以太坊上的DEX，支持订单簿交易，并且不托管用户资产。Loopring接入了Chainlink Price Feeds，服务几十万用户，交易量高达数十亿。

3）zkSync 1.0
------------

[zkSync](https://zksync.io/) 1.0是以太坊上的rollup。它与StarkEx一样，都支持通证转账和兑换，但不支持智能合约。该协议由Matter Labs开发。

4）zkSync 2.0
------------

zkSync 2.0与StarkNet一样，也是以太坊的Layer 2扩容方案。采用了volition基础架构，可以支持智能合约。

zkSync采用zk-SNARK来验证交易，并采用PoS系统zkPorter来保障数据可用性。

zkSync 2.0和StarkNet的主要区别除了有效性证明之外，还有前者可以兼容EVM。

1inch、Alchemix和Curve都计划在zkSync 2.0上发布。

5）ZigZag
--------

[ZigZag](https://info.zigzag.exchange/) 是一个去中心化交易平台，采用订单簿模式交易ERC-20通证。

相比之下，大多数DEX采用的都是[自动做市商](https://chain.link/education-hub/what-is-an-automated-market-maker-amm)（AMM）模式。

ZigZag的订单簿模式得益于zk-rollup强大的可扩展性。zkSync注册表中的任何通证都可以在ZigZag中交易。该协议目前在zkSync 1.0上运行，但计划在zkSync 2.0和StarkNet上发布。

6）Mina
------

[Mina](https://minaprotocol.com/) 是轻量级区块链，采用SNARKs创建容量最大为22kb的区块。项目可以在Mina上开发部署应用，并可以实现全部智能合约功能。

2\. 🪛zk-STARK（零知识的可扩展、透明知识证明）
------------------------------

zk-STARK — — zero-knowledge scalable **transparent** argument of knowledge

这种加密证明几乎不需要证明者和验证者之间产生任何交互。

STARKs相比SNARKs的最大优势在于**证明时间更短**，而且**更容易扩展**。

另外，由于STARKs采用哈希函数，因此也可以抗量子攻击。

> _STARKs的发明者是Eli Ben-Sasson，此人是StarkWare的联合创始人，这个团队也开发了StarkEx和StarkNet。_

zk-STARK项目
----------

1）StarkEx
---------

[StarkEx](https://starkware.co/starkex/) 是以太坊上的Layer 2扩容方案，采用STARK证明来验证自托管的交易，并在上面开发交易和支付应用。

基于StarkEx的项目包括DeversiFi、Sorare和dYdX，目前已完成了几亿笔交易并实现了几千亿美元的交易额。

然而，**StarkEx无法支持智能合约功能**，因此无法实现功能完备的dApp。

2）StarkNet -Starkware
---------------------

[StarkNet](https://starkware.co/starknet/) 是一个通用平台，开发者可以使用StarkNet在以太坊的zk-rollup上部署智能合约。

以太坊主流的dApp Aave和Maker都计划在StarkNet上发布。

StarkEx的zk-rollup也可以在StarkNet上发布，以提高应用的可扩展性。

为了充分利用STARK在**计算**和**可扩展性**方面的优势，StarkWare开发了Cairo语言，这是一种高效且图灵完备的编程语言，专门用于创建STARK证明。这意味着StarkWare需要开发文档、框架和其他工具来激活其开发者生态。

根据数据可用性和证明的方式，Starkware 对第二层网络 L2 有一个经典的分类（Volition 的数据可用性层可以选择链上和链下）:

![](https://storage.googleapis.com/papyrus_images/eb85bf9cbdf403e8489dba6f4188fee7b0ae70f946bcbbab12037576216159e9.webp)

3）Immutable X
-------------

[Immutable X](https://www.immutable.com/)是一个NFT平台，用于铸造和交易NFT和通证。该平台使用StarkEx打造专属的zk-rollup。

Immutable X平台上NFT铸造和交易量达到数百万，而且即使在以太坊网络拥堵期间也可以保持较低的成本。

Immutable X也将在StarkNet上发布。有效性证明不会直接发布到以太坊上，而是先发布到StarkNet上，然后再通过StarkNet的rollup发布到以太坊上。Immutable X可以利用StarkEx在StarkNet上发布应用链，为项目提供layer 3扩容方案。

其他的零知识证明实现方式
------------

3\. 交互式协议：
----------

交互式协议是最基本的零知识证明方式，涉及证明者和验证者之间的交互。在交互过程中，证明者通过逐步提供证据来向验证者证明陈述的真实性，而验证者则使用约定的验证步骤来确认证明的正确性。

4\. 密码哈希函数：
-----------

密码哈希函数是一种将输入数据转化为固定长度哈希值的算法。在零知识证明中，密码哈希函数常被用来将陈述转化为哈希值，并通过比较哈希值的相等性来验证陈述的真实性。

三、每种实现方式的特点和适用场景
----------------

1.  **zk-SNARK：**
    

*   原理：利用双线性对和特殊的证明结构来验证陈述的真实性。
    
*   特点：紧凑性、高效性能。
    
*   适用场景：资源受限的环境，如移动设备和物联网应用。
    

**2\. zk-STARK：**

*   原理：利用可验证随机函数构建多项式方程的证明结构来验证陈述的真实性。
    
*   特点：高度可扩展性、抗量子计算能力。
    
*   适用场景：大规模数据处理、复杂计算，如区块链和加密货币。
    

**3\. 交互式协议：**

*   原理：通过证明者和验证者之间的交互来逐步提供证据和验证证明。
    
*   特点：简单直观，但可能需要多轮交互。
    
*   适用场景：不受性能限制，需要直接交互和动态验证的场景。
    

**4\. 密码哈希函数：**

*   原理：利用哈希函数将陈述转化为哈希值，并比较哈希值的相等性来验证陈述的真实性。
    
*   特点：简单实用，但可能无法满足复杂陈述的验证需求。
    
*   适用场景：简单的陈述验证，如身份验证和简单授权场景。
    

四、EVM兼容性问题：
-----------

零知识 ZK 系统与EVM的兼容性一直是个让人头疼的问题，一般的项目一般都会在两者之间做出折衷。

强调ZK的可能会在自己的系统中做一个虚拟机，有自己的ZK语言和编译器，但是会增加开发者的学习难度，而且基本不开源，会变成黑盒。

总的来说，目前业界有两种选择：一种是完全兼容Solidity的操作码，另一种是设计一种新的ZK友好型虚拟机，兼容Solidity。业界一开始没有预料到这么快的集成，但近一两年技术的快速迭代，将EVM的兼容性提升到了一个很高的水平，开发者可以实现一定程度的无缝迁移（即 以太坊主链到 ZK-rollup）。这是一个非常激动人心的发展，将影响**ZK的发展生态和竞争格局**。

结尾
--

零知识证明在当今的信息时代具有重要的意义。它可以应用于许多领域，如隐私保护、身份验证、区块链和加密货币等。零知识证明的引入可以解决许多隐私和安全方面的问题，使数据交互更加可信和安全。

零知识证明在隐私保护、数据验证和安全交互等方面具有巨大潜力。通过深入研究和探索，我们可以进一步推动零知识证明的发展，并将其应用于更多实际场景中，以构建更安全、更隐私保护的数字社会。

在未来的发展中，零知识证明将继续受到广泛关注和研究。通过不断改进技术和解决挑战，我们可以期待零知识证明在信息安全领域发挥更大的作用，并为我们的数字世界带来更多的隐私保护和安全性。

_References：_

*   [https://www.hashkey.com/cn/insights/zk-learning-series-part-1-historical-principles-and-industry](https://www.hashkey.com/cn/insights/zk-learning-series-part-1-historical-principles-and-industry)[https://blog.chain.link/zero-knowledge-projects-zh/](https://blog.chain.link/zero-knowledge-projects-zh/)[https://ethereum.org/en/developers/docs/scaling/validium/](https://ethereum.org/en/developers/docs/scaling/validium/)\*
    

感谢你的订阅和点赞！

---

*Originally published on [0xJennie](https://paragraph.com/@0xjennie/zk)*
