记录下学习零知识证明的相关资料以及协议构建过程
相关定义
Definition 1 (Quadratic Span Program)
若一个程序 Q Q Q为QSP,则其在域 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=Ifree⋃iIi,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=1∑mak⋅vk(x))⋅(w0(x)+k=1∑mwk(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),x∈G。现有一个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)1对任意的多项式Q
在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×G→GT使得
· 若 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,b∈Zp,有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)=(x−x0)...(x−xk),则显然可以构造
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=1∏nvili(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),
-