零知识证明学习资源汇总

零知识证明技术是现代密码学三大基础之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出。早期的零知识证明由于其效率和可用性等限制,未得到很好的利用,仅停留在理论层面。直到近年来,零知识证明的理论研究才开始不断突破,同时区块链也为零知识证明创造了大展拳脚的机会,因而走进大众视野。

零知识证明这项“黑科技”随着它的热度逐渐增加,相关的学习资源也慢慢丰富起来了。但是由于,一方面零知识证明背后的原理颇为复杂,且内容繁多;另一方面,针对零知识证明的学习资源质量参差不齐,尚未形成系统。因此对绝大多数读者来说,学习零知识证明的难度依然很大。

本文收集了关于零知识证明的一些学习资料(包括科普文章,论文,开源仓库及相关学习网站等),并对这些资源进行了整理分析,希望能对大家有所帮助。

由于整理时间有限和笔者自身知识的局限性,文章存在不足之处,欢迎纠正、补充和探讨。

1. 故事中零知识证明

初次接触零知识证明的小伙伴一定会问,究竟什么是零知识证明呢?它到底在做什么?

推荐几篇适合小白的文章:





兴许是因为如何解释零知识证明的问题并不简单,所以绝大部分入门级的科普文章都是从讲故事开始的。

2. 深入理解零知识证明

零知识证明技术涉及的知识点繁多,性质也各不相同。了解了什么是零知识证明以后,就需要对零知识证明更深刻的理解,推荐以下几篇零知识证明系列科普文。





零知识证明涉及很多很有意思的思想和原理,都很值得探讨。在此不得不感叹于数学与密码学的精妙之处,也不得不钦佩密码学家们的厉害。

3. 零知识证明的发展

零知识证明的研究今年来一直有新的进展,密码学家们提出了各种不同的协议,推荐两篇文章介绍零知识证明研究的发展过程。


零知识证明迄今为止发展了三十多年,早期一直停留在理论层面,直到近十年才逐渐取得突破。随着越来越多研究人员的进场,相信这个领域未来还会有更多令人惊喜的成果。

4. zk-SNARKs 原理

作为零知识证明领域最知名的一类协议,zk-SNARKs 的理论研究和应用也最为广泛。推荐一些介绍 zk-SNARKs 的资料。

  • 「推荐文章十三」V 神的 zk-SNARKs 科普文章
    推荐值:❤️❤️❤️❤️
    难度值:⭐️⭐️⭐️⭐️
    V 神的这几篇文章应该算得上是流传最为广泛的 zk-SNARK 科普文了。不用多说,推荐阅读。
  1. computational problem —> 电路
  2. 电路 —> R1CS
  3. R1CS —> QAP
  4. QAP —> Linear PCP
  5. Linear PCP —> Linear Interactive Proof
  6. Linear Interactive Proof —> zkSNARK

