GKR Input Layer

We have now seen that a GKR interactive proof begins with the prover making a claim on the layered circuit's output layer and reducing this claim via sumcheck and claim aggregation to claims on layers closer to the circuit's input layer, e.g. .

At the end of this process, we should be left with only claims on input layer(s), e.g.

These claims are optionally aggregated via interpolative claim aggregation (note that RLC claim aggregation does not work for input layer claims; see here for more details) into a single claim

which the verifier must check on its own, optionally with help from the prover. There are several types of input layers, and we describe the methodology for each.

Public Inputs

Public input layers are circuit inputs where the prover sends the values to the verifier in the clear. In particular, this means that the verifier knows the full set of evaluations of over and can evaluate the MLE on its own. Thus:

  • Before the prover generates the output layer claim challenges ( above), they send these evaluations to the verifier by absorbing them into the transcript.
  • When the verifier is ready to check the claim , they use the aforementioned evaluations to directly evaluate at and check that the evaluation is indeed the claimed .

Committed Inputs

Committed input layers are circuit inputs where the prover sends a commitment to the values (generally as a polynomial commitment). Committed inputs are not directly revealed to the verifier (although they may leak information unless a zero-knowledge polynomial commitment scheme, like Hyrax, is used), and thus the prover must additionally help the verifier when they wish to check the input claim by providing an evaluation proof, which roughly shows that the polynomial which the prover committed to earlier actually evaluates to at the evaluation point .

(See KZG10, page 6, and Tha24, page 188 for more details). Let be the security parameter. Let be the MLE which the prover wishes to commit to. Let be the evaluation point, and let be the claimed value. Roughly speaking, a polynomial commitment scheme (PCS) consists of the following four functions:

  • . here is the commitment key which the prover has access to while committing and generating evaluation proofs, and here is the verification key which the verifier has access to while checking an evaluation proof. This function takes in a single security parameter such that the resulting commitment scheme has roughly bits of soundness.
  • . The function takes in an MLE (for our purposes; in general this can be a univariate or multivariate polynomial of higher degree) and generates a commitment to be sent to the verifier.
  • . The function takes in an evaluation point and produces an evaluation proof that the original polynomial which was committed to in actually evaluates to . Note that the verifier uses to check the evaluation proof .
  • . The function takes in a commitment and an MLE and outputs whether that MLE is the one committed to by , i.e. whether .

In addition to the above, a commitment scheme must satisfy hiding and evaluation binding.

  • Hiding implies that given a commitment and fewer than evaluation pairs, an adversary cannot determine the evaluation for a point not in the set of evaluation pairs.
  • Evaluation binding implies that given an evaluation point and a claimed value , a prover should be able to produce an accepting evaluation proof for generated with negligible probability.

In general, we run once and distribute the resulting to the prover and verifier, and focus on the and functions. During the interactive GKR protocol, the prover and verifier do the following:

  • The prover invokes the functionality on and sends the resulting to the verifier. They send this value to the verifier before any claims on output layers (including challenges) are generated. Note that this takes the place of the prover sending the evaluations of in the public inputs section above.
  • After the prover has sent all circuit inputs to the verifier in either committed or direct evaluation form, the verifier generates the output claim challenges and the prover and verifier engage in the GKR claim reduction protocols until we're left with a single claim .
  • The prover then invokes the functionality on and the aforementioned values to produce evaluation proof , which the verifier receives and checks.

Remainder's GKR prover uses a non-ZK version of the PCS implicit in AHIV17 (also explicitly described in the GLS+21 paper as Shockwave), which we briefly detail in our documentation's Ligero PCS page. Remainder's Hyrax prover uses the ZK PCS explicitly described within WTS+17, which we briefly detail in our documentation's Hyrax PCS page.

"Fiat-Shamir" Inputs

A third type of circuit "input" is that of a "Fiat-Shamir" challenge value. These inputs are different from the others in the sense that the prover does not supply them at all, but rather the (interactive) verifier sends them after the prover has committed to all other input values. These values are used when the circuit itself is computing a function which requires a random challenge (see LogUp, e.g., for one usage of such challenges). In general, claims on these layers are checked via the following:

  • First, as mentioned, the (interactive) prover sends all other inputs (both public and committed) to the verifier.
  • Next, the verifier sends random values (we can view these as the evaluations of over ) to the prover as challenge values.
  • When the verifier needs to check a claim on the Fiat-Shamir input layer, it can do so by simply referencing the evaluations it generated earlier to evaluate at and ensure that the evaluation is actually , exactly as is the case for public inputs.