# 关于零知识证明

By [rayjun.eth](https://paragraph.com/@rayjun-2) · 2022-11-29

---

1.

理解零知识证明其实不难，假设现在你有两个球，一个红色，一个绿色，这两个球除了颜色不同之外没有其他任何的区别。

然后你跟你的红色色盲的朋友说这两个球的颜色是不同的，但是他不信，现在你需要用一种方式来证明这两个球的颜色不一样，但是又不能直接告诉他，即使直接告诉他，他也不信。所以有一个这样的方式来解决这个问题。

首先色盲朋友将两个球都放到背后，可以随意调换球的位置，然后随机拿出一个球，然后说跟上次拿出来的颜色是不是一致（第一次除外）。

假如这两个球是完全一样的，那么你第二次能猜中的比例就是 50%，第三次是 25 %，在这样进行了 20 次之后，你能全部猜中的概率就已经很低了，这个时候，色盲朋友就可以相信这两个球的颜色是真的不同不同了，而且最后他也分辨不出来到底哪个球是红色哪个球是绿色。

上面的实验虽然简单，但是却满足了零知识证明的三大要素：

*   完备性（Completeness）：证明者能够向验证者证明命题是真的，上面这个例子中，你是证明者，色盲朋友是验证者
    
*   可靠性（Soundness）：如果命题是假的，那么验证者就无法证明命题是真的，在上面的例子中，如果两个球的颜色一样，只要进行足够的实验次数，那么你肯定会出错
    
*   零知识（Zero-knowledge）：在实验的过程，验证者不会获取到任何额外的知识，色盲朋友最后还是无法分辨两个球的颜色
    

所以上面的实验就是一次零知识证明，这个证明过程是一个数学过程，需要额外的计算量，而且为了保证最后的结果是可信的，计算量还不能太少。为了保证性能不受影响，计算量也不能太大，所以零知识证明的结果是性能和可靠性的平衡。

从这个角度上来说，零知识证明的结果在概率上并不是 100% 可信的。

2.

上面这整个过程其实是一个交互的过程，证明者和交互者需要持续的交换信息，在正式的使用环境中，这种方式效率太低。

而非交互的过程其实就是相当于把这个交互的过程缩短，因为频繁交互带来的通信成本很高，非交互零知识就是指信息只交换一次。

那么怎么理解这个非交互过程呢，还看上面的例子，在上面的例子中，色盲朋友一口气列出了很多个球，组合，然后你每次看到之后，把答案写下来，但是并不是发出去，而是等到结束后，再以一次性把结果传递给色盲朋友。

实际的过程会比这个复杂一点，要经过很多数学的计算。大体的原理就是证明者和验证者约定一种规则，验证者按照这种规则来提供数据，然后验证者则验证这些数据是否符合约定的规则，因为如果证明者提供的数据不正确，那么计算出来的结果就会对不上。

通过这种非交互式的验证，那么验证者和证明者可以不用一直在线，现在能实际大规模使用的零知识证明基本都是非交互式的。

ZK-SNARK 和 ZK-STARK 就是两种使用最广泛的非交互式零知识证明算法。

3.

这两个算法之间最大的区别在于 ZK-SNARK 依赖椭圆曲线算法，需要设置一个初始的密钥，而 ZK-STARK 不依赖椭圆曲线算法，只需要依赖哈希算法，也就不需要那个初始的密钥。

对不同大小的数据输入，ZK-STARK 产出的结果变化不大，但是在小数据的结果上大于 ZK-SNARK 。

另外 ZK-SNARK 验证结果耗费的时间随着数据的增长而线性增长，ZK-STARK 验证所需要的时间基本和数据的大小没有关系，处理大数据集更有效率，开销基本不变。

所以在处理小数据集的时候，ZK-SNARK 效率更高，处理大数据集的时候，ZK-STARK 效率更高。

4.

目前 ZK 方案最典型的领域是匿名支付，区块链本身无法真正保证隐私，通过一些追踪手段，很容易将地址和现实生活中的人联系起来。ZK 已经在 ZCash、Tornado Cash 等项目中使用，在这些项目中，通过 ZK 将一些关键的信息进行隐藏，从而不泄露交易双方的信息。特别是 Tornado Cash，因为太火爆，成为洗钱圣地，甚至被拉入了黑名单。

在目前以太坊的各种扩容方案中，ZK 是一个很重要的方向，ZK-rollup 是目前最被看到的方案。在这个方案中，链下的交易数据被 ZK 打包好上传到以太坊上，数据可以被立马验证，效率比其他的方案要更有效率，目前被作为主要的扩容方案在发展。

在其他场景，比如身份认证，也可以通过 ZK 技术来保护隐私信息，这样既可以证明身份，又不用泄漏隐私信息。

5.

当然 ZK 算法并不完美，也有缺点：

*   ZK 算法可以使用硬件来加速，而生成零知识证明的硬件很贵，最后这些成本都会被平摊到用户头上
    
*   验证证明的开销（ZK-rollup 中的每次 ZK-SNARK 需要支付 50 万 gas，ZK-STARK 则更高）
    
*   信任假设（在 ZK-SNARK 中， CRS 是一次性生成的，然后会重复使用，如果 CRS 泄漏，会对安全性造成很大的威胁，ZK-STARKS 则没有这样的问题）
    
*   量子计算的威胁（对 ZK-SNARK 有威胁，ZK-STARK 目前来看对这个攻击是免疫的）
    

参考链接

\[1\] [https://ethereum.org/en/zero-knowledge-proofs/](https://ethereum.org/en/zero-knowledge-proofs/)

\[2\] [https://en.wikipedia.org/wiki/Zero-knowledge\_proof](https://en.wikipedia.org/wiki/Zero-knowledge_proof)

\[3\] [https://dl.acm.org/doi/pdf/10.1145/62212.62222](https://dl.acm.org/doi/pdf/10.1145/62212.62222)

\[4\] [https://learnblockchain.cn/article/347](https://learnblockchain.cn/article/347)

\[5\] [https://vitalik.ca/general/2017/11/09/starks\_part\_1.html](https://vitalik.ca/general/2017/11/09/starks_part_1.html)

\[6\] [https://vitalik.ca/general/2017/11/22/starks\_part\_2.html](https://vitalik.ca/general/2017/11/22/starks_part_2.html)

\[7\] [https://vitalik.ca/general/2018/07/21/starks\_part\_3.html](https://vitalik.ca/general/2018/07/21/starks_part_3.html)

\[8\] [https://learnblockchain.cn/article/269](https://learnblockchain.cn/article/269)

---

*Originally published on [rayjun.eth](https://paragraph.com/@rayjun-2/Cgvzl9aT5P63gOcO1nEn)*