原文链接:medium.com/@VitalikBute


  • 「推荐文章十四」zcash 官方科普文
    推荐值:❤️❤️❤️❤️
    难度值:⭐️⭐️⭐️⭐️
    这个系列的文章来自 zCash 官方博客。首先介绍了零知识的基本概念以及其应用到 zcash 中的大致思路。随后 7 篇文章分别对 7 个关键点进行了详细介绍(同态隐藏,多项式盲验证,KCA,完整的多项式盲验证,计算到多项式的转换,匹诺曹协议以及椭圆曲线配对),推荐给想深入了解 zk-SNARKs 实现原理的小伙伴。
    原文链接:
  1. What are zk-SNARKs?:z.cash/technology/zksna
  2. Explaining SNARKs Part I: Homomorphic Hidings electriccoin.co/blog/sn
  3. Explaining SNARKs Part II: Blind Evaluation of Polynomials electriccoin.co/blog/sn
  4. Explaining SNARKs Part III: The Knowledge of Coefficient Test and Assumption electriccoin.co/blog/sn
  5. Explaining SNARKs Part IV: How to make Blind Evaluation of Polynomials Verifiable electriccoin.co/blog/sn
  6. Explaining SNARKs Part V: From Computations to Polynomials electriccoin.co/blog/sn
  7. Explaining SNARKs Part VI: The Pinocchio Protocol electriccoin.co/blog/sn
  8. Explaining SNARKs Part VII: Pairings of Elliptic Curves](electriccoin.co/blog/sn
  9. 中文翻译版本链接:jianshu.com/p/b6a14c472jianshu.com/p/92f54fc08


  • 「推荐文章十五」Why and How zk-SNARK Works
    推荐值:❤️❤️❤️❤️❤️
    难度值:⭐️⭐️⭐️
    作者将其学习 zk-SNARK 的经验总结成了一份 PDF 文档并分成 8 篇文章发布到了 Medium 上。与大部分的 zk-SNARK 科普文不同,这个系列的文章没有直接开始讲 zk-SNARK,而是从最基本的数学原理讲起,讲解得非常细致,特别适合数学和密码学基础相对薄弱的小伙伴。
    原文链接:
  1. PDF 完整版:arxiv.org/pdf/1906.0722
  2. Why and How zk-SNARK Works 1: Introduction & the Medium of a Proof:medium.com/@imolfar/why
  3. Why and How zk-SNARK Works 2: Proving Knowledge of a Polynomial:medium.com/@imolfar/why
  4. Why and How zk-SNARK Works 3: Non-interactivity & Distributed Setup:medium.com/@imolfar/why
  5. Why and How zk-SNARK Works 4: General-Purpose Computation:medium.com/@imolfar/why
  6. Why and How zk-SNARK Works 5: Variable Polynomials:medium.com/@imolfar/why
  7. Why and How zk-SNARK Works 6: Verifiable Computation Protocol:medium.com/@imolfar/why
  8. Why and How zk-SNARK Works 7: Constraints and Public Inputs:medium.com/@imolfar/why
  9. Why and How zk-SNARK Works 8: Zero-Knowledge Computation:medium.com/@imolfar/why


  • 「推荐文章十六」 zkSNARKs in a nutshell
    推荐值:❤️❤️❤️
    难度值:⭐️⭐️⭐️
    这篇文章对零知识证明做了总结,分成四个部分:
  1. 编码成一个多项式问题
  2. 简单随机抽样
  3. 同态(Homomorphic)编码 / 加密
  4. 零知识

文章首先介绍了零知识证明,然后又讲解了zk-SNARKs 的实现,最后分析了将零知识证明结合到以太坊上的作用和方式。
原文链接:blog.ethereum.org/2016/
中文翻译版本:zhuanlan.zhihu.com/p/31



"零知识证明技术就像一个江湖,而 zk-SNARKs 是只是比较著名的门派。而在这个江湖中,还有很多其他的门派,他们风格各异,使用的武器也不尽相同。"[3] zk-SNARKs 协议涉及的技术构件很多,也较为复杂,深入学习这部分确实需要下很多功夫。

5. 零知识证明协议

零知识证明协议很多,每个协议的实现也各不相同,有些协议已经应用到了实际的领域,有些还在探索中。推荐几篇介绍不错的文章。

  • 「推荐文章十九」STARKs 科普
    推荐值:❤️❤️❤️❤️
    难度值:⭐️⭐️⭐️⭐️
    V 神的这个科普系列文章,非常详细得介绍了 STARKs 的实现,分成三个部分进行讲解。
    原文链接:
  1. STARKs, Part I: Proofs with Polynomials:vitalik.ca/general/2017
    中文翻译版本:ethfans.org/posts/stark
  2. STARKs, Part II: Thank Goodness It's FRI-day:vitalik.ca/general/2017
    中文翻译版本:ethfans.org/posts/stark
  3. STARKs, Part 3: Into the Weeds:vitalik.ca/general/2018)
    中文翻译版本:ethfans.org/posts/stark
    中文翻译版本:ethfans.org/posts/stark
  • 「推荐文章二十」 Understanding PLONK
    推荐值:❤️❤️❤️❤️
    难度值:⭐️⭐️⭐️⭐️
    这篇文章同样来自 V 神的博客,介绍了 PLONK 的工作原理。PLONK 是一种全新的零知识证明系统,支持通用或可更新的可信设置(trusted setup),作者是 Filecoin 母公司 Protocol Labs 的研究员 Ariel Gabizon 和以太坊隐私交易协议 Aztec Protocol 的两名研究人员 Zachary J. Williamson、Oana Ciobotaru。
    原文链接:vitalik.ca/general/2019
    中文翻译版本:8btc.com/article/486086



  • 「推荐文章二十二」 零知识证明 - Groth16 算法介绍
    推荐值:❤️❤️
    难度值:⭐️⭐️⭐️
    Star Li 的这两篇文章主要从工程应用理解的角度介绍了 Groth16 算法的证明和验证过程,推荐给学习 Groth16 算法的小伙伴。
    原文链接:
  1. 零知识证明 - Groth16 算法介绍:mp.weixin.qq.com/s/SguB
  2. 零知识证明 - 有关 Groth16 的zk证明的理解:mp.weixin.qq.com/s/x1gg

