笔记——零知识证明zkSNARK

本文详细介绍了零知识证明中的zkSNARK协议,从相关定义如Quadratic Span Program、Strong Homomorphic Encryption、Knowledge-of-Exponent Assumption和Bilinear Maps出发,逐步阐述证明过程,包括基本模型、扩展模型、优化模型和零知识计算。通过对证明过程的逐步细化,揭示了zkSNARK如何在保护隐私的同时,确保计算的有效性和正确性。
摘要由CSDN通过智能技术生成

记录下学习零知识证明的相关资料以及协议构建过程

相关定义

Definition 1 (Quadratic Span Program)

若一个程序 Q Q QQSP,则其在域 F F F上存在两个集合 V = { v k ( x ) : k ∈ { 0 , . . . , m } } V = \left\{v_k(x):k\in\left\{0,...,m\right\}\right\} V={ vk(x):k{ 0,...,m}}
W = { w k ( x ) : k ∈ { 0 , . . . , m } } W = \left\{w_k(x):k\in\left\{0,...,m\right\}\right\} W={ wk(x):k{ 0,...,m}}并且存在一个目标多项式 t ( x ) t(x) t(x)。程序Q还包含一个索引划分
I = { 1 , . . . , m } I=\left\{1,...,m\right\} I={ 1,...,m},该划分由2个集合 I l a b e l e d I_{labeled} Ilabeled I f r e e I_{free} Ifree组成,而 I l a b e l e d I_{labeled} Ilabeled又可以进一步的划分为
⋃ i ∈ [ n ] , j ∈ { 0 , 1 } I i j \bigcup_{i\in[n],j\in\left\{0,1\right\}}I_{ij} i[n],j{ 0,1}Iij

对于一个输入 u ∈ { 0 , 1 } n u\in\left\{0, 1\right\}^n u{ 0,1}n使得 I u = I f r e e ⋃ i I i , u i I_u = I_{free} \bigcup_i I_{i,u_i} Iu=IfreeiIi,ui成为一个属于输入 u u u的索引集合。 Q Q Q当且仅当存在属于域 F m F^m Fm元组 ( a 1 , . . . , a m ) (a_1,...,a_m) (a1,...,am) ( b 1 , . . . , b m ) (b_1,...,b_m) (b1,...,bm),以及对于任意 k ∉ I u k\notin I_u k/Iu满足 a k = b k = 0 a_k=b_k=0 ak=bk=0使得\

t ( x ) 整 除 ( v 0 ( x ) + ∑ k = 1 m a k ⋅ v k ( x ) ) ⋅ ( w 0 ( x ) + ∑ k = 1 m w k ( x ) ) t(x)整除(v_0(x) + \sum\limits_{k=1}^{m}a_k·v_k(x))·(w_0(x)+\sum\limits_{k=1}^{m}w_k(x)) t(x)(v0(x)+k=1makvk(x))(w0(x)+k=1mwk(x))

Q Q Q才接受输入 u ∈ { 0 , 1 } u\in\left\{0, 1\right\} u{ 0,1} Q Q Q会计算一个布尔函数 f : { 0 , 1 } n → { 0 , 1 } f:\left\{0,1\right\}^n \rightarrow \left\{0,1\right\} f:{ 0,1}n{ 0,1}如果它完全接收使得 f ( u ) = 1 f(u)=1 f(u)=1成立的输入 u u u Q Q Q的大小为 m m m Q Q Q的度数为 d e g ( t ( x ) ) deg(t(x)) deg(t(x))

Definition 2 (Strong Homomorphic Encryption)

