A. Optimizations
This contains all the optimizations made from the methods of BDFG21 and why they are correct. Please read the paper first 😘.
Method 1
This method is the fastest method for opening, and slightly slower for verification than Method 2. But, as written in the paper, verification is impractically slow for any appreciable number of polynomials/points. So here, we make an assumption to make the computation reasonable: each polynomial in is opened at all the same points, that is (using the notation from the paper) . We also assume each polynomial is the same degree, .
Method 1, Opening
Let . For brevity, assume sums over are done as
The prover has to compute, , which means they must compute the coefficients of and then do scalar multiplications and some addition. is defined as Here, is the unique degree polynomial such that . Note that polynomial fraction divides cleanly, because for all , meaning it has factors of , and so does .
The term is just the unique minimal degree polynomial you need to subtract from to allow to cleanly divide it. But, this also means that is simply the remainder of dividing and . And the same applies for : is just the remainder you get when you divide the sum of s by ! So all they need to do in order to compute is to
- Compute
- Use a polynomial division algorithm to divide by
- Take the result and throw away the remainder
This makes opening very fast, because no interpolation is needed.
Method 1, Verification
For verification, the verifier needs to do a little more legwork than the prover. Let the commitment to the -th polynomial be
First, the verifier needs to compute That's simple enough, now they have to compute Constraining the points lets them compute a single pairing instead of ! Now let's look at each side of pairing. To compute the LHS, they need to compute . Sadly, there's no nice way around this here, it must be interpolated, but they can interpolate once rather than interpolate each . That leaves us with
-
scalar mults
-
scalar mults
Then all they're left with is the single pairing. Next they have to compute . Computing is pretty straightforward, and all they are left to do is the scalar multiplications. If you already know your ahead of time, the term can be cached.
This leaves us with the following amount of operations (other operations impact runtime fairly little)
Operation | Open quantity | Verify quantity |
---|---|---|
Polynomial Interpolation | 0 | 1 |
G1 Scalar Multiplication | ||
G2 Scalar Multipcication | 0 | (can be cached) |
Pairing | 0 | 2 |
Interestingly, the opening time gets smaller as the size of grows, due to the growing degree of the vanishing polynomial.
Method 2
Method 2 is an equally secure way to generate blocked openings, which biases computation slightly more to the opener than the verifer. They use the same assumptions as in Method 1.
Method2, Opening
The prover computes for since so . This looks very familiar from method 1! Here they just compute then compute the quotient and for now, ignore the remainder. Then they compute . This is scalar multiplications.
This method has additional challenge other than , called which must take into account . After seeing , the verifier sends a . In reality this should be abstracted away using a Fiat-Shamir transform.
The prover then computes for
Here we notice that we have already computed when we computed the remainder of . All they have to do is take this remainder, evaluate it at , and then subtract it from . They then evaluate , compute , then compute the polynomial and evaluate .
Here, is of degree , so computing involves scalar multiplications.
The proof then consists of .
Method 2, Verification
The verifier receives , the commitments , the evaluations of the at each and computes To do this, they do lagrange interpolation of , evaluate it at , then do the single scalar multiplication. Computing is scalar multiplications, and one more for computing . Next the verifier checks Which involves 2 pairings, and 2 scalar multiplications, yielding
Operation | Open quantity | Verify quantity |
---|---|---|
Polynomial Interpolation | 0 | |
G1 Scalar Multiplication | ||
G2 Scalar Multipcication | 0 | |
Pairing | 0 |
Comparing the two methods, we get
Operation | Method 1 Open | Method 2 Open | Method 1 Verify | Method 2 Verify |
---|---|---|---|---|
Polynomial Interpolation | 0 | 0 | 1 | |
G1 Scalar Multiplication | ||||
G2 Scalar Multipcication | 0 | 0 | (can be cached) | |
Pairing | 0 | 0 | 2 |