零基础 学 零知识证实

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

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

  • 实用的数学软件: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,值得学习。spa

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

  • 零知识证实中的角色:
    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); 多方安全计算; 算力外包; 黑名单、白名单访问控制; 隐私计算等等。

相关文章
相关标签/搜索