零知识证明学习资料汇总

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

零知识证明技术是现代密码学三大基础之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出。早期的零知识证明由于其效率和可用性等限制,未得到很好的利用,仅停留在理论层面。直到近年来,零知识证明的理论研究才开始不断突破,同时区块链也为零知识证明创造了大展拳脚的机会,因而走进大众视野。
零知识证明这项“黑科技”随着它的热度逐渐增加,相关的学习资源也慢慢丰富起来了。但是由于,一方面零知识证明背后的原理颇为复杂,且内容繁多;另一方面,针对零知识证明的学习资源质量参差不齐,尚未形成系统。因此对绝大多数读者来说,学习零知识证明的难度依然很大。

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

1. 故事中的零知识证明

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

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

  • 「推荐文章一」一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)

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

    难度值:⭐️

    这篇文章的作者是著名的 Ghost 和 Spectre 这两个协议的创始团队的领队 Aviv Zohar。文章非常接地气且通俗易懂,通过三个好朋友一起玩数独游戏的故事介绍了什么是零知识证明。

    另外这篇文章中引用了两篇介绍零知识证明的论文,也值得看一看。

    原文:The Incredible Machine

  • 「推荐文章二」How to explain zero-knowledge protocols to your children

    推荐值:❤️❤️❤️

    难度值:⭐️

    这篇来自上个世纪的文章,正如它的标题一样,作者以给孩子讲故事的口吻,讲了一个阿里巴巴与四十大盗的故事,这个故事后来也成为了介绍零知识证明的经典故事。以故事的形式讲述零知识证明使得这篇文章理解起来也很简单。

  • 「推荐文章三」Cryptographic and Physical Zero-Knowledge Proof Systems for Solutions of Sudoku Puzzles

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    如何在不泄漏任何信息的前提下向别人证明你有一个数独问题的答案呢?同样这个问题也是介绍零知识证明的经典案例。论文中提出了使用一个零知识证明协议解决这个问题的方案,这篇论文相比较于前两篇文章,理论性更强一些,篇幅更长,协议的介绍更为详细,但总体来说还算比较好理解。

  • 「推荐文章四」Zero knowledge proofs: a tale of two friends

    推荐值:❤️❤️

    难度值:⭐️⭐️

    与前面几篇文章类似,这篇文章也是通过讲故事的形式来向读者介绍零知识证明的。文中 Prover 要向 Verifier 证明其知道魔法的解法。这篇文章篇幅较短,内容理解起来难度较小。

  • 「推荐文章五」Explain Like I’m 5: Zero Knowledge Proof (Halloween Edition)

    推荐值:❤️❤️

    难度值:⭐️⭐️

    这同样是一篇讲故事的文章,哈哈~

    这篇文章讲述了一个糖果和百万富翁的故事(Candy bars and millionaires),文章同样篇幅较短,内容理解起来难度较小。

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

2. 深入理解零知识证明

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

  • 「推荐文章六」零知识证明: 抛砖引玉

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

    难度值:⭐️⭐️⭐️

    作者是 Zerocash 协议的创建者之一,密码学大神 Matthew Green[1]。这两篇文章几乎涵盖了学习零知识证明原理所有的基本概念,文章思路很清晰。

  • 「推荐文章七」安比实验室零知识证明介绍系列文章

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

    难度值:⭐️⭐️⭐️

    这个系列的作者是安比实验室创始人郭宇,文章与以往的零知识证明科普文章的不同之处就是它没有单独去讲解零知识的基本原理。而且结合更多的概念和原理,更透彻得将零知识证明技术涉及得诸多原理逐一进行讲解,文章专业性较强,还包含了作者大量的思考,但理解起来也较为直观易懂,非常适合想要深入理解零知识证明的小伙伴。

    另外这个系列的文章还在持续更新中。

  • 「推荐文章八」零知识证明:一个略微严肃的科普

    推荐值:❤️❤️❤️

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

    邓老师这篇“略微严肃”的科普,主要涉及两部分:1. 交互式证明的巨大威力;2. 零知识证明的定义和那些广泛流传的错误的例子

  • 「推荐文章九」Zero-Knowledge Proofs: A Layman’s Introduction

    推荐值:❤️❤️

    难度值:⭐️⭐️

    这篇文章首先介绍了零知识证明协议中的三个参与者(Creator,Prover,Verifier)以及 Proofs 和 Verification的概念,并对 zkSNARK (一类零知识证明协议)和椭圆曲线的相关资料进行了介绍。

  • 「推荐文章十」白话零知识证明(一)

    推荐值:❤️❤️

    难度值:⭐️⭐️

    这篇来自秘猿科技的文章通过阿里巴巴的故事引出了零知识证明的一些概念,并对其进行了介绍。

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