基于模运算的同态加密表示为 E ( v ) = g v ( m o d n ) E(v) = g^v(mod n) E(v)=gv(modn),其中 v v v是需要加密的数据。在同态加密的基础上可以定义运算:
加法: E ( s 0 ) ⨁ E ( s 1 ) = E ( s 0 + s 1 ) = g s 0 + g s 1 = g s 0 + s 1 E(s_0) \bigoplus E(s_1) = E(s_0 + s_1) = g^{s_0} + g^{s_1} = g^{s_0+s_1} E(s0)E(s1)=E(s0+s1)=gs0+gs1=gs0+s1
乘法: E ( s ) t = E ( t s ) = ( g s ) t = g t s E(s)^t = E(ts) = (g^s)^t = g^{ts} E(s)t=E(ts)=(gs)t=gts

注意:该种同态加密并不支持两个加密的数据进行相乘,只允许加密数据与未加密数据进行乘法运算。

Definition 3 (Knowledge-of-Exponent Assumption)

g g g为群 G G G的生成元,其中 ∣ G ∣ |G| G为素数。 k = l o g ( ∣ G ∣ ) k=log(|G|) k=log(G)为安全参数,对于任意以 g g g g α g^\alpha gα作为输入的PPT(多项式概率时间)算法 A A A(其中 α \alpha α是一个未知的随机选取的整数)输出一对参数 ( x , y ) , x ∈ G (x,y),x \in G (x,y),xG。现有一个PPT提取器 E E E,同样以 g g g g α g^\alpha gα作为输入并也会输出 ( x , y ) (x,y) (x,y),除此之外,还会输出一个 g r g^r gr,使得对于足够大的 k k k,使得

P r [ y = x a a n d g r ≠ x ] < 1 Q ( k ) 对 任 意 的 多 项 式 Q Pr[y = x^a and g^r \neq x] < \frac{1}{Q(k)} 对任意的多项式Q Pr[y=xaandgr=x]<Q(k)1Q

在zkSNark之中KEA主要用于生成 α \alpha α对,即验证者可以对证明者发送的加密结果 ( g s , g α s ) (g^s, g^{\alpha s}) (gs,gαs)进行验证 ( ( g s ) c , ( g α s ) c ) ((g^s)^c, (g^{\alpha s})^c) ((gs)c,(gαs)c),以证明证明者是对同一个加密结果进行了“位移操作”而未进行篡改。

Definition 4 (Bilinear Maps)

双线性映射由5个部分组成 ( G , P , G T , g , e ) (G, P, G_T, g, e) (G,P,GT,g,e),其中 e e e是一个高效函数 e : G × G → G T e: G \times G \rightarrow G_T e:G×GGT使得

· 若 g g g是群 G G G的生成元则 e ( g , g ) e(g, g) e(g,g)是群 G T G_T GT的生成元。

·
∀ a , b ∈ Z p , 有 e ( g a , g b ) = e ( g , g ) a b = e ( g b , g a ) \forall a, b \in Z_p, 有 e(g^a, g^b) = e(g, g)^{ab} = e(g^b, g^a) a,bZp,e(ga,gb)=e(g,g)ab=e(gb,ga)

证明过程

证明问题

对于QSP问题,先暂时忽略输入 u u u,考虑Prover向Verifier证明其拥有一个多项式 p ( x ) p(x) p(x)的部分根,这些部分根可以构成多项式 t ( x ) = ( x − x 0 ) . . . ( x − x k ) t(x) = (x-x_0)...(x-x_k) t(x)=(xx0)...(xxk),则显然可以构造
p ( x ) = t ( x ) h ( x ) p(x) = t(x)h(x) p(x)=t(x)h(x),而对于一个多项式 p ( x ) p(x) p(x)我们可以定义其为 p ( x ) = l ( x ) r ( x ) − o ( x ) p(x)=l(x)r(x)-o(x) p(x)=l(x)r(x)o(x),因此将问题在此转化为证明

l ( x ) r ( x ) − o ( x ) = t ( x ) h ( x ) l(x)r(x)-o(x)=t(x)h(x) l(x)r(x)o(x)=t(x)h(x)

