We now review the three main elements in the tuple.
Example
40380552: 02f407b3 mul a1,s0,5
4038055e: 004c addi a1,s0,11
40380552: 02f407b3 mul a1,s0,26
LD R1, 4
Mul R1, 5 => Gate 1, p=181
Add R1, 11 => Gate 2, p=181
Mul R1, 26 (== Div R1, 7) => Gate 3, p=181
Therefore
and similarly
D- Therefore, output
.................
AHP
References:
[1] Boneh, Dan, Wilson Nguyen, and Alex Ozdemir. "Efficient functional commitments: How to commit to a private function." Cryptology ePrint Archive (2021).
[2] de Castro, Leo, and Chris Peikert. "Functional commitments for all functions, with transparent setup and from SIS." Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer Nature Switzerland, 2023.
[3] Gabizon, Ariel, and Zachary J. Williamson. "plookup: A simplified polynomial protocol for lookup tables." Cryptology ePrint Archive (2020).
[4] Wee, Hoeteck, and David J. Wu. "Lattice-based functional commitments: Fast verification and cryptanalysis." International Conference on the Theory and Application of Cryptology and Information Security. Singapore: Springer Nature Singapore, 2023.
In this page, we will review function-hiding functional commitment zero-knowledge proof (ZKP) scheme. This scheme is a tuple (Setup,,Commit,Eval)that utilizes the following three protocols:
PC=(PC.Setup,PC.Commit,PC.Eval,PC.Check),
A proof of function relation (PFR) π=(Pf,Vf,kf,sf,df)contains kfwehre is the number of rounds, sf:N→N where that sf(i) is the number polynomials that the Prover Pfsends to the Verifier Vf in round i and df:N3→N so that df(N,i,j) is the degree bound for jthpolynomial in round . Let N be the maximum supported index size.
An algebric holographic proof AHP=(EncAHP,PAHP,VAHP,kAHP,sAHP,dAHP) contains kAHP where is the number of rounds, sAHP:N→N so that sAHP(i) is the number polynomials that the Prover PAHPsends to the Verifier VAHP in round i and dAHP:N3→N so that dAHP(N,i,j) is the degree bound for jth polynomial in round i.
Note that sAHP(0)=sf(0) and for all i∈[sAHP(0)], dAHP(N,0,i)=df(N,0,i).
Setup(1λ,N): The is function creates output pp=PC.Commit(1λ,d) where λ is security parameter and d={dAHP(N,i,j)}i∈[kAHP]⋃{0},j∈[sAHP(i)]}⋃{df(N,i,j)}i∈[kf],j∈[sf(i)].
For example, if polynomial commitment scheme KZG is used, pp=(g,gd,gd2,...,gdl)where g is a generator of field F with large prime order p such that log(p)=Ω(λ) and l is maximum degree of polynomials that want to commit them.
Commit(pp,i∈If,r∈R=RsAHP(0)):
This function contains the following steps:
A- Parse r=(r1,...,rsAHP(0)) and pp=(ck,vk).
B- Set o=EncAHP(i).
Note that If is a functional set that contains triple matrices i=(A,B,C)∈(Fn×n)3 so that for all input x∈X, there exists a unique y∈Y and a witness (intermediate) ω∈W such that AzoBz=Cz where z=(x,w,y).
Note that a triple of matrices (A,B,C)∈(Fn×n)3 is a functional triple if and only if A and B are t−strictly lower triangular matrices (t−SLT) and C is t-diagonal matrix (t−Diag). Here, t is the size of the input.
Note that the Prover obtains t−SLT matrices A, B and t−Diag matrix C for the arithmetic circuit based on the following construction:
1- Initialize three zero square matrices A,B,C over F of order ng+ni+1 where ng is the number of gates and ni is the number of inputs.
Here, the gate i is corresponding to tuple (li,ri,si) where li and ri are left and right input wire indices, respectively and si is gate selector, addition or multiplication. Also in the following construction ni is the number of inputs.
2- For i=0..,ng−1:a)C1+ni+i,1+ni+i=1b) if si is addition
- A1+ni+i,0=1
- B1+ni+i,li=1 ( if the left input is a number, value of input is placed )
- B1+ni+i,ri=1 ( if the right input is a number, value of input is placed)
c) If si is multiplication
- A1+ni+i,li=1 ( if the left input is a number, value of input is placed)
- B1+ni+i,ri=1 ( if the right input is a number, value of input is placed)
3- Outputs matrices A,B and C.
Note that the Prover encodes each matrix A,B and C by three polynomials such that encodes matrix M, M∈{A,B,C}, by polynomials rowM(x), colM(x) and valM(x) so that rowM(γi)=ωri, colM(γi)=ωci and valM(γi)=vi for i∈{0,1,2,..,m−1} where γ is a generator of multiplicative subgroup Kof F of order m (K=<γ> and ∣K∣=m) and ω is a generator of multiplicative subgroup H of F of order n (H=<ω> and ∣H∣=n). Also m is maximum of the number of nonzero entries in the matrix M. n is the order of the matrix. Also ri,ci∈{0,1,...,n−1} and vi∈F are row number, column number and value of ith nonzero entry, respectively. Therefore O=(rowA(x),colA(x),valA(x),rowB(x),colB(x),valB(x),rowC(x),colC(x),valC(x)).
C- For i∈sAHP(0), cO0,i=PC.Commit(ck,O[i],dAHP(N,0,i),rO0,i).
For example, if the polynomial commitment schemeKZG is used,
cO0,i=∏i∈{0,1,...,degO[i]}(gdi)ai where ai is coefficient of xi in polynomial O0,i.
We now review the last step for the commitment phase
D- Output c=(cO0,1,cO0,2,...,cO0,sAHP(0)).
Eval(PE(pp,i,r,x,y),VE(pp,c,x,y)). The Prover PE and the Verifier VE parse pp=(ck,vk).
. The Prover PE computes o=EncAHP(i).
. The Prover PE and the Verifier VE run polynomial interactive oracle proofs (piop) , AHP or PFR.
A- PFR commitment checking
The Prover Pf and the Verifier Vf run polynomial oracle proof PFR<Pf(O,,i),VfO()>. This polynomial oracle proof is described in Supplement1. Note that in this polynomial oracle proof, the Prover wants to prove three following claims:
1.O[1]=rowA(x) , O[2]=colA(x) andO[3]=valA(x)is encoding of a t−SLT matrix.
2.O[4]=rowB(x) , O[5]=colB(x) andO[6]=valB(x)is encoding of a t−SLT matrix.
3.O[7]=rowC(x) , O[8]=colC(x) andO[9]=valC(x)is encoding of a t−Diag matrix.
B- PFR andAHP proof generating and verifying
The Prover PAHP and the Verifier VAHP run polynomial oracle proof AHP<PAHP(i,(x,y),w),VAHPO((x,y))>. Note that in this polynomial oracle proof, by keeping the function (A,B,C) hidden, the Prover wants to prove that input x gives output y.
. For all i∈[kpiop] and j∈spiop(i) when Ppiop sends oracle polynomial oi,j . PE computes and sends coi,j=PC.Commit(ck,oi,j,dpiop(N,i,j),roi,j)
. When Vpiop derives an oracle o that is a linear combination of other oracles, VE derives co through the PCS homomorphism. PE similarly derives the commitment randomness ro.
.When Vpiop queries oracle polynomial o with degree bound doat z∈F to receive y=o(z) :
.VE sends z.
.PE retrieves ro, then computes π=PC.Eval(ck,o,do,ro,z)and sends π and y=o(z).
For example, if polynomial commitment scheme KZG is used, π=gq(d) where q(x)=x−zo(x)−y.
.PE retrieves ro, then computes π=PC.Eval(ck,o,do,ro,z)and sends π and y=o(z).
For example, if polynomial commitment scheme KZG is
used, π=gq(d) where q(x)=x−zo(x)−y.
.VE retrieves co and asserts 1=PC.Check(vk,co,do,z,y,π).
For example, if polynomial commitment scheme KZG is used, π check as following:
e(gyco,g)=e(π,gzgd) , e(go(d)−y,g)=e(gq(d),gd−z),
e(g,g)o(d)−y=e(g,g)q(d)(d−z) and o(d)−y=q(d)(d−z).
Supplement1
polyIOP PFR includes:
1)To prove strictly lower triangularity of the matrices A and B must prove that
logωrowM(γi)>logωcolM(γi) for i∈{0,1,..,m−1}and M∈{A,B}. This does by
Discrete−logcomparisonprotocol.
2) To prove the first t rows of A and B are all zeros must prove that
rowM(K)⊆{ωt,ωt+1,...,ωn−1}. This does by subsetoverKprotocol.
3) To prove the diagonality of the matrix C must prove that seqK(rowC)=seqK(colC)where seqK(h)=(h(k):k∈K). This does by Geometricsequence and zerooverKprotocols.
4) To prove the first t rows of C are all zeros must prove that there is a vector v∈(F∗)n−t so that seqK(valC)=v∣∣0 . This does by Geometricsequence and zerooverKprotocols.
3 and 4 result that all the non-zero entries of the matrix C are in the positions (ωt,ωt),(ωt+1,ωt+1),...,(ωn,ωn).
Suppose d=111213119. Run PC.Setup(1λ,d) based on KZG as following:
PC.Setup(1λ,d) outputs pp=(g,gd,gd2,...,gdl) where l is the maximum degree of polynomials that are used in scheme .
Let the computation be done in F of order p=181. A generator of F is g=2, therefore
pp=(g,gd,gd2,...,gdl)=(2,2111213119,...,21112131198). Because ord(2)=180, then
2111213119=(2180)6178502119≡2119≡66(mod181). Similarly, the rest of entries are computed and as a result pp=(2,66,83,91,96,24,2,66,83).
We consider z=(1,x,w1,w2,y) where w1=5x, w2=w1+11 and y=7w2. Therefore with input x=4, z=(1,4,20,31,82). Note that the inverse of number a in this field is ap−2(modp) , so 7−1≡26(mod181).
It can be seen that matrices A and B are 2−SLT and matrix C is 2−Diag.
Also AzoBz=00203182=Cz.
To encode matrix A, consider multiplicative subgroup H of order n=ng+ni+1=5 with generator
ω=236≡59(mod181). Note that if g is a generator of field F of order p, then gnp−1is a generator of a multiplicative subgroup of it of order n. Therefore H={1,ω,ω2,ω3,ω4}={1,59,42,125,135}.
Also, consider multiplicative subgroup K of order m=2n2−n−2t2−t=9 where t=ni+1 with generator γ=gmp−1=220≡43(mod181). Therefore K={1,γ,γ2,...,γ8}={1,43,39,48,73,62,132,65,80}.
First, build the polynomial rowA(x). Since matrix A has three non-zero entries the first of them is in the second row, so c0=2 and rowA(γ0)=ω2 , note that rows numbered of zero, the second is in the third row, so c1=3 and rowA(γ1)=ω3 and the third is in the fourth row, so c2=4 and rowA(γ2)=ω4.
According to the values defined for γ and ω, we have rowA(1)=42, rowA(43)=125 and rowA(39)=135. Therefore based on Lagrange polynomials, have rowA(x)=∑i=13yiLi(x), sorowA(x)=42L1(x)+125L2(x)+135L3(x), where L1(x)=(1−43)(1−39)(x−43)(x−39)=(−42)(−38)(x−43)(x−39). Now, since −42≡139(mod181), −38≡143(mod181), −43≡138(mod181)and −39≡142(mod181), therefore L1(x)=(139)(143)(x+138)(x+142)and since (139)(143)≡148(mod181)and 148−1≡170(mod181), have L1(x)=170(x+138)(x+142)=170x2+178x+15. We get in a similar way that L2(x)=167x2+17x+178 and L3(x)=25x2+167x+170. Therefore rowA(x)=77x2+109x+37.
Now, we obtain colA(x). Since matrix A has three non-zero entries the first of them is in the first column, so r0=1 and colA(γ0)=ω1 , note that columns numbered of zero, the second is in the zero column, so r1=0 and colA(γ1)=ω0 and the third is in the third column, so r2=3 and colA(γ2)=ω3. Therefore colA(1)=59, colA(43)=1 and colA(39)=125. So colA(x)=59L1(x)+L2(x)+125L3(x)=109x2+81x+50.
Now, we obtain valA(x). Since matrix A has three non-zero entries such that the value of all of them is one, therefore v0=v1=v2=1. So, valA(x)=L1(x)+L2(x)+L3(x)=1.
Therefore, the matrix A encodes by rowA(x)=77x2+109x+37, colA(x)=109x2+81x+50 and valA(x)=1.
Now, encode the matrix B. First, build the polynomial rowB(x). Since matrix B has four non-zero entries such that the first of them is in the second row, so c0=2 and rowB(γ0)=ω2 . The second and the third are in the third row, so c1=c2=3 and rowB(γ1)=rowB(γ2)=ω3 and the fourth is in the fourth row, so c3=4 and rowB(γ3)=ω4. Therefore, rowB(1)=42, rowB(43)=125, rowB(39)=125 and rowB(48)=135. So rowB(x)=42L1(x)+125L2(x)+125L3(x)+135L4(x) where L1(x)=(1−43)(1−39)(1−48)(x−43)(x−39)(x−48)=(139)(143)(134)(x+138)(x+142)(x+133)=103(x+138)(x+142)(x+133). Since 103−1≡58(mod181), so L1(x)=58(x+138)(x+142)(x+133)=58x3+62x2+116x+127. We get in a similar way that L2(x)=39x3+7x2+19x+116, L3(x)=138x3+155x2+7x+62 and L4(x)=127x3+138x2+39x+58. Therefore rowB(x)=76x3+35x2+174x+119.
Now, we obtain colB(x). Since matrix B has four non-zero entries that the first, second and fourth of them are in zero column, so r0=r1=r3=0 and colB(γ0)=colB(γ1)=colB(γ3)=ω0 and the third is in the second column, so r2=2 and colB(γ2)=ω2 . Therefore colB(1)=1, colB(43)=1, colB(39)=42and colB(48)=1. So colB(x)=L1(x)+L2(x)+42L3(x)+L4(x)=47x3+20x2+106x+9.
Now, we obtain valB(x). Since matrix B has four non-zero entries that value of them are 5, 11, 1 and 26, respectively. Therefore v0=v1=v2=1valB(γ0)=5, valB(γ1)=11, valB(γ2)=1and valB(γ3)=26. So, valB(1)=5, valB(43)=11, valB(39)=1and valB(48)=26. Therefore valB(x)=5L1(x)+11L2(x)+L3(x)+26L4(x)=177x3+148x2+42.
Therefore, the matrix B encodes by rowB(x)=76x3+35x2+174x+119, colB(x)=47x3+20x2+106x+9 and valB(x)=177x3+148x2+42.
Now, build polynomial rowC(x). In a similar way, Since matrix C has three non-zero entries that are in the third, fourth and fifth rows, therefore rowC(γ0)=ω2 , rowC(γ1)=ω3 and rowC(γ2)=ω4. Then rowC(1)=42 , rowC(43)=125 and rowC(39)=135. SorowC(x)=42L1(x)+125L2(x)+135L3(x), therefore rowC(x)=77x2+109x+37.
Now, since C is a diagonal matrix, polynomials rowC(x) and colC(x)are equal. Also, since the matrix C has three non-zero entries such that the value of all of them is one, therefore v0=v1=v2=1. So, valC(x)=L1(x)+L2(x)+L3(x)=1.
Therefore, the matrix C encodes by rowC(x)=77x2+109x+37, colC(x)=77x2+109x+37 and valC(x)=1.
Therefore encoding of i=(A,B,C) obtain as following:
crowB(x)=135, ccolB(x)=3, cvalB(x)=50, crowC(x)=73, ccolC(x)=73 and cvalC(x)=2.
c=(32,56,2,135,3,50,73,73,2).
-Eval(PE(pp,i,r,x,y),VE(pp,c,x,y))
. The Prover PE and the Verifier VE parse pp=(ck,vk).
. The Prover PE computesO=EncAHP(i)=(rowA(x),colA(x),valA(x),rowB(x),colB(x),valB(x),rowC(x),colC(x),valC(x)).
. The Prover PE and the Verifier VE run polynomial interactive oracle proofs (piop) , AHP or
PFR.
A- PFR commitment checking
The Prover Pf and the Verifier Vf run polynomial oracle proof PFR<Pf(O,,i),VfO()> as following:
A- PFR commitment checking
The Prover
This piop want to verify that three polynomials rowA(x), colA(x) and valA(x), also three polynomials rowB(x), colB(x), valB(x) are corresponding to t−SLT and three polynomials rowC(x), colC(x)and valC(x) is corresponding to a t−Diag matrix. This piop includes:
The first, see piop to prove t−SLTof the matrix A in the following steps:
1) The Prover interpolates polynomial h such that seqK(h)=ωt,ωt+1,..,ωn−1,0,..,0. Here t=2 and n=5, therefore seqK(h)=ω2,ω3,ω4,0,..,0. This means that {h(k):k∈K={1,43,39,48,73,62,132,65,80}}={ω2,ω3,ω4,0,..,0}={42,125,135,0,0,0,0,0,0}. Therefore h(1)=42, h(43)=125 , h(39)=135, h(48)=h(73)=h(62)=h(132)=h(65)=h(80)=0. So h(x)=42L1(x)+125L2(x)+135L3(x)where L1(x)=(−42)(−38)(−47)(−72)(−61)(−131)(−64)(−79)(x−43)(x−39)(x−48)(x−73)(x−62)(x−132)(x−65)(x−80)=161x8+161x7+161x6+161x5+161x4+161x3+161x2+161x+161,
Therefore h(x)=121x8+133x7+57x6+127x5+103x4+24x3+128x2+140x+114. The Prover sendsh to the Verifier.
2) The Prover and the Verifier do GeometricSequenceTest on h (to verify correct construction of polynomial h). In GeometricSequenceTest want to prove that SeqK(h)=a1,a1r,..,a1rc1−1,a2,a2r,...,a2rc2−1,...,av,avr,...,avrcv−1.
StartofGeometricSequenceTest
Since h(γ0)=ω2, h(γ1)=ω3 ,h(γ2)=ω4 and h(γ3)=...=h(γ8)=0, then Geometric Sequence Test with a1=ω2, a2=0, r=ω, c1=n−t=3 and c2=m−(n−t)=9−3=6 run. Let pi=∑j<icj for i∈{1,2,..,v}. Here v is the number of ci that are non-zero. Therefore v=2p1=0 and p2=c1=3.
3) The Verifier checks h(γpi)=ai for i∈{1,2,...,v}. Here checks h(γp1)=h(γ0)=a1=ω2 and h(γp2)=h(γ3)=a2=0. There the Verifier checksh(1)=42 and h(48)=0.
4) The Prover and the Verifier run ZeroOverK to check that for all k∈K, have (h(γk)−rh(k))∏i=1v(k−γpi+ci−1)=0. Here, ZeroOverK run to check that for all k∈K={1,γ,γ2,..,γ8}, have (h(γk)−ωh(k))(k−γ2)(k−ω8)=0.
Note: It is clear that if the construction of h is correct, it applies this equality, because if k=1, h(γk)=h(γ)=ωh(1) then h(γk)−ωh(k)=0. If k=γ, h(γk)=h(γ2)=ωh(γ), then h(γk)−ωh(k)=0. If k=γ2, then k−γ2=0. If k=ω3,...,ω7, then h(γk)=ωh(k)=0 and if k=γ8, then k−γ8=0.
StartofZeroOverK
In ZeroOverK, want to prove that for all k∈K, F(k)=0 where F(x)=G(x,fj1(α1x),fj2(α2x),...,fjt(αtx)). Here F(x)=(h(γx)−ωh(x))(x−γ2)(x−γ8), therefore since t=2, F(x)=G(x,fj1(α1x),fj2(α2x))=(h(γx)−ωh(x))(x−γ2)(x−γ8), so h1=fj1=h, h2=fj2=h, α1=γ and α2=1.
5) The Prover selects polynomials ri∈F<2[x], i∈{1,2,..,t}. Then computes masks mi(x)=ri(αi−1x)ZK(αi−1x) and computes hi′(x)=hi(x)+mi(x) for i∈{1,2,..,t}.
Here, the Prover selects r1,r2. For example, let r1(x)=2+x and r2(x)=2x. Therefore m1(x)=r1(α1−1x)ZK(α1−1x) where α1=γ=48 and ZK(x)=∏x∈K(x−k)=(x−1)(x−43)(x−39)(x−48)(x−73)(x−62)(x−132)(x−65)(x−80)=x9+180. Therefore m1(x)=r1(80x)ZK(80x)=80x10+2x9+101x+179m2(x)=r2(α2−1x)ZK(α2−1x)=r2(x)ZK(x)=2x(x9+180)=2x10+179x. Then computes h1′(x)=h1(x)+m1(x)=h(x)+m1(x)=80x10+2x9+121x8+133x7+57x6+127x5+103x4+24x3+128x2+60x+112 and h2′(x)=h2(x)+m2(x)=h(x)+m2(x)=2x10+121x8+133x7+57x6+127x5+103x4+24x3+128x2+138x+114.
6) The Prover computes F′(x)=G(x,h1′(α1x),h2′(α2x),...,ht′(αtx)) and q1(x)=ZK(x)F′(x) then the Prover sends {mi}i, {ri}i and q1.
Here F′(x)=G(x,h1′(43x),h2′(x))=(h1′(43x)−ωh2′(x))(x−γ2)(x−γ8)=64x12+169x11+168x10+51x9+117x3+12x2+13x+130
and then q1(x)=ZK(x)F′(x)=64x3+169x2+168x+51.
The Prover sendsm1(x)=80x10+2x9+101x+179 , m2(x)=2x10+179x, r1(x)=2+x , r2(x)=2x and q1(x)=64x3+169x2+168x+51 to the Verifier.
7) The Verifier deriveshi′=hi+mi through additive homomorphism. Then samples β1, β2 and c of F∗−K and sends c to the Prover.
Suppose β1=65, β2=21 and c=171. The Verifier sendsc=171 to the Prover.
8) The Prover computes q2=r1+cr2+...+ct−1rt and the Verifier derives concrete oracle q2 through additive homomorphism.
Here, the Prover computes q2(x)=r1(x)+cr2(x)=2+x+171(2x)=162x+2.
9) Let M(x)=m1(α1x)+cm2(α2x)+...+ct−1mt(αtx). The Verifier computes ZK(β1), ZK(β2), queries q1(β1)and q2(β2) and for i∈{1,2,..,t}, queries hi′(αiβ1) and mi(αiβ2)to compute F′(β1) and M(β2). The Verifier asserts two identities M(β2)−q2(β2)ZK(β2)=0 and F′(β1)−q1(β1)ZK(β1)=0.
Here, M(x)=m1(α1x)+cm2(α2x)=m1(γx)+171m2(x)=162x10+2x9+19x+179. The Verifier computes ZK(β1)=ZK(65)=659+180=0 and ZK(β2)=ZK(21)=219+180=30 and queriesq1(β1)=86 and q2(β2)=146. Also queries values h1′(α1β1)=h1′(γ×65)=h1′(80)=0 , h2′(α2β1)=h2′(65)=0, m1(α1β2)=m1(γ×21)=m1(179)=147 and m2(α2β2)=m2(21)=174. Then checksM(β2)−q2(β2)ZK(β2)=0 , that means 36−30×146=36−36≡0(mod181), and F′(β1)−q1(β1)ZK(β1)=0, that means 0−86×0≡0(mod181).
EndofZeroOverK
10) The Verifier outputs accept if all checks pass, otherwise reject.
Here, outputs accept.
EndofGeometricSequenceTest
11) The Prover and the Verifier run SubsetoverK between rowA and h to prove that rowA(K)⊂h(K) where rowA(K)={rowA(k):k∈K}and h(K)={h(k):k∈K}.
StartofSubsetoverK
EndofSubsetoverK
12) The Prover and the Verifier run Discrete−logComparison between rowA and colA as following:
StartofDiscrete−logComparison
Let parameters (Δ∈F,n=∣H∣) such that ord(Δ)=2n and Δ2=ω.
Here, ω=59, Δ=56 and ord(Δ)=2n=10.
13) The Prover interpolates polynomial s so that agrees with colArowA on K. Then send them to the Verifier.
Here, s(1)=colA(1)rowA(1)=5942≡59(mod181), s(43)=colA(43)rowA(43)≡125(mod181), s(39)=colA(39)rowA(39)=125135≡59(mod181), s(48)=colA(48)rowA(48)=4548≡170(mod181),
s(73)=colA(73)rowA(73)=2236≡51(mod181), s(62)=colA(62)rowA(62)=166151≡2(mod181),
s(132)=colA(132)rowA(132)=4621≡28(mod181), s(65)=colA(65)rowA(65)=127131≡135(mod181) and
s(80)=colA(80)rowA(80)=406≡154(mod181). Therefore, s(x)=59L1(x)+125L2(x)+59L3(x)+170L4(x)+51L5(x)+2L6(x)+28L7(x)+135L8(x)+154L9(x).
where L1(x), L2(x) and L3(x) are computed in step 1 and the rest of Li(x)s are
L4(x)=126x8+75x7+161x6+126x5+75x4+161x3+126x2+75x+161,
L5(x)=169x8+29x7+126x6+148x5+125x4+75x3+45x2+27x+161,
L6(x)=27x8+45x7+75x6+125x5+148x4+126x3+29x2+169x+161,
L7(x)=75x8+126x7+161x6+75x5+126x4+161x3+75x2+126x+161,
L8(x)=148x8+27x7+126x6+45x5+29x4+75x3+169x2+125x+161and
L9(x)=29x8+148x7+75x6+27x5+169x4+126x3+125x2+45x+161.
Therefore s(x)=41x8+101x7+34x6+38x5+x4+25x3+152x2+123x+87. The Prover sendss(x) to the Verifier.
14) For b∈{rowA,colA,s}, the Prover interpolates polynomial b′ so that for all k∈K, b′(k)=Δlogωb(k).
Here, if b=rowA, rowA′(k)=ΔlogωrowA(k)=56log59rowA(k)that means rowA′(1)=56log5942=562≡59(mod181), rowA′(43)=56log59125=563≡46(mod181),
rowA′(39)=56log59135=564≡42(mod181), rowA′(48)=56log5948≡49(mod181),
rowA′(73)=56log5936≡114(mod181), rowA′(62)=56log59151≡(mod181).
if b=colA, colA′(k)=ΔlogωcolA(k)=56log59colA(k)that means colA′(1)=56log5959=561≡56(mod181), colA′(48)=56log591=565≡180(mod181) and colA′(132)=56log59125=563≡46(mod181). Therefore colA′(x)=56L1(x)+180L2(x)+46L3(x)=96x2+47x+94.
if b=s, s′(k)=Δlogωs(k)=56log59s(k)that means s′(1)=56log5959=561≡56(mod181), s′(48)=56log59125=563≡46(mod181) and s′(132)=56log5959=561≡56(mod181). Therefore s′(x)=56L1(x)+46L2(x)+56L3(x)=21x2+103x+113.
Then the Prover sends rowA′, colA′ and s′ to the Verifier.
4−1−5−3) The Prover interpolates polynomial h so that seqK(h)=1,Δ,Δ2,..,Δn−1,0,0,..,0.
Here seqK(h)=1,56,59,46,42.
B- PFR andAHP proof generating and verifying
1)Let z=(1,x,w)=(1,4,20,31,82). Also, let zA=Az=000100010000000000010000014203182=004131, zB=Bz=00511260000000010000000000014203182=0053126and zC=Cz=000000000000100000100000114203182=00203182
2)obtain the polynomial zA(x)using indexing zA by elements of H that mean zA(x) is the polynomial that zA(1)=0, zA(59)=0, zA(42)=4, zA(125)=1 and zA(135)=31.
Then obtain polynomial z^A(x) using the polynomial zA(x)so that z^A(x)∈F<∣H∣+b[x] that agree with zA(x) on H . Note that values of up to b locations in this polynomial reveals no information about the witness wprovided the locations are in F−H.
Here, for simplicity, let b=2 and obtain z^A(x) so that agree with zA(x) on H and also z^A(150)=5, z^A(80)=47.
Therefore, we have z^A(x)=4L3(x)+L4(x)+31L5(x)+5L6(x)+47L7(x) where L3(x)=133x6+155x5+117x4+27x3+48x2+73x+171, L4(x)=4x6+123x5+25x4+48x3+27x2+113x+22, L5(x)=75x6+115x5+27x4+25x3+117x2+154x+30, L6(x)=132x6+119x5+49x+62 and L7(x)=97x6+111x5+84x+70.
So z^A(x)=116x6+165x5+63x4+26x3+45x2+141x+168.
Similarly, obtain polynomial z^B(x) so that z^B(x)∈F∣H∣+b[x] that agree with zB(x) on H that mean z^B(1)=0, z^B(59)=0, z^B(42)=5, z^B(125)=31, z^B(135)=26 and also b=2 random locations z^B(150)=15 and z^B(80)=170. So z^B(x)=5L3(x)+31L4(x)+26L5(x)+15L6(x)+170L7(x)=32x6+178x5+74x4+101x3+137x2+81x+124
Similarly, obtain polynomial z^C(x) so that z^C(x)∈F∣H∣+b[x] that agree with zC(x) on H that mean z^C(1)=0, z^C(59)=0, z^C(42)=20, z^C(125)=31, z^C(135)=82 and also b=2 random locations z^C(150)=1 and z^C(80)=100. So z^C(x)=20L3(x)+31L4(x)+82L5(x)+L6(x)+100L7(x)=123x6+50x5+80x4+96x3+169x2+157x+49
Now, obtain polynomial w^(x)∈F∣w∣+b[x]that agree with wˉ(x) on H[>∣x∣] where
wˉ:H[>∣x∣]={42,125,135}→F
wˉ(h)=vH[≤∣x∣](h)w(h)−x^(h)
where vH[≤∣x∣(h)is vanishing polynomial on H[≤∣x∣]={1,59}, therefore vH[≤∣x∣(h)=(h−1)(h−59). Also x^(h)is the polynomial so that x^(1)=1 and x^(59)=4, therefore x^(h)=128h+54. Therefore
wˉ(42)=(42−1)(42−59)w(42)−x^(42)=(41)(−17)20−0≡108(mod181), wˉ(125)=(125−1)(125−59)w(125)−x^(125)=(124)(66)31−126≡160(mod181) and wˉ(135)=(135−1)(135−59)w(135)−x^(135)=(134)(76)82−139≡78(mod181).
Now, obtain w^(x)∈F∣w∣+b=3+2[x] so that w^(42)=108, w^(125)=160 , w^(135)=78 and also b=2 random locations w^(150)=42 and w^(80)=180. Therefore w^(x)=108L1(x)+160L2(x)+78L3(x)+42L4(x)+180L5(x) where L1(x)=(−83)(−93)(−108)(−38)(x−125)(x−135)(x−150)(x−80)≡152x4+92x3+73x2+43x+112(mod181),
L2(x)=156x4+39x3+84x2+86x+171, L3(x)=161x4+157x3+131x2+159x+6,
L4(x)=60x4+67x3+118x2+50x+20 and L5(x)=14x4+7x3+137x2+24x+54. Therefore
w^(x)=149x4+97x3+161x2+121x+166.
3) Find polynomial h0(x) so that z^A(x)z^B(x)−z^C(x)=h0(x)vH(x). Since z^A(x)z^B(x)−z^C(x)=92x12+45x11+164x10+x9+20x8+61x7+152x6+49x5+180x4+161x3+28x2+165x+149 and vH(x)=∏h∈H(x−h)=(x−1)(x−59)(x−42)(x−125)(x−135)=x5+180, obtain
h0(x)=92x7+45x6+164x5+x4+20x3+153x2+16x+32.
4) Sample a fully random s(x)∈F2∣H∣+b−1=11[x]. Consider s(x)=5x10+101x8+17x7+x5+20x4+3x+115. Compute sum σ1=∑k∈Hs(k)=s(1)+s(59)+s(42)+s(125)+s(135)=81+47+141+46+109≡62(mod181).
where r(x,y)=uH(x,y)=x−yvH(x)−vH(y) , vH(x)=∏h∈H(x−h)=x∣H∣−1. Therefore
r(x,y)=x−yx∣H∣−y∣H∣. (Note that r(x,y)satisfies two useful algebraic properties. First, the univariate polynomials (r(x,a))a∈H are linearly independent and r(x,y) is their (unique) low-degree extension. Second, r(x,y) vanishes on the square H×H except for on the diagonal, where it takes on the (non-zero) values (r(a,a))a∈H.) Therefore r(x,y)=x−yx5−y5 . Also rM(x,y)=∑k∈Hr(x,k)M^(k,y) for M∈{A,B,C}.
Now, Since ∑MηMz^M(x)=ηAz^A(x)+ηBz^B(x)+ηCz^C(x)=98x6+172x5+120x4+12x3+104x2+131x+87and r(α,x)=r(10,x)=10−x105−x5, so the second term of the left is r(α,x)∑MηMz^M(x)=98x10+66x9+56x8+29x7+32x6+153x5+56x4+136x3+123x2+42x+114
Also, z^(x)=w^(x)vH[≤∣x∣+1](x)+x^(x)=(149x4+97x3+161x2+121x+166)(x−1)(x−59)+128x+54=149x6+26x5+55x4+166x3+52x2+22x+74 that agree with z on H and rA(10,x)=∑k∈Hr(10,k)A^(k,x) where A^(x,y) is a polynomial so that A^(42,59)=1, A^(125,1)=1, A^(135,125)=1 and A^(x,y)=0 for the rest of points in H×H. So A^(x,y) is a bivariate polynomial that passes from these 25 points. This polynomial can obtain as following:
A^(x,y)=∑k∈KuH(x,rowA′^(k))uH(y,colA′^(k))valA^(k)=∑k∈Kx−rowA′^(k)x5−rowA′^(k)5y−colA′^(k)y5−colA′^(k)5valA′^(k)
where rowA′:K={1,43,39,48,73,62,132,65,80}→H={1,59,42,125,135} with rowA′(k=γi)=ωri for 1≤i≤∣∣A∣∣ , ∣∣A∣∣ is the number of nonzero entries in A, and ri is row number of ith nonzero entry and otherwise rowA′(k) returns an arbitrary element in H.
So rowA′(k) on K is a polynomial so that rowA′(1)=42 , rowA′(43)=125, rowA′(39)=135, rowA′(k) returns arbitrary elements of H, for example rowA′(48)=1, rowA′(73)=135, rowA′(62)=125, rowA′(132)=59, rowA′(65)=42 and rowA′(80)=1.
Also, colA′:K={1,43,39,48,73,62,132,65,80}→H={1,59,42,125,135} with colA′(k=γi)=ωci for 1≤i≤∣∣A∣∣ and ci is column number of ith nonzero entry and otherwise colA′(k) returns an arbitrary element in H.
So colA′(k) on K is a polynomial so that colA′(1)=59 , colA′(43)=1, colA′(39)=125, colA′(k) returns arbitrary elements of H, for example colA′(48)=42, colA′(73)=1, colA′(62)=135, colA′(132)=125, colA′(65)=59 and colA′(80)=42.
And , valA′:K={1,43,39,48,73,62,132,65,80}→H={1,59,42,125,135} with valA′(k=γi)=vi for 1≤i≤∣∣A∣∣ where vi is value of ith nonzero entry and otherwise valA′(k) returns zero. So valA′(1)=1, valA′(43)=1, valA′(39)=1, valA′(k)=0 for k∈K−{1,43,39}.
Now, rowA′^, colA′^ and valA′^ are extensions of rowA′, colA′ and valA′ so that are agree on K.
Therefore A^(x,y)=