2021-02-03 20:34:25 +00:00
|
|
|
# Comparison to other work
|
|
|
|
|
|
|
|
|
|
## BCMS20 Appendix A.2
|
|
|
|
|
|
|
|
|
|
Appendix A.2 of [BCMS20] describes a polynomial commitment scheme that is similar to the
|
|
|
|
|
one described in [BGH19] (BCMS20 being a generalization of the original Halo paper). Halo
|
|
|
|
|
2 builds on both of these works, and thus itself uses a polynomial commitment scheme that
|
|
|
|
|
is very similar to the one in BCMS20.
|
|
|
|
|
|
|
|
|
|
[BGH19]: https://eprint.iacr.org/2019/1021
|
|
|
|
|
[BCMS20]: https://eprint.iacr.org/2020/499
|
|
|
|
|
|
|
|
|
|
The following table provides a mapping between the variable names in BCMS20, and the
|
|
|
|
|
equivalent objects in Halo 2 (which builds on the nomenclature from the Halo paper):
|
|
|
|
|
|
|
|
|
|
| BCMS20 | Halo 2 |
|
|
|
|
|
| :------------: | :-----------------: |
|
|
|
|
|
| $S$ | $H$ |
|
|
|
|
|
| $H$ | $U$ |
|
|
|
|
|
| $C$ | `msm` or $P$ |
|
|
|
|
|
| $\alpha$ | $\iota$ |
|
|
|
|
|
| $\xi_0$ | $z$ |
|
|
|
|
|
| $\xi_i$ | `challenge_i` |
|
|
|
|
|
| $H'$ | $[z] U$ |
|
|
|
|
|
| $\bar{p}$ | `s_poly` |
|
|
|
|
|
| $\bar{\omega}$ | `s_poly_blind` |
|
|
|
|
|
| $\bar{C}$ | `s_poly_commitment` |
|
|
|
|
|
| $h(X)$ | $g(X)$ |
|
|
|
|
|
| $\omega'$ | `blind` / $\xi$ |
|
|
|
|
|
| $\mathbf{c}$ | $\mathbf{a}$ |
|
|
|
|
|
| $c$ | $a = \mathbf{a}_0$ |
|
|
|
|
|
| $v'$ | $ab$ |
|
|
|
|
|
|
|
|
|
|
Halo 2's polynomial commitment scheme differs from Appendix A.2 of BCMS20 in two ways:
|
|
|
|
|
|
|
|
|
|
1. Step 8 of the $\text{Open}$ algorithm computes a "non-hiding" commitment $C'$ prior to
|
|
|
|
|
the inner product argument, which opens to the same value as $C$ but is a commitment to
|
|
|
|
|
a randomly-drawn polynomial. The remainder of the protocol involves no blinding. By
|
2021-02-14 17:30:36 +00:00
|
|
|
contrast, in Halo 2 we blind every single commitment that we make (even for instance
|
2021-02-03 20:34:25 +00:00
|
|
|
and fixed polynomials, though using a blinding factor of 1 for the fixed polynomials);
|
|
|
|
|
this makes the protocol simpler to reason about. As a consequence of this, the verifier
|
|
|
|
|
needs to handle the cumulative blinding factor at the end of the protocol, and so there
|
|
|
|
|
is no need to derive an equivalent to $C'$ at the start of the protocol.
|
|
|
|
|
|
|
|
|
|
- $C'$ is also an input to the random oracle for $\xi_0$; in Halo 2 we utilize a
|
|
|
|
|
transcript that has already committed to the equivalent components of $C'$ prior to
|
|
|
|
|
sampling $z$.
|
|
|
|
|
|
|
|
|
|
2. The $\text{PC}_\text{DL}.\text{SuccinctCheck}$ subroutine (Figure 2 of BCMS20) computes
|
|
|
|
|
the initial group element $C_0$ by adding $[v] H' = [v \epsilon] H$, which requires two
|
|
|
|
|
scalar multiplications. Instead, we subtract $[v] G_0$ from the original commitment $P$,
|
|
|
|
|
so that we're effectively opening the polynomial at the point to the value zero. The
|
|
|
|
|
computation $[v] G_0$ is more efficient in the context of recursion because $G_0$ is a
|
|
|
|
|
fixed base (so we can use lookup tables).
|