Commitment

To commit to an -variate multilinear polynomial we assume it (as equivalent) to represent as a list of elements where each element at the position equals to where represents a bit string equivalent to the value. Then, we reorganize this list into the matrix of size in such a way that:

where

Then, for each row, we replace it with its error-correcting code representation, assuming that the matrix will become bigger — it will have size where

The commitment to its matrix will be a Merkle tree, where each leaf will contain a corresponding column. For example:

Openning

To open the polynomial value at a point the prover splits it into two parts and of sizes and . Then, the prover opens the value .

Proving and Verification

To prove that the opening corresponds to the commitment (Merkle tree hash), the prover goes through the following steps:

  • The prover selects a row and shares it.
  • The verifier checks that the element on the position in the row equals .
  • The verifier evaluates an error correcting code of .
  • The verifier selects several columns (in the encoded matrix) and asks the prover to open it with the corresponding Merkle proofs.
  • The verifier selects the corresponding elements from these columns (on the positions ) and checks the equality with the corresponding elements in the encoded row .

Note, that this is a non-zero-knowledge version of the protocol. While sharing the opened row we share the additional private information besides the requested opening so the commitment protocol does not own a perfect hiding property.

In the section 4.6 of https://eprint.iacr.org/2022/1608.pdf the author describes how to make this protocol zero-knowledge.

To achieve this, we add an additional random row into the matrix (WLOG append it downside). The encoded version of this row will also be committed. Then, we suppose to share with verifier. During the verification phase, the verifier becomes able to check that the encoded elements of are valid by adding last column element to the element.

To prove that the opening corresponds to the commitment (Merkle tree hash), the prover goes through the following steps:

  • The prover shares the value.
  • The prover selects a row and shares it.
  • The verifier checks that the element on the position in the row equals .
  • The verifier evaluates an error correcting code of , namely .
  • The verifier selects several columns (in the encoded matrix) and asks the prover to open it with the corresponding Merkle proofs.
  • For the column with index the verifier checks that .