Try   HackMD

Understand PLONK: The PLONK Prover

At the heart of the PLONK protocol lies one of its most fascinating components: the prover. After the universal trusted setup and the arithmetic representation of our computation, the prover takes center stage in constructing a convincing zero-knowledge proof that will persuade the verifier without revealing any sensitive information.

The prover's role in PLONK represents a remarkable achievement in zero-knowledge proof systems, offering a delicate balance between efficiency and security. Unlike its predecessors, PLONK's prover leverages the protocol's universal preprocessing to generate proofs that are both compact and computationally efficient, while maintaining the critical property of zero-knowledge.

The PLONK prover is broken down into rounds and using this rounds, we would be understanding how the PLONK proof is genearted;
As the protocol progresses, we would be creating some polynomials and also for polynomial mathematical relationships which would be examine and sealed(polynomail commitment schemes) to be used to create the PLONK protocol's Proof.

Recall: CommonPreprocessedInput {

Sσ1,
Sσ2
,
Sσ3
,
qL
,
qR
,
qO
,
qM
,
qC
,
a
,
b
,
c
} which was obtained when PLONKish arithmetization was applied to the circuit including the witness.

Round One

Objective
This round aims to create the polynomials

a,b,c and commit to them, this polynomails are expressions of the computational trace of the circuit's exectution given this witnesses;

Procedure
The first round of the PLONK protocol tells us how to;

  • initialize the Transcript with some circuit binding vaules, this is to improve soundness of the protocol (CommonPreprocessedInput).
  • Compute random field elements, this would be used for the blinding_factor. (
    r1,r2,r3,r4,r5,r6
    )
  • encode assignment vectors
    a,b,c
    creating a polynomial by interpolating this
    T
    matrix columns at the domain
    H
    (roots of unity).
  • create polynomial
    a,b,c
    by blinding
    a,b,c
    polynomials using the blinding factors created above, this is important to ensure the protocol is "Zero Knowledge". learn more about the concept of blinding polynomails here
  • Commit to polynomial
    a,b,c
    and append this commitment to the transcript.

Mathematical translation;

r1,r2,r3,r4,r5,r6F
a=(r1X+r2)ZH+a

b=(r3X+r4)ZH+b

c=(r5X+r6)ZH+c

poly-commit

[a]1,[b]1,[c]1

Round Two

Objective
To enforce consistency across shared wires in the circuit using a permutation argument.

Procedure

  • Compute permutation challenges
    β
    and
    γ
  • Compute
    z(x)
    , a polynomails encoding the wiring/copy-constriant of the circuit.
  • Blind
    z(x)
    following the same concept use in Round One.
  • Commit to the
    z(x)
    to obtain
    [z]1

Mathematical translation;

r7,r8,r9F
(β,γ)F

z(x)=(b7X2+b8X+b9)ZH(X)+L1(X)+i=1n1Li+1(X)j=1Q(wj+βωj+γ)(wn+j+βk1ωj+γ)(w2n+j+βk2ωj+γ)(wj+σ(j)β+γ)(wn+j+σ(n+j)β+γ)(w2n+j+σ(2n+j)β+γ)

poly_commit(z) =
[z]1
and append this commitment to the transcript

Round Three

Objective
Round three, been the most complicated and computationaly intensed round, the goal that is to be achieved is to create a poolynomial

t that encodes all information the circuit is comprised of along side the witness and commit to it. This would not be as striaght forward as the last rounds because the degree of the polynomial is going to be
3n+5
where
n
is the number of gate, this would breaks because the trusted setup ceremony was not done to handle this.
A clever solution to handle this, is to break the polynomail in 3 before commiting to the polynomial.

Procedure

  • Sample
    α
    from the transcript
  • compute
    t(x)
  • commit to
    tlo(x)
    ,
    tmid
    , and
    thi(x)
    and append to the transcript

Mathematical translation

αF
t(X)=(a(X)b(X)qM(X)+a(X)qL(X)+b(X)qR(X)+c(X)qO(X)+PI(X)+qC(X))ZH(X)+α(a(X)+βX+γ)(b(X)+βk1X+γ)(c(X)+βk2X+γ)z(X)ZH(X)α(a(X)+βSσ1(X)+γ)(b(X)+βSσ2(X)+γ)(c(X)+βSσ3(X)+γ)z(Xω)ZH(X)+α2(z(X)1)L1(X)ZH(X)

The polynomial