基本模型

  • Setup

    • 随机产生 s s s α \alpha α

    • 计算生成 g α g^\alpha gα以及 g s i g^{s^i} gsi, g α s i g^{\alpha s^i} gαsi,
      g t ( s ) g^t(s) gt(s)其中 i ∈ ( 0 , . . . , d ) , d = d e g ( t ( x ) ) i\in(0,...,d), d=deg(t(x)) i(0,...,d),d=deg(t(x))

    • Prover消息 ( g s i , g α s i ) (g^{s^i}, g^{\alpha s^i}) (gsi,gαsi)

    • Verifier消息 ( g t ( s ) , g α ) (g^{t(s)}, g^\alpha) (gt(s),gα)

  • Prover

    • 计算 h ( x ) = l ( x ) r ( x ) − o ( x ) t ( x ) h(x) = \frac{l(x)r(x)-o(x)}{t(x)} h(x)=t(x)l(x)r(x)o(x)

    • 利用 g s i g^{s^i} gsi计算 g l ( s ) , g r ( s ) , g o ( s ) g^{l(s)}, g^{r(s)}, g^{o(s)} gl(s),gr(s),go(s)

    • 利用 g α s i g^{\alpha s^i} gαsi计算 g α l ( s ) , g α r ( s ) , g α o ( s ) g^{\alpha l(s)}, g^{\alpha r(s)}, g^{\alpha o(s)} gαl(s),gαr(s),gαo(s)

    • 生成发送给Verifier的消息
      π = ( g l ( s ) , g r ( s ) , g o ( s ) , g α l ( s ) , g α r ( s ) , g α o ( s ) , g h ( s ) ) \pi = (g^{l(s)},g^{r(s)},g^{o(s)},g^{\alpha l(s)},g^{\alpha r(s)},g^{\alpha o(s)},g^{h(s)}) π=(gl(s),gr(s),go(s),gαl(s),gαr(s),gαo(s),gh(s))

  • Verifier

    • 接收到消息 π = ( g l , g r , g o , g l ′ , g r ′ , g o ′ , g h ) \pi = (g^l,g^r,g^o,g^{l'},g^{r'},g^{o'},g^h) π=(gl,gr,go,gl,gr,go,gh)

    • 对于 l ( x ) l(x) l(x)检查等式 e ( g l , g α ) = e ( g l ′ , g ) e(g^l,g^{\alpha})=e(g^{l'},g) e(gl,gα)=e(gl,g)是否成立,同理对于 r ( x ) , o ( x ) r(x),o(x) r(x),o(x)

    • 检查等式 e ( g l , g r ) = e ( g t ( s ) , g h ) ⋅ e ( g o , g ) e(g^l,g^r)=e(g^{t(s)},g^h)·e(g^o,g) e(gl,gr)=e(gt(s),gh)e(go,g)是否成立

扩展模型-通用计算

根据1.3中对 α \alpha α对的定义结合1.4的双线性映射定义可知 α \alpha α对不仅对单个多项式有用,对于多个多项式的组合 e . g . L ( s ) = a l a ( s ) + b l b ( s ) e.g. L(s) = a l_a(s) + b l_b(s) e.g.L(s)=ala(s)+blb(s)仍然有用
e ( g L ( s ) , g α ) = e ( g α L ( x ) , g ) = g α a l a ( s ) + α b l b ( s ) e(g^{L(s)},g^\alpha) = e(g^{\alpha L(x)},g)=g^{\alpha a l_a(s)+\alpha bl_b(s)} e(gL(s),gα)=e(gαL(x),g)=gαala(s)+αblb(s)
这就是说 α \alpha α对能保证一种计算结构。

此时对于上述的 L ( s ) L(s) L(s)而言,变量 ( a , b ) (a,b) (a,b)为其输入,因此可以对式(3)的左部进行扩展,当输入变量为 v = v i , i ∈ ( 1 , . . . , n ) v=v_i, i\in(1,...,n) v=vi,i(1,...,n)时, L ( s ) = ∏ i = 1 n v i l i ( s ) L(s)=\prod\limits_{i=1}^{n}v_i l_i(s) L(s)=i=1nvili(s),同理对 R ( s ) , O ( s ) R(s),O(s) R(s),O(s)成立。而此时可以对基本模型进行扩展,使之成为适应多个输入的通用版本,而变量 v = v i , i ∈ ( 1 , . . . , n ) v=v_i, i\in(1,...,n) v=vi,i(1,...,n)在QSP问题之中可以根据输入 u u u得出。

接下来问题则是如何根据输入 v = v i , i ∈ ( 1 , . . . , n ) v=v_i, i\in(1,...,n) v=vi,i(1,...,n)确定 L ( s ) L(s) L(s)的各个 l i ( s ) l_i(s) li(s)的组成。首先引入一个离散数学的概念——插值。
Definition 5 插值
给定n个离散数据点 ( x k , y k ) , k ∈ ( 1 , . . . , n ) (x_k,y_k), k \in (1,...,n) (xk,yk),k(1,...,n)。对于
x ( x ≠ x k ) x(x\neq x_k) x(x=xk) x x x所对应的 y y y的值称为内插。 f ( x ) f(x) f(x)定义在区间
[ a , b ] [a, b] [a,b]上的函数, x 1 , . . . , x n x_1,...,x_n x1,...,xn为区间 [ a , b ] [a, b] [a,b]上n个不同的点, G G G为某一给定的函数类。若 G G G上有函数 g ( x ) g(x) g(x)满足 g ( x i ) = f ( x i ) , i ∈ ( 1 , . . . , n ) g(x_i) = f(x_i),i\in(1,...,n) g(xi)=f(xi),i(1,...,n)则称 g ( x ) g(x) g(x) f ( x ) f(x) f(x)关于节点 x 1 , . . . , x n x1,...,x_n x1,...,xn G G G上的插值函数。

对于一个n次多项式而言,可以根据选取的n+1个不同的点唯一确定该多项式。根据上述逻辑,修改后的证明过程如下:

  • Setup

    • 通过插值计算出 l i ( x ) , r i ( x ) , o i ( x ) , i ∈ ( 1 , . . . , n ) l_i(x),r_i(x),o_i(x),i\in(1,...,n) li(x),ri(x),oi(x),i(1,...,n)

    • 随机产生 s s s α \alpha α

    • 计算生成
      g α g^\alpha gα以及 g s k , k ∈ ( 1 , . . . , d ) g^{s^k},k\in(1,...,d) gsk,k(1,...,d),
      g l i ( s ) , g r i ( s ) , g o i ( s ) , g α l i ( s ) , g α r i ( s ) , g α o i ( s ) g^{l_i(s)}, g^{r_i(s)}, g^{o_i(s)}, g^{\alpha l_i(s)}, g^{\alpha r_i(s)}, g^{\alpha o_i(s)} gli(s),gri(s),goi(s),gαli(s),gαri(s),gαoi(s),
      g t ( s ) g^t(s) gt(s)其中 i ∈ ( 0 , . . . , d ) , d = d e g ( t ( x ) ) i\in(0,...,d), d=deg(t(x)) i(0,...,d),d=deg(t(x))

    • Prover消息
      ( { g s k } k ∈ ( 1 , . . . , d ) , g l i ( s ) , g r i ( s ) , g o i ( s ) , g α l i ( s ) , g α r i ( s ) , g α o i ( s ) ) (\left\{g^{s^k}\right\}_{k\in(1,...,d)}, g^{l_i(s)}, g^{r_i(s)}, g^{o_i(s)}, g^{\alpha l_i(s)}, g^{\alpha r_i(s)}, g^{\alpha o_i(s)}) ({ gsk}k(1,...,d),gli(s),gri(s),goi(s),

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值