近期有小伙伴咨詢零知識證明入門問題,現就本人(非密碼學專業小白) 學習零知識證明 進行小總結:
-
關于數論和橢圓曲線基礎知識:可以看《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} gx?gy=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);
多方安全計算;
算力外包;
黑名單、白名單訪問控制;
隱私計算等等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/241896.html
標籤:區塊鏈
下一篇:微信小程式
