博文

目前显示的是 五月, 2021的博文

Marlin ZK-SNARK简易教程

Marlin ZK-SNARK Marlin是一个零知识简洁证明(Zero Knowledge Succinct Non Interactive Argument of Knowledge, ZK-SNARK)系统,它能够对满足 一阶限制系统 (Rank One Constraint System,R1CS)条件的表达进行零知识证明. R1CS是指满足以下条件的变量: < A , W > ⋅ < B , W > = < C , W > <A, W>\cdot <B, W> = <C, W> < A , W > ⋅ < B , W >=< C , W > 其中 W W W 为 变量向量 (variable vector)其包括隐私变量(witness)和公共变量(public input). < ⋅ , ⋅ > <\cdot,\cdot> < ⋅ , ⋅ > 表示两个向量之间的内积. A , B , C A,B,C A , B , C 表示 W W W 中变量对应的线性组合系数. ZK-SNARK的目的就是在 保护隐私变量 的情况下,仅使用公共变量证明存在隐私变量使得上述R1CS限制系统成立. 举个例子,考虑如下二元一次方程: x − y + 3 z 2 = o u t x-y+3z^2=out x − y + 3 z 2 = o u t 其中 o u t out o u t 任意常数. 假设我们需要向第三方证明自己知道存在 ( x , y , z ) (x,y,z) ( x , y , z ) 上述表达式成立,但是又不想泄漏 ( x , y , z ) (x,y,z) ( x , y , z ) 的值,这时我们可以使用Marlin(或者任何其他ZK-SNARK系统)来达到这一点. 由于Marlin采用的是R1CS限制系统,我们首先要将其改写成R1CS表示形式: w 1 + y = x 3 z 2 = w 2 w 1 + w 2 = 1 w_1 + y = x \\ 3z^2=w_2 \\ w_1+w_2=1 w 1 ​ + y = x 3 z 2 = w 2 ​ w