t(X) is split into smaller polynomials of degree at most
n+5
:
t(X)=tlo(X)+Xntmid(X)+X2nthi(X)
,
where
tlo(X),tmid(X),thi(X)
are polynomials of degree
<n
.
Random scalars
b10,b11F
are used to introduce randomness to the split polynomials:
tlo(X):=tlo(X)+b10Xn
,
tmid(X):=tmid(X)b10+b11Xn
,
thi(X):=thi(X)b11
.
This ensures that:
t(X)=tlo(X)+Xntmid(X)+X2nthi(X)
.
The prover commits to the split polynomials:
[tlo]1:=[tlo(x)]1,[tmid]1:=[tmid(x)]1,[thi]1:=[thi(x)]1.

Round Four

Objective
In the previous rounds we have obtained a good amount of polynomials, operations over polynomials are not very computationally friendly, to make this more efficient, we would be reducing this polynomial to a Scalar Field element which is significantly more cheaper.

Procedure
obtain

ζ from transcript

The prover computes the evaluations of various polynomials at

z and
zω
, where
ω
is a primitive root of unity for the evaluation domain.

Polynomials and Their Evaluations:

  1. Wire Polynomials:
    a¯=a(z),b¯=b(z),c¯=c(z),

    representing the evaluations of the left, right, and output wires at
    z
    .
  2. Permutation Selectors:
    s¯σ1=Sσ1(z),s¯σ2=Sσ2(z),

    representing the evaluations of the first and second permutation selector polynomials at
    z
    .
  3. Shifted Permutation Polynomial:
    z¯ω=z(zω)
    ,
    where
    z(X)
    is the permutation polynomial and
    zω
    is the evaluation point shifted by a root of unity.

The prover outputs the following evaluations:

(a¯,b¯,c¯,s¯σ1,s¯σ2,z¯ω).

Round Five

Objective
This is the last stage of PLONK's proof generation algorithm, what would be done here is to create 2 polynomials that combines all other polynomaials that has been obtain in other rounds also making use of the optimization we explored in round 4.

Procedure

vF
The linearisation polynomial
r(X)
aggregates all circuit constraints into a single polynomial for evaluation at
z
:
r(X)=a¯b¯qM(X)+a¯qL(X)+b¯qR(X)+c¯qO(X)+PI(z)+qC(X)α[(a¯+βz+γ)(b¯+βk1z+γ)(c¯+βk2z+γ)z(X)(a¯+βs¯σ1+γ)(b¯+βs¯σ2+γ)(c¯+βSσ3(X)+γ)z¯ω]α2[(z(X)1)L1(z)]ZH(z)[tlo(X)+zntmid(X)+z2nthi(X)].

To prove consistency between committed polynomials and their evaluations, the prover computes two opening proof polynomials:
Opening Proof Polynomial
Wz(X)
:
Wz(X)=1Xz(r(X)+v(a(X)a¯)+v2(b(X)b¯)+v3(c(X)c¯)+v4(Sσ1(X)s¯σ1)+v5(Sσ2(X)s¯σ2))

Shifted Opening Proof Polynomial
Wzω(X)
:
Wzω(X)=z(X)z¯ωXzω
.
The prover commits to these polynomials:
[Wz]1:=[Wz(x)]1,[Wzω]1:=[Wzω(x)]1
.
The final proof output by the prover is:
πSNARK=([a]1,[b]1,[c]1,[z]1,[tlo]1,[tmid]1,[thi]1,[Wz]1,[Wzω]1,a¯,b¯,c¯,s¯σ1,s¯σ2,z¯ω).

The multipoint evaluation challenge u is derived for subsequent verification:
obtain
u
from transcript.

This ensures randomness and ties the evaluations to the transcript’s integrity.


The PLONK prover exemplifies the brilliance of modern zero-knowledge proof systems, transforming abstract mathematical principles into a robust, efficient protocol. Through its structured rounds, the prover ensures that the commitments, constraints, and evaluations are securely generated, maintaining the balance between computational feasibility and cryptographic soundness. By leveraging techniques such as polynomial commitments, blinding, and linearization, the prover creates a succinct proof that encapsulates the circuit’s correctness without revealing any sensitive details.

This step-by-step breakdown of the PLONK prover highlights not only the ingenuity of its design but also the elegance of how its components work together. From initializing the transcript to generating the final proof, each stage contributes to the protocol’s goal of scalability and universality, paving the way for a wide range of real-world applications in privacy-preserving computations and decentralized systems.