category
Overview of Polynomial Commitments #
Polynomial commitment schemes allow one party to prove to another the correct evaluation of a polynomial at some set of points, without revealing any other information about the polynomial. A generalization of scalar commitment schemes such as Pedersen commitments, polynomial commitments are an important building block in zero-knowledge protocols; once the prover has committed to a polynomial, the verifier can query the value of the polynomial at one or many points and be assured that the responses are consistent with some predetermined polynomial which was selected without knowledge of the challenge queries.
Kate et. al.’s polynomial commitment scheme [KZG2010] consists, similarly to Pedersen commitments, of two phases.
- During the commit phase, Prover generates a commitment to some polynomial \(\varf(\varx)\) and shares it with Verifier .
- During the open phase, evaluates at some point and sends , where is a proof (or “witness”) such that can check the correct evaluation of at .
The commitment satisfies certain security properties:
- Hiding: Given a commitment to an unknown degree- polynomial and up to openings , one cannot find the value of at any point not already queried.
- Binding: It is computationally infeasible to construct a commitment and two distinct valid openings at the same point .
Applications of Polynomial Commitments #
Polynomial commitments serve as an important component of several modern noninteractive proof systems.
Vector Commitments #
Given a vector \(\vec{v} = [v_1, v_2, \dots, v_n]\) we can create a succinct commitment to the whole vector v f such that \(\varf(i) = v_i\) . This enables provers to commit to a vector of field elements such that openings prove the value at a specific index. Vector commitments can in turn be used as a building block for Verkle Trees, a variant of Merkle trees with extremely small proof sizes.
by interpolating a degree- \((n-1)\) polynomialzkSNARKs #
Polynomial commitment schemes are a core primitive in zkSNARKs such as [PLONK] and [Groth16] . These general-purpose zero knowledge proofs encode computations as polynomial identity constraints and then use openings of polynomial commitments at random points to verify polynomial equality. The power of polynomial commitments here comes from the fact that two distinct degree- polynomials over a field of order may intersect in at most points, and thus agree at a random point with probability at most .
The KZG Construction #
Bilinear Pairings #
KZG is a pairing-based protocol, meaning it works over a group with an efficiently computable bilinear pairing.
Let
, and be abelian groups of prime order . and will be written additively while will be multiplicative. A bilinear pairing is an efficiently computable function such that$$ e(a\cdot x, b \cdot y) = e(x, y)^{ab} $$
for all \(x \in \cgroup_1, y \in \cgroup_2 \) . We generally assume that is non-degenerate, meaning that is not the trivial function mapping all pairs to .
The KZG commitment scheme was originally presented in the “type-1” setting, where
. In practice, and in our presentation here, the scheme is generally implemented in the “type-3” setting, where in the sense that there is no efficiently computable isomorphism between the two groups.Common choices of pairing-friendly groups are the Barreto-Naehrig [BN05] and Barreto-Lynn-Scott curves [BLS12-381] .
Trusted Setup #
KZG requires a setup procedure to be carried out by a trusted third party. In practice this setup is often performed as a distributed multiparty computation, such that as long as one participant is honest the setup is secure.
The public parameters are
, and , with generators and a nondegenerate bilinear pairing. Let also be publicly chosen; will be the maximum degree of committed polynomials.The setup procedure then computes
$$ \begin{align*}
\mathbf{SK} &= \sample{\alpha}\\
\mathbf{PK} &= \langle g_1, \alpha\cdot g_1, \alpha^2 \cdot g_1, \dots, \alpha^t \cdot g_1, g_2, \alpha \cdot g_2\rangle
\end{align*} $$
and publishes .
This pre-generated
is sometimes known as a “Structured Reference String”
must be kept secret and destroyed.
If a party knows the value
then they can forge openings of a commitment to at with putative value by computing
Commit #
A commitment to a polynomial
is simply the group element . Because the prover does not know and thus cannot compute the value directly, the evaluation is carried out in the exponent as follows:Given , to form a commitment to with , compute and publish
Open #
For any degree-
polynomial , the polynomial has a root at and thus can be factored as for some degree- polynomial . The witness to an opening of at is then .More concretely, to open a commitment
to polynomial at point , compute the quotient and compute the witness asReveal
.Verify #
Verification of an opening of \(\varf\) at \(\varx_0 \) \alpha\) , we can think of the check as happening at a random point and thus with high probability succeeds only if the polynomial identity \(\varf(X) \equalQ (X- \varx_0) \cdot \varf_{\varx_0}(X) + \varf(\varx_0) \) holds at all points.
with witness \(\varw = \varf_{\varx_0}(\alpha)\cdot g_1 \) amounts to checking in the exponent that \( \varf(\alpha) \equalQ (X- \varx_0)(\alpha) \cdot \varf_{\varx_0}(\alpha) + \varf(\varx_0) \) . Since the prover does not know the value of \(Concretely, to verify an evaluation \( \langle \varx_0, \varf(\varx_0), \varw \rangle \)
on commitment \(\varC\) , check$$e(\varC, g_2) \equalQ e(\varw, \alpha \cdot g_2 - \varx_0 \cdot g_2) \cdot e(g_1, g_2)^{\varf(\varx_0)}$$
To see that the scheme is complete in the sense that every correctly computed opening passes verification, we compute
$$ \begin{align*}
&e(\varw, \alpha \cdot g_2 - \varx_0 \cdot g_2) \cdot e(g_1, g_2)^{\varf(\varx_0)}\\
&= e(\varf_{\varx_0}(\alpha)\cdot g_1, (\alpha - \varx_0)\cdot g_2) \cdot e(g_1, g_2)^{\varf(\varx_0)}\\
&= e(g_1, g_2)^{\varf_{\varx_0}(\alpha)\cdot (\alpha - \varx_0) + \varf(\varx_0)}\\
&= e(g_1, g_2)^{\frac{\varf(\alpha) - \varf(\varx_0)}{\alpha - \varx_0} \cdot (\alpha - \varx_0) + \varf(\varx_0)}\\
&= e(g_1, g_2)^{\varf(\alpha)}\\
&= e(\varf(\alpha)\cdot g_1, g_2)\\
&= e(\varC, g_2)
\end{align*} $$
Hardness Assumptions #
Discrete Logarithm #
The hiding property of KZG commitments relies on the hardness of the discrete logarithm in the group
.#
-Strong Diffie HellmanThe binding property requires the
-Strong Diffie Hellman ( -SDH) assumption: Given it is hard to find a pair . This is a slightly stronger form of the -Polynomial Diffie Hellman assumption that, given , it is hard to find .-SDH implies the computational Diffie Hellman assumption, as well as the hardness of the discrete logarithm problem.
KZG Variants #
Indistinguishable and Unconditionally hiding (“Pedersen”) variants #
The KZG commitment scheme as presented above can be viewed as a generalization of the Discrete Log commitment Pedersen commitments solve this problem by adding a random masking value and an extra random public generator such that . This commitment is now indistinguishable and unconditionally hiding: for any value there exists some unique such that , so even a computationally-unbounded adversary cannot learn from , if is unknown.
. This scheme is binding and is hiding against a computationally-bounded adversary when is chosen uniformly at random, but lacks indistinguishability: if is drawn from a small set known to the adversary then the adversary can distinguish which of the elements was committed. For example, if Alice wants to commit to a single bit then she will either publish or and Bob can clearly learn which bit was committed.In a similar vein, let
be a degree- polynomial.- An adversary capable of solving the Discrete Log problem can find the discrete log of and acquire . Thus the scheme is only computationally hiding.
- If is chosen from a small set, say , then given openings an adversary can “guess and check” the value of . Thus the scheme does not possess indistinguishability.
There are two common approaches to resolve these issues:
- Choose one extra point on at random: if you want to commit to “useful” points, instead commit to points, where the last point is chosen uniformly at random. Then, any subset of the useful points may be revealed without breaking indistinguishability.
- Use the “Pedersen Variant”: let be an agreed-upon random generator of . To commit to a degree- polynomial , choose a random degree- polynomial and publish . To open at a point , let reveal
Security note:
must be chosen independently from , i.e., no one may know the discrete log of with respect to . If Alice knows such that then the commitment scheme fails to be binding:If
then
$$ \begin{align*} \varC_r(x) &= x \cdot g_1 + r \cdot h_1\\ &= x\cdot g_1 + {(s \cdot r)}\cdot g_1\\ &= (x + (y - x) + s(r - \frac{y - x}{s}))\cdot g_1\\ &= y\cdot g_1 + (r - \frac{y - x}{s})\cdot h_1\\ &= C_{r-\frac{(y - x)}{s}}(y) \end{align*}$$
Security Pitfalls #
- Small-order elements: Pairing based cryptography often involves elliptic curve groups of composite order. Any elliptic curve points accepted from untrusted parties must be verified to reside in the proper large prime-order subgroup.
- Polynomial interpolation: If points on a degree- polynomial are revealed, then all further points can be recovered.
- Trusted setup: If using a trusted setup, must be generated with strong randomness and erased immediately after generating .
References #
- [KZG2010] Polynomial Commitments (2010).
- [Verkle Trees] Verkle trees.
- [PLONK] PLONK: Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of Knowledge (2019).
- [Groth16] On the size of pairing-based non-interactive arguments (2016).
- [Pairing-Friendly Curves] Pairing-Friendly Curves.
- [PBC] Pairing-based cryptography.
- 登录 发表评论
- 3 次浏览
最新内容
- 21 hours ago
- 1 day 20 hours ago
- 1 day 20 hours ago
- 1 day 21 hours ago
- 2 days 16 hours ago
- 2 days 17 hours ago
- 2 days 17 hours ago
- 2 days 17 hours ago
- 2 days 17 hours ago
- 2 days 18 hours ago