# ZK+隐私赛道研究报告

By [ViewDAO](https://paragraph.com/@viewdao) · 2022-03-01

---

_AUTHOR：DaPangDun（@BxmZhao），Elaine.eth（@elaineyang73）_，zhihong（@zhihong05）

`请注意：本文内容较多，篇幅较长，请自行选择自己感兴趣的部分。因个人水平有限，若文章中出现明显的错误（包括但不限于概念错误、认知错误），请DM我指正，谢谢。`

随着网络的普及，用户在网络上产生的数据量将越来越庞大，用户数据产生的价值也将越来越高。目前Web2的时代数据呈现垄断式的分布情况（由巨头把握），而区块链的完全公开透明解决了数据垄断，但却又带来了其他的问题：

*   信息不对称导致被利用的负面影响（例如MEV攻击，DEX抢先攻击等）
    
*   不希望将自己的交易数据或者其他web3数据展现给其他人的个体无法避免数据被采集
    
*   需要对数据进行分对象授权的个体无法实现授权
    

从这个角度来看，未来的用户数据应该是受到隐私保护的，用户有权决定是否展示自己的数据，数据到底展示给谁看。

一、ZK的诞生及发展
----------

因为隐私的需求，诞生了ZK技术。ZK技术并不是一个很新的技术，在1985年就被提出，但是早期的零知识证明由于其效率和可用性等限制，未得到很好的利用，仅停留在理论层面。

直到近年来，零知识证明的理论研究才开始不断突破，同时区块链也为零知识证明创造了大展拳脚的机会，因而走进大众的视野。

我们也能看到各大机构也在加紧布局隐私赛道，也是看到了这个市场巨大的发展潜力。

### 1.1 定义

ZK：[**Zero-knowledge proofs**](https://medium.com/@weijiek/how-i-learned-zk-snarks-from-scratch-177a01c5514e)**，零知识证明**或**零知识协议**：现代密码学三大基础之一，由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出。

### 1.2 内容

是一方（证明者：prover）向另一方（检验者：verifier）证明某命题的方法，特点是过程中除“该命题为真”这一陈述之外，不泄露任何其他资讯。因此，可理解成“零泄密证明”。

### 1.3 性质

*   完备性（Completeness）：只要证明者拥有相应的知识，那么就能通过验证者的验证，即证明者有足够大的概率使验证者确信。
    
*   可靠性（Soundness）：如果证明者没有相应的知识，则无法通过验证者的验证，即证明者欺骗验证者的概率可以忽略。
    
*   零知识性（Zero-Knowledge）：证明者在交互过程中仅向验证者透露是否拥有相应知识的陈述，不会泄露任何关于知识的额外信息。
    

### 1.4 发展历史

*   1985 年，零知识证明`Zero-Knowledge Proof` -由S.Goldwasser、S.Micali及C.Rackoff 首次提出。
    
*   2010年，`Groth`实现了首个基于椭圆曲线双线性映射全能的，常数大小的非交互式零知识证明协议。后来这个协议经过不断优化，最终成为区块链著名的零知识证明协议`SNARKs`。
    
*   2013年，`Pinocchio`协议实现了分钟级别证明，毫秒级别验证，证明大小不到`300`字节，将零知识证明从理论带到了应用。后来`Zcash`使用的`SNARKs`正是基于`Pinocchio`的改进版。
    
*   2014 年，名为`Zerocash`的加密货币则使用了一种特殊的零知识证明工具`zk-SNARKs` （ Zero-Knowledge Succinct Non-interactive Arguments of Knowledge ) 实现了对交易金额、交易双方的完全隐藏，更注重于隐私，以及对交易透明的可控性。
    
*   2017 年， `Zerocash` 团队提出将 `zk-SNARKs` 与智能合约相互结合的方案，使交易能在众目睽睽下隐身，打造保护隐私的智能合约。
    
*   2017年，Jonathan Bootle（from University College London, England）、 Benedict Bunz （from Stanford University, United States）、 Dan Boneh, Andrew Poelstra, Pieter Wuille and Greg Maxwell提出了“`Bulletproofs`”协议，最初是为在比特币区块链中实现而设计的，但它们一直是服务于Monero和网络MimbleWimble的那些真正开始使用该协议来提高其隐私级别的人
    
*   2018年，Eli Ben Sasson 、Iddo Bentov 、Yinon horesh和Michael Ryabzev研发的`zk-STARKs`（Zero-Knowledge Scalable Transparent Arguments of Knowledge）作为zk-SNARKs的优化版，目前该协议仍处于实验室阶段，唯一的测试应用由由StarkWare构建。
    

### 1.5 分类

目前主要的ZK证明分为三类：【zk-SNARKs】【Bulletproofs】【zk-STARKs】，其中zk-SNARKs是应用最为广泛的，目前几乎所有的隐私项目都是基于zk-SNARKs的，zk-STARKs因为出现时间较短，因此目前还处于理论阶段，也需要技术界验证其正确性。

三种证明方式在表现上各有不同，下表列出了一些常见的对比参数情况：

![ZK-SNARKs、ZK-STARKs、Bulletproofs对比](https://storage.googleapis.com/papyrus_images/719b19f2001d9e9643c7b0743af2d720287a2c9c596eb72b1af03b14e2698242.png)

ZK-SNARKs、ZK-STARKs、Bulletproofs对比

【复杂度】：在[计算机科学](https://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)中，[算法](https://zh.wikipedia.org/wiki/%E7%AE%97%E6%B3%95)的时间复杂度（Time complexity）是一个[函数](https://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0)，它定性描述该算法的运行时间。这是一个代表算法输入值的[字符串](https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E4%B8%B2)的长度的函数。时间复杂度常用[大O符号](https://zh.wikipedia.org/wiki/%E5%A4%A7O%E7%AC%A6%E5%8F%B7)表述，不包括这个函数的低阶项和首项系数。使用这种方式时，时间复杂度可被称为是[渐近](https://zh.wikipedia.org/wiki/%E6%B8%90%E8%BF%91%E5%88%86%E6%9E%90)的，亦即考察输入值大小趋近无穷时的情况。（参见[维基百科的解释](https://zh.wikipedia.org/wiki/%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6)）

【可信设置】：zkSNARKS需要设置一组在系统内所有参与方都知道的公共参数，为了能保证zkSNARKS的完整性，这些公共参数必须安全地生成，并在生成后立即销毁。

【抗量子计算】：后量子密码学（英语：Post-quantum cryptography，缩写：PQC），又称抗量子计算密码学，是密码学的一个研究领域，专门研究能够抵抗[量子计算机](https://zh.wikipedia.org/wiki/%E9%87%8F%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA)的加密算法，特别是[公钥加密](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5%E5%8A%A0%E5%AF%86)（[非对称加密](https://zh.wikipedia.org/wiki/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86)）算法。不同于[量子密码学](https://zh.wikipedia.org/wiki/%E9%87%8F%E5%AD%90%E5%AF%86%E7%A2%BC%E5%AD%B8)，后量子密码学使用现有的电子计算机，不依靠量子力学，它依靠的是密码学家认为无法被量子计算机有效解决的计算难题。（参见[维基百科解释](https://zh.wikipedia.org/wiki/%E5%90%8E%E9%87%8F%E5%AD%90%E5%AF%86%E7%A0%81%E5%AD%A6)）

### 1.6 zk-SNARKs与zk-STARKs

zk-SNARKs和zk-STARKs是ZK届争论的最多的话题，简单介绍一下二者各自的优劣、当前状况和发展前景。

**\>>可信设置：**

对可信设置的依赖一直是 SNARK 受诟病的一点，STARK则不需要可信设置。

但是我们也需要看到：SNARK的可信设置只是在最开始的时候或者状态需要改变的时候才需要，而不是一直持续的使用。

**\>>量子抗性：**

SNARK 的另一个缺点是它们不具备量子抗性，一旦量子计算在很大程度上可用，SNARK 背后的隐私技术就会被打破，STARK则具备量子抗性。

当然，如果使用量子计算机，CRYPTO将面临更多的问题，比如[RSA](https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95)或者大多数的钱包基础设施等都将会被破坏。

**\>>发展速度**

SNARK 的采用速度实际上比 STARK 快得多，原因有很多。

*   SNARK 比 STARK 早几年被发现，这使该技术在采用方面取得了显着的领先优势
    
*   Zcash 在区块链开发社区中推广了 SNARK 的使用
    
*   SNARKs 拥有最多的开发人员库、已发布的代码、项目和积极致力于该技术的开发人员。这使得如果开发人员想开始使用零知识技术，他们在使用 SNARK 方面将获得比 STARK 更多的支持。
    
*   SNARK只需要 STARK 所需费用的 24%，这意味着与 SNARK 进行交易对最终用户来说要便宜得多。
    
*   SNARKs 的证明大小比 STARKs 小得多，这意味着它需要更少的链上存储。
    
*   以太坊基金会特别表示支持使用 Starks 的 STARKware。事实上，以太坊基金会向 STARKware 提供了 1200 万美元的赠款，体现了他们对新兴技术的兴趣和投入。
    
*   虽然 STARKs 的文档与 SNARKs 相比相形见绌，但技术社区最近为那些希望实施尖端技术的人开发了更多的资源。
    
*   STARK证明更快，使得其在移动设备，嵌入式设备的部署成为可能，而隔离见证等技术有望缓解其证明体积较大的问题。
    

**在未来，这两类协议可能在不同的应用需求下有各自的地位**

### 1.7 使用ZK的优缺点

**优点**

*   在使用零知识证明时，不会降低安全性
    
*   具有完整的隐秘性
    
*   安全性依赖于未解决的数学难题（如离散对数、大整数因子分解、平方根等等）
    

**缺点**

*   生成零知识证明需要大量的算力
    
*   部分协议需要可信设置
    
*   部分协议不具备抗量子性
    

### 1.8 具体原理

零知识证明背后的原理颇为复杂，且内容繁多。因此对绝大多数读者来说，学习零知识证明原理的难度很大。所以本篇对于原理部分不做介绍，仅贴出相关原理文章供大家一起学习：

[https://secbit.io/blog/2019/11/07/zkp-learning-resources/](https://secbit.io/blog/2019/11/07/zkp-learning-resources/)

二、ZK的主要应用
=========

零知识证明在区块链上的两大应用场景：

【隐私】：在隐私场景中，我们可以借助零知识证明的“不泄露信息”特性，在不泄漏交易的细节（接收方，发送方，交易余额）的情况下证明区块链上的资产转移是有效的。

【扩容】：在扩容场景中，我们不太需要关注零知识证明技术的“不泄露信息”这个特性，我们的关注重点是它的“证明论断有效”这个特性，由于链上资源是有限的，所以我们需要把大量的计算迁移到链下进行，因此需要有一种技术能够证明这些在链下发生的动作是可信的，零知识证明正好可以帮助我们做链下可信计算的背书。

### 2.1 隐私

在目前主流的公链上，账号间的交易信息是记录在公开的账本上的，所有人都可以查看到交易记录和明细，这样可以进行完整的溯源。但是这也带来了很重要的隐私问题：当一个账号对应的身份信息被暴露后，其他人就可以追踪这个账号所有的交易记录，从而去完整的描绘这样一个人（比如还有哪些账号等等）。因为这种公开性，可以看到人们在交易中的具体表现行为模式、投资币种等，对于投机者而言是有机会获得ALPHA的，所以就诞生了很多第三方的地址或者钱包的分析工具。

针对数据的隐私保护，其实可以延伸出很多的应用思考，比如：

1）【通讯加密】：用户之间可以互相发消息，但是不用担心服务器拿到所有的消息记录，同时消息也可以按照服务器的要求，出示相应的零知识证明，比如消息的来源、与发送的目的地。

2）【身份认证】：用户可以向网站证明，他拥有私钥，或者知道某个只要用户自己才知道的秘密答案，而网站并不需要知道，但是网站可以通过验证这个零知识证明， 从而确认用户的身份

3）【去中心化存储】：服务器可以向用户证明他们的数据被妥善保存，并且不泄露数据的任何具体内容。

4）【信用记录】：用户可以有选择性的向另一方出示自己的信用记录，一方面可以有选择的出示满足对方要求的记录分数，同时证明信用记录的真实性。

5）【流媒体】：将流媒体进行完全加密，同时展示完整的版权保护。

6）【电子投票】：允许选民投票，可以验证，但我们绝不会知道是谁投票的

### 2.2 扩容

我们大部分人应该都体会过公链上的堵塞、高GAS问题，所以很多技术人员都在研究区块链的扩容问题，争取提高公链上的TPS，然而区块链扩容受到Vitalik提出的不可能三角的限制。`（不可能三角是指区块链系统设计无法同时兼顾可扩展性，去中心化和安全性，三者只能取其二）`

但是作为公链，基于其核心的功用，去中心化与安全性应当是排在首位的，那么怎么解决TPS低的问题。ZK技术就给出了一个解决方案：将大量的工作放到链下去解决，仅仅将最重要的数据提交到区块链主链上进行验证。

所以，由此产生了一个大的赛道：L2。在底层区块链（Layer1）上构建一个扩展层（Layer2)，Layer1来保证安全和去中心化，绝对可靠、可信；它能做到全球共识，并作为“加密法院”，通过智能合约设计的规则进行仲裁，以经济激励的形式将信任传递到Layer2 上；而Layer2追求极致的性能，它只能做到局部共识，但是能够满足各类商业场景的需求。

**链下扩容：**

ZK-Rollup就是基于零知识证明的二层扩容方案， ZK-Rollup方案起源于18年下半年，由`Barry Whitehat`和`Vitalik`先后提出。

**链上压缩：**

采用 zkSNARK 技术能够给现有的以太坊框架带来几十倍的性能提升。因为有了计算的证明，同样一个计算就没必要重复多次了，在传统的区块链架构中，同样的计算被重复多次，比如签名的校验，交易合法性校验，智能合约的执行等等。这些计算过程都可以被零知识证明技术进行压缩。

三、当前隐私项目汇总及分析
=============

我们初步汇总了当前的一些采用了ZK技术的项目或者专注于隐私的项目，整理成notion文档，见下方链接：

[https://www.notion.so/d0024f7ed2e24fa3a4f31c409340d0cf?v=b22a07dd07b64f2ba77720a6e8c20396](https://www.notion.so/d0024f7ed2e24fa3a4f31c409340d0cf?v=b22a07dd07b64f2ba77720a6e8c20396)

`注意：因为目前隐私项目上的比较快，所以数据可能会落后，有的项目可能会未包含进来，我已经开放了文档的编辑权限，但请不要乱改数据，谢谢！`

我们正在对于重点关注的项目进行更深层次的研究分析，会在之后一一公布出来！

四、我们对隐私项目的看法
============

我们针对ZK+隐私项目进行了多次会议讨论，也邀请了一些做过相关行业的人士（Bella，咕咕）进行了分享，大致有以下的几点看法：

### 4.1 隐私项目的前景

隐私问题会是未来会越来越重要的一个课题，存在着巨大的刚需，因此隐私赛道在未来出现Alpha的机会非常高。

目前隐私赛道最大的问题并不是隐私性，而是要保护隐私所带来的高成本，低效率以及较差的用户体验，因而隐私项目目前仍未普及。因为毕竟比起隐私，我们会更倾向于选择效率高，成本低的应用

### 4.2 隐私项目应该关注的方面

我们认为，一个好的隐私项目（不管是中间组件还是公链）应该具备以下5个特性：

1）基本的隐私性

2）不牺牲性能

3）极低的成本

4）用户体验极佳（甚至无须额外操作）

5）生态兼容

### 4.3 隐私赛道的方向

一类是隐私中间件，一类是隐私公链，目前两者均有不少项目，我们认为它们各有优点以及需克服的难点。

**\>>公链：**

公链可以做到默认隐私，以此做到用户体验最佳，成本最低的效果。

目前存在几个问题：

1）生态问题：只能选择兼容或是独自开发，自主开发叙事潜力比较大，直接兼容目前主流生态的应用最快最现实

2）性能问题：能不能在融合ZK后保持正常性能甚至高性能，这里牵扯到公链的底层技术的开发难题

3）ZK技术护城河：如果主流公链愿意且很简单地就能在原先的底层公链技术加上ZK，那么隐私公链可能就不存在价值捕获了

4）技术开发难度问题：目前ZK方面的技术人员是奇缺的，门槛比较高，建立隐私公链需要大量的资深技术人员，因此在开发这个环节就很有难度。隐私公链目前基本都设置了自由的开发语言，这对于开发来说又增加了一定的难度。

**\>>中间组件**

中间组件最大的优势就是比起公链来说更容易做到生态兼容，而且即插即用，十分方便。

但带来的问题就比较明显了：

1）使用的高成本

2）用户体验无法做到最佳（不是默认隐私就代表需要自主操作，不过可能可以提前配置好）

3）钱包隐私这方面比较难做到（未来有机会做到）

4）主流公链/Dapp如果能比较容易的自主开发ZK中间组件，个体的隐私中间组件也不会存在价值捕获（比如EDEN）

### 4.4 我们对隐私项目的看法

综上所述，我们认为的最理想的隐私模式排序如下：

【第1位】：默认隐私且低成本不牺牲性能的隐私中间组件（一旦做到就是Chainlink的等级）

【第2位】：解决了性能+生态问题的隐私公链（目前能做到的天花板）

【第3位】：自主开发生态的高性能默认隐私公链（例如Oasis和Aleo等）

【第4位】：目前的隐私中间组件

对于公链：我们需要关注隐私公链的生态问题、技术发展路线（是否兼容EVM等）、性能问题（注意是实际TPS）、GAS费用等方面。如果隐私公链的技术护城河足够，生态能发展起来，我们认为未来会出现一个名列市值前20甚至前10（除去稳定币）的隐私公链。

对于中间件：我们要关注技术发展程度、易用性、组合性等方面，如果能够做到，那么有可能会出现类似于ChainLink级别的硬核中间件

### 4.5 隐私项目的风险

1）ZK原理的完备性证明，这需要时间来验证。（当前并没有问题）

2）目前各个国家加强了对于KYC的要求，隐私项目、隐私币、隐私公链的合法性问题。（也许可以通过分级授权的方式来解决）

---

*Originally published on [ViewDAO](https://paragraph.com/@viewdao/zk)*
