This is a crosspost with zkresear.ch/t/running-sangria-final-proof-in-shielded-mode-on-untrusted-3rd-party-prover.
Introduction
Sangria is a folding protocol for the Plonk prover. In the original model, the prover works iteratively and merges a new execution trace with an execution trace accumulator.
Here we will show, how to build a special high entropy execution trace. After merging with the accumulator, the resulting execution trace could be shown by an untrusted prover with zero data leaks.
This approach allows us to perform linear complexity execution on a thin client and do hard computations on the server without data leaks.
Original protocol
Accumulated instance and witness:
Un′:=(Xn′,un′,Wn′,En′),
Wn′:=(Wn′,en′,rWn′,rEn′)
Iteration instance and witness:
Un:=(Xn,un,Wn,En),
Wn:=(Wn,e,rWn,rEn)
Where W=Com(ppW,W,rW), E=Com(ppW,e,rE).
We use the relaxed Plonk gate equation:
C(a,b,c,u,e)=abqM+qCu2+(aqL+cqO+bqR)u+e
- Prover send to Verifier Tn=Com(ppW,tn,rTn),
where tn=2qCun′un+(anbn′+an′bn)qM+(anqL+cnqO+bnqR)un′+(an′qL+cn′qO+bn′qR)un
-
Verifier sends to prover random r
-
Prover and Verifier output the folded instance
Un+1′=(Xn+1′,un+1′,Wn+1′,En+1′),
where
Xn+1′=Xn′+rXn,
un+1′=un′+run,
Wn+1′=Wn′+rWn,