对于零知识证明各个协议介绍的文章还比较有限,随着应用的增多,相信这方面的文章也会越来越多。

6. 零知识证明在区块链领域的应用

零知识证明技术是随着区块链的发展逐渐走入大众视野的,目前零知识证明结合区块链的研究和应用也越来越多。









零知识证明的应用正在逐步增加,从最早的公链 zCash,Monero,到最近基于以太坊平台的 zkPoD, Loopring DEX 3.0应用等,零知识证明在区块链领域的应用将越来越多。

7. 零知识证明相关的技术和漏洞分析文章

零知识证明技术涉及的知识内容很多,在实际的应用场景中,零知识证明的实现还存在诸多的挑战,协议安全,性能等等问题都有可能限制其发展。这一节推荐一些技术分析和漏洞分析的文章。





8. 零知识证明开源仓库及介绍

下面介绍几个热度比较高的零知识证明实现仓库及其源码分析文章,很多的零知识项目都是基于这几个仓库的代码做的。


9. 零知识证明相关论文

下面介绍一下零知识证明相关的学术论文,深入学习零知识证明研究成果的小伙伴可以去阅读以下的这些论文。

推荐值:❤️❤️❤️

难度值:⭐️⭐️⭐️⭐️⭐️

  1. Gro09 提出了一种证明“向量内积”的方法:
    原文链接:link.springer.com/chapt
  2. BCC+16 找到了一种将算数电路编码为向量的方法,从而把电路可满足性的证明转化为向量内积的证明:
    原文链接:eprint.iacr.org/2016/26
  3. BulletProof继续改进了这种方案:
    原文链接:eprint.iacr.org/2017/10
  • zkSNARKs with trusted setup
  1. Groth10 引入了preprocessing的步骤,通过可信第三方生成Common Reference String来实现无交互证明:
    原文链接:link.springer.com/chapt
  2. GGPR13 引入了另一种算数电路编码方式,即Quadratic Arithmetic Program(QAP),大大提升了证明的效率:
    原文链接:eprint.iacr.org/2012/21
  3. PinocchioGroth16 等是在此基础上的改进:
    原文链接:eprint.iacr.org/2013/27
    原文链接:eprint.iacr.org/2016/26

10. 零知识证明学习资料推荐网站




参考文献

[1] isi.jhu.edu/~mgreen/

[2] benthamsgaze.org/about

[3] zhuanlan.zhihu.com/p/31

[4] link.springer.com/chapt

[5] github.com/matter-labs/

[6] zkp.science/

[7] zhuanlan.zhihu.com/p/89

编辑于 2019-11-07

文章被以下专栏收录