零基础 学 零知识证明

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

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

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

  • 关于同态算法:所谓同态算法,是指基于密文的运算可反应明文的真实关系,常用于零知识证明的验证环节。如 e ( g x , g y ) = e ( g , g x y ) e(g^x,g^y)=e(g,g^{xy}) e(gx,gy)=e(g,gxy)具有乘法同态属性, g x ⋅ g y = g x + y g^x\cdot g^y=g^{x+y} gxgy=gx+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 y,g y,g(Verifier和Prover都知道)
    – witness: x x x (仅Prover知道)
    – relation: y = g x y=g^x y=gx(Verifier想求证的关系 或 Prover想证明的关系)
    经典的证明方式为利用 sigma protocol(核心思想为commit-and-prove),详细可参看本人博客 基于Sigma protocol实现的零知识证明protocol集锦

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

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/111832679