3. 零知识证明的发展

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

  • 「推荐文章十一」区块链学习笔记 (1):零知识证明的江湖

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️

    这篇文章讲了自 1895 年提出以来,零知识证明理论研究的发展过程,以及 zk-SNARKs 与零知识证明技术结合起来的发展过程。推荐给想了解零知识理论研究的发展过程的小伙伴。

  • 「推荐文章十二」Efficient Cryptographic Arguments and Proofs – Or How I Became a Fractional Monetary Unit

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️

    这篇文章来自UCL信息安全研究人员的博客 Bentham’s Gaze[2],文章介绍了自零知识证明提出以来,这群研究人员在理论研究上的研究历程及成果,包括知名的 bulletProof 和 zk-STARK 等。读完这篇文章相信会对大家深入理解零知识证明的诸多协议有所帮助。

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

4. zk-SNARKs 原理

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

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

5. 零知识证明协议

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

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

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

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

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

  1. STARKs, Part I: Proofs with Polynomials

    中文翻译版本:STARKs, Part I: 多项式证明

  2. STARKs, Part II: Thank Goodness It’s FRI-day

    中文翻译版本:STARKs, Part II

  3. STARKs, Part 3: Into the Weeds

    中文翻译版本:STARKs,Part-3:攻坚(上)

    中文翻译版本:STARKs,Part-3:攻坚(下)

  • 「推荐文章二十」 Understanding PLONK

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

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

    这篇文章同样来自 V 神的博客,介绍了 PLONK 的工作原理。PLONK 是一种全新的零知识证明系统,支持通用或可更新的可信设置(trusted setup),作者是 Filecoin 母公司 Protocol Labs 的研究员 Ariel Gabizon 和以太坊隐私交易协议 Aztec Protocol 的两名研究人员 Zachary J. Williamson、Oana Ciobotaru。

    中文翻译版本:Vitalik :理解新型通用零知识证明方案PLONK

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

    推荐值:❤️❤️

    难度值:⭐️⭐️⭐️

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

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

    推荐值:❤️❤️

    难度值:⭐️⭐️⭐️

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

    1. 零知识证明 - Groth16 算法介绍
    2. 零知识证明 - 有关 Groth16 的zk证明的理解

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

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

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

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

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

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

  • 「推荐文章三十二」 A Marlin is One of the Fastest SNARKs in the Ocean

    推荐值:❤️❤️❤️

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

    这篇文章来自于博客 Bentham’s Gaze,文章观点认为 Marlin 是最快的 SNARKs 方案,并将其与其它的方案进行了比较。

  • 「推荐文章三十三」How to do Zero-Knowledge from Discrete-Logs in under 7kB

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    这篇文章同样来自于博客 Bentham’s Gaze,文章介绍了Groth09 论文中的优化方案。

  • 「推荐文章三十四」zkSNARK 合约「输入假名」漏洞致众多混币项目爆雷

    推荐值:❤️❤️❤️

    难度值:⭐️⭐️⭐️

    这篇文章的作者是安比实验室 p0n1,文章介绍了大量零知识证明项目由于错误地使用了某个 zkSNARKs 合约库,引入「输入假名 (Input Aliasing) 」漏洞,可导致伪造证明、双花、重放等攻击行为发生,且攻击成本极低。

  • 「推荐文章三十五」硬核!360高级安全专家彭峙酿以Zcash为例,谈零知识性证明的安全和隐私问题

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

    难度值:⭐️⭐️⭐️

    这篇文章是对360高级安全专家彭峙酿博士在 CCF 会议上分享报告的整理。报告中介绍了比特币的隐私问题,零知识证明技术,zk-SNARKs,以及多个实现漏洞。报告干货满满。

  • 「推荐文章三十六」零知识证明中所涉及的有限域

    推荐值:❤️❤️❤️

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

    有限域的计算是实现零知识证明协议的一个非常重要的环境,这篇文章对零知识证明中所涉及导的有限域的知识进行了介绍,非常有用。

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

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

9. 零知识证明相关论文

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

推荐值:❤️❤️❤️

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

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

  • awesome-zero-knowledge-proofs

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

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

  • Zero-Knowledge Proofs

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

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

  • zkproof

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

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

  • benthamsgaze.org

    推荐值:❤️❤️❤️

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

参考文献

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

[2] https://www.benthamsgaze.org/about

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

[4] https://link.springer.com/chapter/10.1007/978-3-642-03356-8_12

[5] https://github.com/matter-labs/awesome-zero-knowledge-proofs

[6] https://zkp.science/

[7] https://zhuanlan.zhihu.com/p/89386868

本文来自安比实验室郭宇(原文在GitHub)。安比(SECBIT)实验室专注解决区块链生态中的安全问题,着眼于最前沿的科学理论,追求技术突破与卓越,致力于参与共建共识、可信、有序的区块链经济体。

深入浅出区块链 - 打造高质量区块链技术博客。

LBC-Team wechat
欢迎订阅公众号:深入浅出区块链技术
0%