GKR Input Layer Chunks
Background
In a typical GKR protocol, the prover commits the input, which is interpreted as a multi-linear polynomial, first, proceeds with several rounds of sumchecks, and finally open the polynomial at a random challenge. While this protocol is simple and well-known, it does not consider the case that many circuits may share partially or all of their inputs, leading to two major inefficiencies.
- The same input is commited multiple times, adding the cost of commiting a polynomial.
- It is hard for the prover to justify that different circuits are using the private input, introducing extra cost.
We adopt a slightly different workflow in our protocol where the same input will only be commited once, which serves as the digest of that input across all circuits.
Example
We consider a simple case first where there are three circuits . The input of has a length of , while the the input of and has a length of . For simplicity, we assume is a power of 2, and . The prover would like to prove the following claim:
There exists some input of length , and . To avoid extensive polynomial commitments and to ensure the consistency of inputs across different circuits, the prover would proceed as follows:
- compute .
- Use to initiate the transcript.
- Produce the gkr proof (excluding the final opening) of circuits .
- At the end, the prover is required to open the input of at some random challenge respectively, where . To do so, the prover actually opens at two challenge points , and . Similarly, it opens at , and .
The verifier follows a similar workflow except that in the 4-th step, it constructs the opening of circuit A's input by itself, with the help of the opening of and at . The construction is simple as follows thanks to multi-linearity of the input.
A more general definition
The input of a circuit can be chunked into arbitrary continous pieces , but with the following limitations:
- The size must be a power of 2.
- If a piece has a size of , then its starting position must be a multiple of .
- , where is the whole input.
- .
The prover would take the description of this chunking, along with the commitment of each chunk (and potentially some extra information facilating the opening), and proceed with the similar steps as descriped in the previous example.
Use the output of other circuits
In the proving of a groups of circuits, it may also happen that the output of a circuit, either public or private, is used as the input of many following circuits.
We can adopt a similar approach as described above by commiting the output first and then use that as the signature of all following usages.