零知识证明学习资源汇总

872 阅读21分钟

摘要:本文收集整理了关于零知识证明的一些学习资料,希望能对大家有所帮助。

本文将继续会持续进行更新,更新后的版本将在 Github 和知乎上发布,欢迎关注。

Github 地址:github.com/sec-bit/lea…

知乎账号:安比实验室 SECBIT(www.zhihu.com/org/secbit/…

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

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

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

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

1. 故事中零知识证明

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

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

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

2. 深入理解零知识证明

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

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

3. 零知识证明的发展

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

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

4. zk-SNARKs 原理

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

  • 「推荐文章十三」V 神的 zk-SNARKs 科普文章

    推荐值:❤️❤️❤️❤️

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

    V 神的这几篇文章应该算得上是流传最为广泛的 zk-SNARK 科普文了。不用多说,推荐阅读。

    • Quadratic Arithmetic Programs: from Zero to Hero

      这篇文章详细介绍了 zk-SNARKs 的实现过程。文中将 zk-SNARKs 的实现分为以下几个步骤:

      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/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649

    • Exploring Elliptic Curve Pairings

      这篇文章介绍了椭圆曲线配对。

      原文链接:medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627

    • Zk-SNARKs: Under the Hood

      这篇文章主要介绍了匹诺曹协议。

      原文链接:medium.com/@VitalikButerin/zk-snarks-under-the-hood-b33151a013f6

  • 「推荐文章十四」zcash 官方科普文

    推荐值:❤️❤️❤️❤️

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

    这个系列的文章来自 zCash 官方博客。首先介绍了零知识的基本概念以及其应用到 zcash 中的大致思路。随后 7 篇文章分别对 7 个关键点进行了详细介绍(同态隐藏,多项式盲验证,KCA,完整的多项式盲验证,计算到多项式的转换,匹诺曹协议以及椭圆曲线配对),推荐给想深入了解 zk-SNARKs 实现原理的小伙伴。

    原文链接:

    1. What are zk-SNARKs?:z.cash/technology/…/

    2. Explaining SNARKs Part I: Homomorphic Hidings electriccoin.co/blog/snark-…/

    3. Explaining SNARKs Part II: Blind Evaluation of Polynomials electriccoin.co/blog/snark-…/

    4. Explaining SNARKs Part III: The Knowledge of Coefficient Test and Assumption electriccoin.co/blog/snark-…/

    5. Explaining SNARKs Part IV: How to make Blind Evaluation of Polynomials Verifiable electriccoin.co/blog/snark-…/

    6. Explaining SNARKs Part V: From Computations to Polynomials electriccoin.co/blog/snark-…/

    7. Explaining SNARKs Part VI: The Pinocchio Protocol electriccoin.co/blog/snark-…/

    8. Explaining SNARKs Part VII: Pairings of Elliptic Curves](electriccoin.co/blog/snark-…/

    9. 中文翻译版本链接:www.jianshu.com/p/b6a14c472…www.jianshu.com/p/92f54fc08…

  • 「推荐文章十五」Why and How zk-SNARK Works

    推荐值:❤️❤️❤️❤️❤️

    难度值:⭐️⭐️⭐️

    作者将其学习 zk-SNARK 的经验总结成了一份 PDF 文档并分成 8 篇文章发布到了 Medium 上。与大部分的 zk-SNARK 科普文不同,这个系列的文章没有直接开始讲 zk-SNARK,而是从最基本的数学原理讲起,讲解得非常细致,特别适合数学和密码学基础相对薄弱的小伙伴。

    原文链接:

    1. PDF 完整版:arxiv.org/pdf/1906.07…

    2. Why and How zk-SNARK Works 1: Introduction & the Medium of a Proof:medium.com/@imolfar/why-and-how-zk-snark-works-1-introduction-the-medium-of-a-proof-d946e931160

    3. Why and How zk-SNARK Works 2: Proving Knowledge of a Polynomial:medium.com/@imolfar/why-and-how-zk-snark-works-2-proving-knowledge-of-a-polynomial-f817760e2805

    4. Why and How zk-SNARK Works 3: Non-interactivity & Distributed Setup:medium.com/@imolfar/why-and-how-zk-snark-works-3-non-interactivity-distributed-setup-c0310c0e5d1c

    5. Why and How zk-SNARK Works 4: General-Purpose Computation:medium.com/@imolfar/why-and-how-zk-snark-works-4-general-purpose-computation-dcdc8081ee42

    6. Why and How zk-SNARK Works 5: Variable Polynomials:medium.com/@imolfar/why-and-how-zk-snark-works-5-variable-polynomials-3b4e06859e30

    7. Why and How zk-SNARK Works 6: Verifiable Computation Protocol:medium.com/@imolfar/why-and-how-zk-snark-works-6-verifiable-computation-protocol-1aa19f95a5cc

    8. Why and How zk-SNARK Works 7: Constraints and Public Inputs:medium.com/@imolfar/why-and-how-zk-snark-works-7-constraints-and-public-inputs-e95f6596dd1c

    9. Why and How zk-SNARK Works 8: Zero-Knowledge Computation:medium.com/@imolfar/why-and-how-zk-snark-works-8-zero-knowledge-computation-f120339c2c55

  • 「推荐文章十六」 zkSNARKs in a nutshell

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    这篇文章对零知识证明做了总结,分成四个部分:

    1. 编码成一个多项式问题

    2. 简单随机抽样

    3. 同态(Homomorphic)编码 / 加密

    4. 零知识

    文章首先介绍了零知识证明,然后又讲解了zk-SNARKs 的实现,最后分析了将零知识证明结合到以太坊上的作用和方式。

    原文链接:blog.ethereum.org/2016/12/05/…/

    中文翻译版本:zhuanlan.zhihu.com/p/31780893

  • 「推荐文章十七」Zero-knowledge proofs, a board game, and leaky abstractions: how I learned zk-SNARKs from scratch

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    作者坚持一个观点:学习新技能的一个很好的方法是用它建立一些东西。这篇文章就是在介绍作者是如何通过实现一个小的应用来学习 zk-SNARKs 的。文章主要介绍了作者的实现过程和他的思考,文中有很多好的经验时候大家学习。

    原文链接:medium.com/@weijiek/how-i-learned-zk-snarks-from-scratch-177a01c5514e

  • 「推荐文章十八」零知识证明 - 从QSP到QAP

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    这篇文章主要介绍了 QSP/QAP ,QAP 和 QSP 问题类似。QAP 问题的zkSNARK 的证明验证过程和 QSP 非常相似。对这部分感兴趣的小伙伴推荐读一读。

    原文链接:mp.weixin.qq.com/s/eU8mp81Vh…

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

5. 零知识证明协议

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

  • 「推荐文章十九」STARKs 科普

    推荐值:❤️❤️❤️❤️

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

    V 神的这个科普系列文章,非常详细得介绍了 STARKs 的实现,分成三个部分进行讲解。

    原文链接:

    1. STARKs, Part I: Proofs with Polynomials:vitalik.ca/general/201…

      中文翻译版本:ethfans.org/posts/stark…

    2. STARKs, Part II: Thank Goodness It's FRI-day:vitalik.ca/general/201…

      中文翻译版本:ethfans.org/posts/stark…

    3. STARKs, Part 3: Into the Weeds:vitalik.ca/general/201…)

      中文翻译版本: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/201…

    中文翻译版本:www.8btc.com/article/486…

  • 「推荐文章二十一」Groth09 笔记

    推荐值:❤️❤️

    难度值:⭐️⭐️⭐️

    这篇文章作者huyuguang,文中对 Groth09 论文[4]的内容进行了总结,对大家学习 Groth09 有所帮助。

    原文链接:github.com/huyuguang/z…

  • 「推荐文章二十二」 零知识证明 - Groth16 算法介绍

    推荐值:❤️❤️

    难度值:⭐️⭐️⭐️

    Star Li 的这两篇文章主要从工程应用理解的角度介绍了 Groth16 算法的证明和验证过程,推荐给学习 Groth16 算法的小伙伴。

    原文链接

    1. 零知识证明 - Groth16 算法介绍:mp.weixin.qq.com/s/SguBb5vyA…

    2. 零知识证明 - 有关 Groth16 的zk证明的理解:mp.weixin.qq.com/s/x1ggw3Vpl…

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

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

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

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

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

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

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

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

