PLONK(opens new window) stands for Permutations over Lagrange-bases
for Oecumenical Noninteractive arguments of Knowledge. But do not mind the
incomprehensible words – PLONK is an incredibly useful cryptographic protocol.
Let’s say we are in the field Fp
and in it, we have the multiplicative subgroup
H={1,w,w2,...,wn−1}.
We also have the polynomial
ZH(x),
for which it holds:
ZH(x)=0forx∈H
For example, we would like to prove that for each
x∈H:
To achieve this, the prover computes the polynomial
hv(x)=ZH(x)h(x).
The prover then computes commitments[a(s)]1,[b(s)]1,
and
[hv(s)]1
to the polynomials
a,b,andhv,
respectively.
The prover then proves that it knows the polynomials behind the commitments.
It opens the polynomials at
χ
(chosen by a verifier):
a¯=a(χ)
b¯=b(χ)
hv¯=hv(χ)
That means the prover proves that
a,bandhv
evaluate to
a¯,b¯,andhv¯
at
χ,
respectively. The prover provides:
Note that the verifier computes
hv¯
as follows:
hv¯=ZH(χ)a(χ)b(χ)+1
Why is this secure?
This will be just a bit of hand-waving (I say this too many times).
Let’s say the attacker does not know
a(x)
and
b(x)
such that:
hv(x)ZH(x)=a(x)b(x)+1
Note that the equation above ensures:
a(x)b(x)+1=0forx∈H
The attacker could easily take polynomials
a(x),b(x)
and define
c(x)
such that
(considering ZH(χ) as a constant):
c(x)ZH(χ)=a(x)b(x)+1
However, the prover needs to commit to
c(x)
before knowing the challenge
χ.
That means that the prover cannot subsequently change the polynomial
c(x).
When committing to
a(x),b(x),c(x),
the value
ZH(χ)
could be any element of
Fp,
and the probability of the prover guessing it is negligible.
Multi-opening
What if the prover needs to prove multiple relations?
Let’s say the prover would like to prove for
x∈H:
a(x)b(x)+1=0
a(x)+b(x)=0
a(x)2−b(x)+1=0.
Could opening a polynomial for each relation be avoided?
Could one opening suffice?
It could and the reason, again, is probability.
Another challenge is needed for this, let’s say
χ1.