Skip to content

Latest commit

 

History

History
43 lines (25 loc) · 3.25 KB

零基础学零知识证明.md

File metadata and controls

43 lines (25 loc) · 3.25 KB

近期有小伙伴咨询零知识证明入门问题,现就本人(非密码学专业小白) 学习零知识证明 进行小总结:

  • 关于数论和椭圆曲线基础知识:可以看《Elliptic Curves Number Theory and Cryptography(second edition)》,有助于扫盲。

  • 实用的数学软件:sageMath(开源免费)、Magma(需授权),但是Magma提供了在线版本供免费使用:Magma Calculator

  • 关于同态算法:所谓同态算法,是指基于密文的运算可反应明文的真实关系,常用于零知识证明的验证环节。如$e(g^x,g^y)=e(g,g^{xy})$具有乘法同态属性,$g^x\cdot g^y=g^{x+y}$具有加法同态属性。

  • 关于pairing:pairing具有同态乘法属性,pairing算法可分为eta pairing、ate pairing、Weil pairing、Tate pairing等等,具体的pairing算法基础,可参看 Craig Costello的《Pairings for beginners》,内附Magma代码,直观好懂。

  • 关于commitment:可以参看《From Zero (Knowledge) to Bulletproof》,理解椭圆曲线下的pedersen commitment 具有 加法同态属性。也可参看本人博客 椭圆曲线形式下的Pedersen commitment——vector commitment和polynomial commitment

  • 关于group:通常接触的group有:pairing-friendly group、unknown order group、known order group等。

  • 关于密码学假设:密码学假设是指某个数学难题,假设其很难解决,常见的数学难题有 discrete logarithm problem、factoring、pairing、lattice等等。可参见 2013年报告《Final Report on Main Computational Assumptions in Cryptography》,也可参见本人博客 主流的密码学 hardness/computational 假设

  • 关于编程语言:github上 C++、Rust、Go、Python、Haskell等相应的实现都不少,最新的一些论文算法实现很多都是基于Rust的。Rust为系统安全的静态语言,如果有志于当coder,值得学习。

  • 零知识证明资料库:Awesome zero knowledge proofs (zkp) 中包含了当前各种主流的零知识证明算法,可选择感兴趣的方向深入了解。

  • 零知识证明中的角色:

Prover:知道秘密的那个人。

Verifier:不知道秘密,但是想要求证Prover是否真的知道该秘密。

举个例子:

-- public instance:$y,g$(Verifier和Prover都知道)

-- witness:$x$ (仅Prover知道)

-- relation:$y=g^x$(Verifier想求证的关系 或 Prover想证明的关系)

经典的证明方式为利用 sigma protocol(核心思想为commit-and-prove),详细可参看本人博客 基于Sigma protocol实现的零知识证明protocol集锦

  • 零知识证明的应用: 如隐藏区块链中的交易金额、交易对手方等(Monero/Zcash); 压缩存储空间(如Filecoin); 多方安全计算; 算力外包; 黑名单、白名单访问控制; 隐私计算等等。