9. 零知识证明相关论文

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

推荐值:❤️❤️❤️

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

  1. 1985 年,零知识证明技术首次被提出

    原文链接:The Knowledge Complexity of Interactive Proof Systems

  2. BulletProof

    1. Gro09 提出了一种证明“向量内积”的方法:

      原文链接:link.springer.com/chapter/10.…

    2. BCC+16 找到了一种将算数电路编码为向量的方法,从而把电路可满足性的证明转化为向量内积的证明:

      原文链接:eprint.iacr.org/2016/263

    3. BulletProof继续改进了这种方案:

      原文链接:eprint.iacr.org/2017/1066

  3. zkSNARKs with trusted setup

    1. Groth10 引入了preprocessing的步骤,通过可信第三方生成Common Reference String来实现无交互证明:

      原文链接:link.springer.com/chapter/10.…

    2. GGPR13 引入了另一种算数电路编码方式,即Quadratic Arithmetic Program(QAP),大大提升了证明的效率:

      原文链接:eprint.iacr.org/2012/215

    3. PinocchioGroth16 等是在此基础上的改进:

      原文链接:eprint.iacr.org/2013/279

      原文链接:eprint.iacr.org/2016/260

  4. Ligero: Lightweight Sublinear Arguments Without a Trusted Setup:

    原文链接:acmccs.github.io/papers/p208…

  5. PLONK:

    原文链接:eprint.iacr.org/2019/953

  6. Marlin

    原文链接:eprint.iacr.org/2019/1047.p…

  7. Sonic

    原文链接:eprint.iacr.org/2019/099

  8. Libra

    原文链接:eprint.iacr.org/2019/317

  9. Hyrax

    原文链接:eprint.iacr.org/2017/1132.p…

  10. zk-STARKs

    原文链接:eprint.iacr.org/2018/046

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

  • awesome-zero-knowledge-proofs

    推荐值:❤️❤️❤️❤️

    这是一个 Github 仓库,收录了一系列零知识证明的学习资料

    链接:github.com/matter-labs…

  • Zero-Knowledge Proofs

    推荐值:❤️❤️❤️❤️

    这个网站也收录了一系列零知识证明的学习资料,相对来说学术性更强一些。

    链接:zkp.science

  • zkproof

    推荐值:❤️❤️❤️❤️

    ZKProof.org 是为规范零知识证明的使用而形成的一个组织,它的网站上有大量关于零知识证明的资料。

    链接:zkproof.org/

  • benthamsgaze.org

    推荐值:❤️❤️❤️

    这是一个来自UCL信息安全研究人员组成的团队的博客,它的博客上会经常发布一些零知识证明的文章。

    链接:www.benthamsgaze.org

参考文献

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

[2] www.benthamsgaze.org/about

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

[4] link.springer.com/chapter/10.…

[5] github.com/matter-labs…

[6] zkp.science/

[7] zhuanlan.zhihu.com/p/89386868?…