零知识证【zhèng】明技【jì】术【shù】是现代密码学三大基础之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提【tí】出。早【zǎo】期的零知【zhī】识证明【míng】由于其效率和可用性【xìng】等限制【zhì】,未【wèi】得到很好的利【lì】用,仅【jǐn】停留在理论【lùn】层面。直到近年来,零知识证明的理论【lùn】研究才开始不断突破,同时区块【kuài】链也为零知识证明创造了大展【zhǎn】拳脚【jiǎo】的机会,因而走【zǒu】进大【dà】众【zhòng】视【shì】野。
零知【zhī】识证明【míng】这项“黑科技【jì】”随着它【tā】的热【rè】度逐【zhú】渐增加,相关【guān】的学习【xí】资【zī】源也【yě】慢慢丰【fēng】富起来了。但是由【yóu】于,一方面零知识证明背后的原理颇为复杂,且内【nèi】容繁多;另一方面,针对零【líng】知识证明的学习【xí】资源质量参差不齐,尚未形成系【xì】统。因此对绝大多【duō】数读者来说,学习零知【zhī】识证明的难度【dù】依然很大。
本文【wén】收集了【le】关【guān】于【yú】零知识【shí】证明的一些学习资料(包括科普文【wén】章,论文,开源仓库及相关学【xué】习网站等),并【bìng】对这些资源进行了整【zhěng】理分析,希【xī】望能对大家有所帮助。
由于整【zhěng】理时间【jiān】有限和笔者自【zì】身知识【shí】的局【jú】限性,文【wén】章存在不【bú】足之处,欢迎纠正、补充和探讨。
1、故事中的零知识证明
初次接触零【líng】知识【shí】证【zhèng】明的小伙【huǒ】伴一【yī】定会问,究竟什么是零知识证明【míng】呢?它【tā】到底在做什么?
推荐几篇适合小白的文章:
「推荐文章一」一个数【shù】独【dú】引发的惨案:零【líng】知识【shí】证明(Zero-Knowledge Proof)推荐【jiàn】值:❤️❤️❤️❤️❤️难【nán】度值:⭐️这篇文章的作者是著名的 Ghost 和 Spectre 这两个【gè】协议的【de】创始团队的领队 Aviv Zohar。文章【zhāng】非常接地气且通【tōng】俗易懂【dǒng】,通过三【sān】个好朋友一起【qǐ】玩数独游戏的故事介绍了什么是零【líng】知识证明【míng】。原文链接【jiē】:https://medium.com/qed-it/the-incredible-machine-4d1270d7363a中【zhōng】文翻译:https://zhuanlan.zhihu.com/p/34072069另外这篇文章中引用了【le】两篇【piān】介【jiè】绍零知识证明的论文,也值得看一看。「推【tuī】荐文章【zhāng】二」How to explain zero-knowledge protocols to your children推荐【jiàn】值:❤️❤️❤️难度值:⭐️这篇来自上个【gè】世纪的文章【zhāng】,正如它的标题一样【yàng】,作【zuò】者以给孩子讲故事的口【kǒu】吻,讲了一【yī】个阿里巴巴与四【sì】十大【dà】盗【dào】的故事,这个【gè】故事后来也成为了介【jiè】绍零【líng】知识证明的经典故事。以故事的形式【shì】讲述【shù】零知识证明使【shǐ】得这篇文章理解起来也很【hěn】简单。原文【wén】链【liàn】接:http://pages.cs.wisc.edu/~mkowalcz/628.pdf「推【tuī】荐文章三」Cryptographic and Physical Zero-Knowledge Proof Systems for Solutions of Sudoku Puzzles推荐值:❤️❤️❤️难度值:⭐️⭐️⭐️如何【hé】在不泄【xiè】漏任何信息的前提【tí】下向别【bié】人【rén】证明你有一个【gè】数独问题的【de】答【dá】案呢?同样这个问题【tí】也【yě】是介绍零知识【shí】证明的经典案例。论文中提出了使用一个【gè】零【líng】知【zhī】识证明协议解【jiě】决这个【gè】问题的方案,这【zhè】篇论文【wén】相比【bǐ】较于前两篇文章【zhāng】,理论性更强一些,篇幅更长【zhǎng】,协议的介绍更为【wéi】详【xiáng】细,但总【zǒng】体来说【shuō】还算比较好理解。原【yuán】文链接:http://www.wisdom.weizmann.ac.il/~naor/PAPERS/sudoku.pdf「推荐文章四【sì】」Zero knowledge proofs: a tale of two friends推荐值:❤️❤️难度【dù】值:⭐️⭐️与前面几篇【piān】文【wén】章类似,这篇【piān】文章也是通过讲故事的形式来向读者介绍【shào】零知识【shí】证明的。文中 Prover 要向 Verifier 证明其【qí】知道魔法【fǎ】的解法。这篇文章【zhāng】篇幅较短,内容理解【jiě】起来【lái】难度较小。原【yuán】文链接:https://medium.com/hackernoon/zero-knowledge-proofs-a-tale-of-two-friends-d7a0ffac3185「推荐【jiàn】文章五」Explain Like I’m 5: Zero Knowledge Proof (Halloween Edition)推【tuī】荐值:❤️❤️难度值【zhí】:⭐️⭐️这同样是一篇【piān】讲故事的文【wén】章,哈哈~这篇文章【zhāng】讲述了一个糖果和百万富翁【wēng】的故事【shì】(Candy bars and millionaires),文【wén】章同【tóng】样【yàng】篇幅较短,内容【róng】理解起来难【nán】度较小【xiǎo】。原文【wén】链接:https://medium.com/hackernoon/eli5-zero-knowledge-proof-78a276db9eff兴许是因【yīn】为如何【hé】解释零【líng】知【zhī】识证明的【de】问题并不简单,所以绝大部分【fèn】入【rù】门级的科普【pǔ】文章都是【shì】从讲故事开始的。
2、深入理解零知识证明
零知识证明技术【shù】涉及的知识点繁多【duō】,性【xìng】质也各不相同。了解了什么【me】是零知识证明以【yǐ】后【hòu】,就需要对【duì】零知识证明更深刻的理【lǐ】解,推【tuī】荐以下几篇零知识【shí】证明系列科普【pǔ】文【wén】。
零知识证【zhèng】明涉【shè】及很【hěn】多【duō】很有意思的思想和原理,都很值得探讨。在【zài】此不得【dé】不感【gǎn】叹于【yú】数学与密码学的精妙之处,也【yě】不得不钦佩密码【mǎ】学家们的厉害【hài】。
3、零知识证明的发展
零【líng】知识证明【míng】的研究今年来一【yī】直【zhí】有【yǒu】新的进展,密码学家们提出了各种不同【tóng】的协议,推荐两篇文【wén】章介绍零知【zhī】识【shí】证明研究【jiū】的发展过【guò】程。
「推【tuī】荐文章十【shí】一」区块链学【xué】习笔记 (1):零知识证明【míng】的江湖推荐值:❤️❤️❤️难【nán】度值:⭐️⭐️这篇文章讲了自 1895 年提出以来,零知识【shí】证【zhèng】明理论研究【jiū】的发展过【guò】程,以及 zk-SNARKs 与零【líng】知识证明技术结合【hé】起【qǐ】来的发展过程。推荐【jiàn】给想了【le】解【jiě】零知【zhī】识理论研究【jiū】的发展过程的小伙伴。原文【wén】链接:https://zhuanlan.zhihu.com/p/31651393「推荐文章【zhāng】十二」Efficient Cryptographic Arguments and Proofs – Or How I Became a Fractional Monetary Unit推荐值:❤️❤️❤️难度值:⭐️⭐️这篇文章【zhāng】来【lái】自UCL信息安全研究【jiū】人员的【de】博客 Bentham’s Gaze[2],文章介绍了自零【líng】知识证【zhèng】明提出以来【lái】,这群研究人【rén】员在理论研究上【shàng】的研究【jiū】历程及成果【guǒ】,包括知名【míng】的 bulletProof 和 zk-STARK 等。读完【wán】这篇文章相信【xìn】会对【duì】大家深【shēn】入理解【jiě】零知【zhī】识证明的诸多协议【yì】有所帮助。原【yuán】文链接:https://www.benthamsgaze.org/2019/05/22/efficient-cryptographic-arguments-and-proofs-or-how-i-became-a-fractional-monetary-unit/零知识证明迄【qì】今为止发展【zhǎn】了三十多【duō】年,早期一直【zhí】停留【liú】在理【lǐ】论层面,直【zhí】到近【jìn】十年才逐渐取得【dé】突破。随着越来越多【duō】研究【jiū】人员的进场,相信这个领【lǐng】域未来还会【huì】有更多令人惊喜的成【chéng】果。
4、zk-SNARKs原理
作为零知识证明领域最【zuì】知名的一类协【xié】议【yì】,zk-SNARKs 的理【lǐ】论研究和【hé】应【yīng】用也【yě】最为广【guǎng】泛。推荐一些介绍 zk-SNARKs 的资料。
「推荐文章十三」V 神的【de】 zk-SNARKs 科普文章【zhāng】推【tuī】荐值:❤️❤️❤️❤️难【nán】度值:⭐️⭐️⭐️⭐️V 神的这几篇文章应该算【suàn】得【dé】上是流【liú】传最为广泛的 zk-SNARK 科【kē】普文了。不用多说【shuō】,推荐【jiàn】阅读。Quadratic Arithmetic Programs: from Zero to Hero这篇文章详细【xì】介绍【shào】了 zk-SNARKs 的实现过程。文中将 zk-SNARKs 的实现分为以下几个步骤:原文链接:https://medium.com/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649Exploring Elliptic Curve Pairings这篇文章介绍了椭圆【yuán】曲线配对。原文链【liàn】接:https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627Zk-SNARKs: Under the Hood这篇文【wén】章主要介绍了匹诺曹【cáo】协【xié】议。原文【wén】链接:https://medium.com/@VitalikButerin/zk-snarks-under-the-hood-b33151a013f6computational problem —> 电路电路 —> R1CSR1CS —> QAPQAP —> Linear PCPLinear PCP —> Linear Interactive ProofLinear Interactive Proof —> zkSNARK「推荐文章【zhāng】十【shí】四」zcash 官方【fāng】科普文推【tuī】荐【jiàn】值:❤️❤️❤️❤️难【nán】度值:⭐️⭐️⭐️⭐️这个系列【liè】的文章来自 zCash 官方博【bó】客。首先介绍【shào】了零知【zhī】识的基本概念以及其应【yīng】用到 zcash 中的大致思【sī】路。随【suí】后 7 篇文章分别对【duì】 7 个关键点进行了详细介绍(同态隐【yǐn】藏,多项【xiàng】式盲验证,KCA,完整的多项式盲验证,计算到多项式的转换,匹诺曹协议【yì】以及【jí】椭圆曲线【xiàn】配对),推荐给想【xiǎng】深入了解 zk-SNARKs 实现原理的小伙【huǒ】伴。原文链接:What are zk-SNARKs?:https://z.cash/technology/zksnarks/Explaining SNARKs Part I: Homomorphic Hidings https://electriccoin.co/blog/snark-explain/Explaining SNARKs Part II: Blind Evaluation of Polynomials https://electriccoin.co/blog/snark-explain2/Explaining SNARKs Part III: The Knowledge of Coefficient Test and Assumption https://electriccoin.co/blog/snark-explain3/Explaining SNARKs Part IV: How to make Blind Evaluation of Polynomials Verifiable https://electriccoin.co/blog/snark-explain4/Explaining SNARKs Part V: From Computations to Polynomials https://electriccoin.co/blog/snark-explain5/Explaining SNARKs Part VI: The Pinocchio Protocol https://electriccoin.co/blog/snark-explain6/Explaining SNARKs Part VII: Pairings of Elliptic Curves https://electriccoin.co/blog/snark-explain7/中文翻译版本链接【jiē】:https://www.jianshu.com/p/b6a14c472cc1、https://www.jianshu.com/p/92f54fc08d58「推【tuī】荐【jiàn】文章十【shí】五」Why and How zk-SNARK Works推荐值:❤️❤️❤️❤️❤️难度值:⭐️⭐️⭐️作者将其学习 zk-SNARK 的【de】经【jīng】验总结成【chéng】了一份【fèn】 PDF 文档并分成【chéng】 8 篇【piān】文章发布到了 Medium 上。与大部分的【de】 zk-SNARK 科普文不【bú】同,这个【gè】系列的【de】文章没有直接开始讲 zk-SNARK,而是从最基本的数学原理讲【jiǎng】起,讲解得非常细致,特别适合【hé】数学和密码学基础相【xiàng】对薄弱的小伙伴。原文链【liàn】接:PDF 完整【zhěng】版:https://arxiv.org/pdf/1906.07221.pdfWhy and How zk-SNARK Works 1: Introduction & the Medium of a Proof:https://medium.com/@imolfar/why-and-how-zk-snark-works-1-introduction-the-medium-of-a-proof-d946e931160Why and How zk-SNARK Works 2: Proving Knowledge of a Polynomial:https://medium.com/@imolfar/why-and-how-zk-snark-works-2-proving-knowledge-of-a-polynomial-f817760e2805Why and How zk-SNARK Works 3: Non-interactivity & Distributed Setup:https://medium.com/@imolfar/why-and-how-zk-snark-works-3-non-interactivity-distributed-setup-c0310c0e5d1cWhy and How zk-SNARK Works 4: General-Purpose Computation:https://medium.com/@imolfar/why-and-how-zk-snark-works-4-general-purpose-computation-dcdc8081ee42Why and How zk-SNARK Works 5: Variable Polynomials:https://medium.com/@imolfar/why-and-how-zk-snark-works-5-variable-polynomials-3b4e06859e30Why and How zk-SNARK Works 6: Verifiable Computation Protocol:https://medium.com/@imolfar/why-and-how-zk-snark-works-6-verifiable-computation-protocol-1aa19f95a5ccWhy and How zk-SNARK Works 7: Constraints and Public Inputs:https://medium.com/@imolfar/why-and-how-zk-snark-works-7-constraints-and-public-inputs-e95f6596dd1cWhy and How zk-SNARK Works 8: Zero-Knowledge Computation:https://medium.com/@imolfar/why-and-how-zk-snark-works-8-zero-knowledge-computation-f120339c2c55「推荐【jiàn】文章十六【liù】」 zkSNARKs in a nutshell推荐值:❤️❤️❤️难度【dù】值:⭐️⭐️⭐️这【zhè】篇【piān】文章对【duì】零知识证【zhèng】明做【zuò】了总【zǒng】结【jié】,分成四个部分:文【wén】章首先介绍了零知识证明,然后又讲【jiǎng】解了【le】zk-SNARKs 的实现,最后分析了将零知【zhī】识证【zhèng】明结【jié】合到以太坊上的作用和方式。原文链接:https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/中【zhōng】文【wén】翻译【yì】版本:https://zhuanlan.zhihu.com/p/31780893编码成一个【gè】多项式问题简单【dān】随机抽【chōu】样同态【tài】(Homomorphic)编码 / 加密零知【zhī】识「推荐【jiàn】文章【zhāng】十七」Zero-knowledge proofs, a board game, and leaky abstractions: how I learned zk-SNARKs from scratch推荐值:❤️❤️❤️难度值【zhí】:⭐️⭐️⭐️作【zuò】者坚持一个观点:学习【xí】新技【jì】能的【de】一【yī】个很好的方法【fǎ】是用它建立一些东西【xī】。这篇【piān】文章就是【shì】在【zài】介绍作者【zhě】是如何【hé】通过实现一个小【xiǎo】的应【yīng】用【yòng】来学【xué】习 zk-SNARKs 的【de】。文章【zhāng】主要介绍【shào】了作者的实现【xiàn】过程【chéng】和他的思考【kǎo】,文中有【yǒu】很多好【hǎo】的经验时候大家学习。原文链接:https://medium.com/@weijiek/how-i-learned-zk-snarks-from-scratch-177a01c5514e「推荐文章【zhāng】十八」零知识【shí】证明 - 从QSP到QAP推荐【jiàn】值:❤️❤️❤️难【nán】度值:⭐️⭐️⭐️这【zhè】篇文章主要介绍了 QSP/QAP ,QAP 和【hé】 QSP 问【wèn】题类似【sì】。QAP 问题的zkSNARK 的证明验证过程和【hé】 QSP 非【fēi】常相似。对这部分感兴趣的小伙【huǒ】伴推荐读一读。原文链接:https://mp.weixin.qq.com/s/eU8mp81VhpV-g1x89-uZYA"零知识【shí】证【zhèng】明【míng】技术就【jiù】像【xiàng】一个江【jiāng】湖,而【ér】 zk-SNARKs 是【shì】只是比较著名的【de】门派。而在这【zhè】个江湖中,还有很多其他的门派,他们【men】风格各异,使用的武器也不尽相同【tóng】。"[3] zk-SNARKs 协议涉及的技术【shù】构件很多,也较为复杂【zá】,深入学习这部分确实需要下很【hěn】多功夫。
5、零知识证明协议
零【líng】知识证【zhèng】明协议【yì】很多,每个协议的实现也各不相同,有些协议【yì】已经【jīng】应用【yòng】到了实际的领域,有些【xiē】还在探索中。推荐【jiàn】几篇介【jiè】绍不【bú】错的文章。
对【duì】于零知识证明各个协议【yì】介绍的文【wén】章还比较有【yǒu】限,随【suí】着应用的增多,相信这方面的文【wén】章也会越【yuè】来越多。
6、零知识证明在区块链领域的应用
零知识【shí】证【zhèng】明技【jì】术是随着区块链的发展逐渐走入【rù】大众【zhòng】视野的,目前零知识证【zhèng】明结【jié】合区块【kuài】链的研【yán】究和应用也越来越多。
零知【zhī】识【shí】证【zhèng】明的【de】应用正在逐步增加,从最早的公链 zCash,Monero,到【dào】最近【jìn】基于以太坊平【píng】台的 zkPoD, Loopring DEX 3.0应用等,零知识证明在区块链领域【yù】的应用将越【yuè】来越多。
7、零知识证明相关的技术和漏洞分析文章
零知【zhī】识证明【míng】技术【shù】涉及的【de】知识内容很多,在实际的应用场景中,零知识证明的实现还存【cún】在诸多的挑战,协议【yì】安全,性能【néng】等等问题都有可【kě】能限【xiàn】制其发【fā】展。这【zhè】一【yī】节推荐一些技术【shù】分析和漏洞分析的【de】文章。
8、零知识证明开源仓库及介绍
下面介绍几个【gè】热【rè】度比较高的【de】零知【zhī】识证明实现仓库及其【qí】源码【mǎ】分析文【wén】章,很多的零知【zhī】识项目都是基于这【zhè】几个仓库的代码做的。
libsnarklibsnark 是实现一个 C++ 版【bǎn】本的【de】零知【zhī】识【shí】证明库。仓【cāng】库链接:https://github.com/scipr-lab/libsnark「推荐文章三十七」零知识证明 - libsnark源代码分【fèn】析推荐值:❤️❤️❤️难度值【zhí】:⭐️⭐️⭐️原文链接【jiē】:https://mp.weixin.qq.com/s/UHqpfl6ImVwa4HtsiksqJA「推荐文章三十八」零知【zhī】识证【zhèng】明实【shí】战:libsnark推荐值:❤️❤️❤️难度值:⭐️⭐️⭐️原【yuán】文链接:https://zhuanlan.zhihu.com/p/46477111bellmanbellman是Zcash团队用Rust语言开发的一个zk-SNARK软件【jiàn】库,实现了Groth16 算法。仓【cāng】库链接:https://github.com/zkcrypto/bellman「推荐文【wén】章三【sān】十九【jiǔ】」零知识证【zhèng】明【míng】 - bellman源码【mǎ】分析推荐值:❤️❤️难度值:⭐️⭐️⭐️原【yuán】文【wén】链接:https://github.com/zcash/librustzcash/tree/master/bellmansnarkjslibsnark 是实现一【yī】个 javascript 版本的【de】零【líng】知【zhī】识证明库,实现了【le】 Groth16。仓库链接:https://github.com/iden3/snarkjs9、零知识证明相关学术论文
下【xià】面介绍一下零知识证【zhèng】明相关的学术【shù】论文【wén】,深入学【xué】习零知【zhī】识证明研究成果的小伙伴可以去【qù】阅读以下的【de】这些论文。
推荐值:❤️❤️❤️
难度值:⭐️⭐️⭐️⭐️⭐️
1985 年,零知识【shí】证明【míng】技术首次【cì】被【bèi】提出原文链【liàn】接:The Knowledge Complexity of Interactive Proof SystemsBulletProofGro09 提出了一种证明“向量【liàng】内积【jī】”的方法:原【yuán】文链接:https://link.springer.com/chapter/10.1007/978-3-642-03356-8_12BCC+16 找到了一种将算数电路编【biān】码为向量【liàng】的方【fāng】法,从而把电路可【kě】满足性的【de】证明转化【huà】为向量内积的证明:原文链接:https://eprint.iacr.org/2016/263BulletProof 继续改【gǎi】进了这种方案:原文链【liàn】接:https://eprint.iacr.org/2017/1066zkSNARKs with trusted setupGroth10 引【yǐn】入了【le】preprocessing的步骤,通过可信第三方生成Common Reference String来实现无【wú】交互【hù】证明:原文链接:https://link.springer.com/chapter/10.1007/978-3-642-17373-8_19GGPR13 引入了另一【yī】种算数【shù】电路编码方【fāng】式,即【jí】Quadratic Arithmetic Program(QAP),大【dà】大【dà】提【tí】升了证明【míng】的效【xiào】率:原【yuán】文链接:https://eprint.iacr.org/2012/215Pinocchio 和 Groth16 等【děng】是【shì】在此【cǐ】基础【chǔ】上的改进【jìn】:原文链接:https://eprint.iacr.org/2013/279原文链接:https://eprint.iacr.org/2016/260Ligero: Lightweight Sublinear Arguments Without a Trusted Setup原文链接:https://acmccs.github.io/papers/p2087-amesA.pdfPLONK原【yuán】文链接:https://eprint.iacr.org/2019/953Marlin原【yuán】文链接【jiē】:https://eprint.iacr.org/2019/1047.pdfSonic原文链接:https://eprint.iacr.org/2019/099Libra原文链接:https://eprint.iacr.org/2019/317Hyrax原文链接【jiē】:https://eprint.iacr.org/2017/1132.pdfzk-STARKs原文链接【jiē】:https://eprint.iacr.org/2018/04610、零知识证明推荐学习网站
awesome-zero-knowledge-proofs推【tuī】荐值:❤️❤️❤️❤️这【zhè】是一【yī】个【gè】 Github 仓库,收录了【le】一系列零知识证【zhèng】明的学习资料链接:https://github.com/matter-labs/awesome-zero-knowledge-proofsZero-Knowledge Proofs推荐值【zhí】:❤️❤️❤️❤️这个网站也收【shōu】录了一系列零【líng】知识证明的学习【xí】资料,相对来说学术性更强【qiáng】一【yī】些【xiē】。链接:https://zkp.sciencezkproof推荐值【zhí】:❤️❤️❤️❤️ZKProof.org 是为规范零知识证明的使用【yòng】而形成的一【yī】个【gè】组织,它的网【wǎng】站上有大量关于【yú】零知识证【zhèng】明的资料。链接:https://zkproof.org/benthamsgaze.org推荐值:❤️❤️❤️这【zhè】是一个来自UCL信息安全研究人员组成的【de】团【tuán】队的博客,它的博客【kè】上会【huì】经【jīng】常发布一些【xiē】零知识证明的【de】文章。链接【jiē】:https://www.benthamsgaze.org参考文献
[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?utm_source=wechat_session&utm_medium=social&utm_oi=26765481213952
来源:安比实验室
标签: #dnfsx3178