Whisker17 / zkpThings

This repo contains kinds of zkp scheme in current market
39 stars 10 forks source link

Constraint Systems for ZK SNARKs #34

Closed Whisker17 closed 3 years ago

Whisker17 commented 3 years ago

Constraint Systems for ZK SNARKs

Whisker17 commented 3 years ago

Contents:

Whisker17 commented 3 years ago

Arithmetic Circuits for ZK SNARKs

RSA 是基于因式分解的难度

有一对秘密(p,q),有一个公共数据 n ,满足 (p+3)(q+2) = n+1 的情况下,你想要证明你知道 p,q ,然后我们把每一步分开:

def main(private p, private q, n): v0 = p + 3 v1 = q + 2 v2 = v0 * v1 v3 = n + 1 assert (v2 == v3) return 1

Whisker17 commented 3 years ago

How to Encode a Circuit into an R1CS

image

R1CS 并不是一个计算程序,你并非是通过一定的输入来获得一个值。相反, R1CS 是一个验证者的角色,他要做的是证明一个完整的计算过程是正确的

为了做到这点, R1CS 必须接受一个完整状态的计算的输入,同时保证在运算时没有对数据进行更改。

在 R1CS 中有哪些变量呢?

Whisker17 commented 3 years ago

How Constraints Work

比如我们需要构建这样一个多项式:

(2 * p + 7v0 - 1/2 q) * (3p + 5q + n - 2) = (v0 + 3v1 + v2 + 100)

根据之前定义的限制,三方限制的格式为:

<A3.s> * <B3.s> - <C3.s> == 0

那么可得:

A = [0, 0, 0, 2, -1/2, 7, 0, 0, 0] B = [-2, 1, 0, 3, 5, 0, 0, 0, 0] C = [100, 0, 0, 0, 0, 1, 3, 1, 0]

Whisker17 commented 3 years ago

对于 zkSNARK 来说真正的输入为 R1CS ,而不是电路本身