零知識證明學習資源彙總

本文將繼續會持續進行更新,更新後的版本將在 Github 和知乎上發佈,歡迎關注。

Github 地址:https://github.com/sec-bit/learning-zkp/blob/master/zkp-resource-list.md

知乎賬號:安比實驗室 SECBIT(https://www.zhihu.com/org/secbit/activities


零知識證明技術是現代密碼學三大基礎之一,由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世紀 80 年代初提出。早期的零知識證明由於其效率和可用性等限制,未得到很好的利用,僅停留在理論層面。直到近年來,零知識證明的理論研究纔開始不斷突破,同時區塊鏈也爲零知識證明創造了大展拳腳的機會,因而走進大衆視野。

零知識證明這項“黑科技”隨着它的熱度逐漸增加,相關的學習資源也慢慢豐富起來了。但是由於,一方面零知識證明背後的原理頗爲複雜,且內容繁多;另一方面,針對零知識證明的學習資源質量參差不齊,尚未形成系統。因此對絕大多數讀者來說,學習零知識證明的難度依然很大。

本文收集了關於零知識證明的一些學習資料(包括科普文章,論文,開源倉庫及相關學習網站等),並對這些資源進行了整理分析,希望能對大家有所幫助。

由於整理時間有限和筆者自身知識的侷限性,文章存在不足之處,歡迎糾正、補充和探討。

1. 故事中零知識證明

初次接觸零知識證明的小夥伴一定會問,究竟什麼是零知識證明呢?它到底在做什麼?

推薦幾篇適合小白的文章:

興許是因爲如何解釋零知識證明的問題並不簡單,所以絕大部分入門級的科普文章都是從講故事開始的。

 

2. 深入理解零知識證明

零知識證明技術涉及的知識點繁多,性質也各不相同。瞭解了什麼是零知識證明以後,就需要對零知識證明更深刻的理解,推薦以下幾篇零知識證明系列科普文。

零知識證明涉及很多很有意思的思想和原理,都很值得探討。在此不得不感嘆於數學與密碼學的精妙之處,也不得不欽佩密碼學家們的厲害。

3. 零知識證明的發展

零知識證明的研究今年來一直有新的進展,密碼學家們提出了各種不同的協議,推薦兩篇文章介紹零知識證明研究的發展過程。

零知識證明迄今爲止發展了三十多年,早期一直停留在理論層面,直到近十年才逐漸取得突破。隨着越來越多研究人員的進場,相信這個領域未來還會有更多令人驚喜的成果。

4. zk-SNARKs 原理

作爲零知識證明領域最知名的一類協議,zk-SNARKs 的理論研究和應用也最爲廣泛。推薦一些介紹 zk-SNARKs 的資料。

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

    推薦值:❤️❤️❤️❤️

    難度值:⭐️⭐️⭐️⭐️

    V 神的這幾篇文章應該算得上是流傳最爲廣泛的 zk-SNARK 科普文了。不用多說,推薦閱讀。

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

    推薦值:❤️❤️❤️❤️

    難度值:⭐️⭐️⭐️⭐️

    這個系列的文章來自 zCash 官方博客。首先介紹了零知識的基本概念以及其應用到 zcash 中的大致思路。隨後 7 篇文章分別對 7 個關鍵點進行了詳細介紹(同態隱藏,多項式盲驗證,KCA,完整的多項式盲驗證,計算到多項式的轉換,匹諾曹協議以及橢圓曲線配對),推薦給想深入瞭解 zk-SNARKs 實現原理的小夥伴。

    原文鏈接:

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

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

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

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

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

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

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

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

    9. 中文翻譯版本鏈接:https://www.jianshu.com/p/b6a14c472cc1https://www.jianshu.com/p/92f54fc08d58

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

    推薦值:❤️❤️❤️❤️❤️

    難度值:⭐️⭐️⭐️

    作者將其學習 zk-SNARK 的經驗總結成了一份 PDF 文檔並分成 8 篇文章發佈到了 Medium 上。與大部分的 zk-SNARK 科普文不同,這個系列的文章沒有直接開始講 zk-SNARK,而是從最基本的數學原理講起,講解得非常細緻,特別適合數學和密碼學基礎相對薄弱的小夥伴。

    原文鏈接:

    1. PDF 完整版:https://arxiv.org/pdf/1906.07221.pdf

    2. Why 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-d946e931160

    3. Why 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-f817760e2805

    4. Why 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-c0310c0e5d1c

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

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

    7. Why and How zk-SNARK Works 6: Verifiable Computation Protocol:https://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:https://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:https://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 的實現,最後分析了將零知識證明結合到以太坊上的作用和方式。

    原文鏈接:https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

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

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

    推薦值:❤️❤️❤️

    難度值:⭐️⭐️⭐️

    作者堅持一個觀點:學習新技能的一個很好的方法是用它建立一些東西。這篇文章就是在介紹作者是如何通過實現一個小的應用來學習 zk-SNARKs 的。文章主要介紹了作者的實現過程和他的思考,文中有很多好的經驗時候大家學習。

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

  • 「推薦文章十八」零知識證明 - 從QSP到QAP

    推薦值:❤️❤️❤️

    難度值:⭐️⭐️⭐️

    這篇文章主要介紹了 QSP/QAP ,QAP 和 QSP 問題類似。QAP 問題的zkSNARK 的證明驗證過程和 QSP 非常相似。對這部分感興趣的小夥伴推薦讀一讀。

    原文鏈接:https://mp.weixin.qq.com/s/eU8mp81VhpV-g1x89-uZYA

"零知識證明技術就像一個江湖,而 zk-SNARKs 是隻是比較著名的門派。而在這個江湖中,還有很多其他的門派,他們風格各異,使用的武器也不盡相同。"[3] zk-SNARKs 協議涉及的技術構件很多,也較爲複雜,深入學習這部分確實需要下很多功夫。

5. 零知識證明協議

零知識證明協議很多,每個協議的實現也各不相同,有些協議已經應用到了實際的領域,有些還在探索中。推薦幾篇介紹不錯的文章。

對於零知識證明各個協議介紹的文章還比較有限,隨着應用的增多,相信這方面的文章也會越來越多。

6. 零知識證明在區塊鏈領域的應用

零知識證明技術是隨着區塊鏈的發展逐漸走入大衆視野的,目前零知識證明結合區塊鏈的研究和應用也越來越多。

零知識證明的應用正在逐步增加,從最早的公鏈 zCash,Monero,到最近基於以太坊平臺的 zkPoD, Loopring DEX 3.0應用等,零知識證明在區塊鏈領域的應用將越來越多。

7. 零知識證明相關的技術和漏洞分析文章

零知識證明技術涉及的知識內容很多,在實際的應用場景中,零知識證明的實現還存在諸多的挑戰,協議安全,性能等等問題都有可能限制其發展。這一節推薦一些技術分析和漏洞分析的文章。

 

8. 零知識證明開源倉庫及介紹

下面介紹幾個熱度比較高的零知識證明實現倉庫及其源碼分析文章,很多的零知識項目都是基於這幾個倉庫的代碼做的。

9. 零知識證明相關論文

下面介紹一下零知識證明相關的學術論文,深入學習零知識證明研究成果的小夥伴可以去閱讀以下的這些論文。

推薦值:❤️❤️❤️

難度值:⭐️⭐️⭐️⭐️⭐️

  1. 1985 年,零知識證明技術首次被提出

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

  2. BulletProof

    1. Gro09 提出了一種證明“向量內積”的方法:

      原文鏈接:https://link.springer.com/chapter/10.1007/978-3-642-03356-8_12

    2. BCC+16 找到了一種將算數電路編碼爲向量的方法,從而把電路可滿足性的證明轉化爲向量內積的證明:

      原文鏈接:https://eprint.iacr.org/2016/263

    3. BulletProof繼續改進了這種方案:

      原文鏈接:https://eprint.iacr.org/2017/1066

  3. zkSNARKs with trusted setup

    1. Groth10 引入了preprocessing的步驟,通過可信第三方生成Common Reference String來實現無交互證明:

      原文鏈接:https://link.springer.com/chapter/10.1007/978-3-642-17373-8_19

    2. GGPR13 引入了另一種算數電路編碼方式,即Quadratic Arithmetic Program(QAP),大大提升了證明的效率:

      原文鏈接:https://eprint.iacr.org/2012/215

    3. PinocchioGroth16 等是在此基礎上的改進:

      原文鏈接:https://eprint.iacr.org/2013/279

      原文鏈接:https://eprint.iacr.org/2016/260

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

    原文鏈接:https://acmccs.github.io/papers/p2087-amesA.pdf

  5. PLONK:

    原文鏈接:https://eprint.iacr.org/2019/953

  6. Marlin

    原文鏈接:https://eprint.iacr.org/2019/1047.pdf

  7. Sonic

    原文鏈接:https://eprint.iacr.org/2019/099

  8. Libra

    原文鏈接:https://eprint.iacr.org/2019/317

  9. Hyrax

    原文鏈接:https://eprint.iacr.org/2017/1132.pdf

  10. zk-STARKs

    原文鏈接:https://eprint.iacr.org/2018/046

10. 零知識證明學習資料推薦網站

參考文獻

[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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章