A polynomial commitment scheme is a cryptographic protocol that allows one party (the prover) to commit to a polynomial without revealing its coefficients. Subsequently, the prover can demonstrate to another party (the verifier) that the polynomial evaluates to a specific value at a particular point, without disclosing any other information about the polynomial. Polynomial commitment schemes are an essential component in various zero-knowledge proof systems. The development of these schemes significantly influences the iteration and evolution of zero-knowledge proof systems. Currently, the most common polynomial commitment schemes include FRI [1](based on hash functions), KZG[2] (based on elliptic curves), and Bulletproofs [3] (also based on elliptic curves).
Initially, Plonky (2019) used KZG polynomial commitments. Plonky2 (2022) incorporated FRI polynomial commitments inspired by the design of STARK. Plonky3 (2024) further introduced the Brakedown polynomial commitment scheme.
KZG polynomial commitments are implemented on elliptic curves. Their advantage is low verification cost when applied to univariate polynomials. However, most of the prover's work involves extensive FFT (to generate polynomials) and MSM (to generate polynomial commitments) calculations, resulting in slow proving speeds. FRI polynomial commitments, based on hash functions, do not require elliptic curve MSM operations. By leveraging recursive computation techniques, FRI enhances efficiency, balancing prover and verifier costs depending on the Reed-Solomon [4] code rate used in the protocol. The Brakedown [5] polynomial commitment scheme also uses hash functions and integrates error-correcting code theory, making it faster than FRI, though the proofs are significantly larger. Compared to KZG, FRI and Brakedown offer faster proving speeds and quantum security, but lack homomorphic hiding properties, limiting their application in certain scenarios.
In 2021, Alexander Golovnev and colleagues proposed the Brakedown polynomial commitment scheme, drawing on linear-time encoding from [6] and the Spartan linear-time interactive proof system design from [7]. Brakedown is considered the fastest polynomial commitment scheme currently available. As a result, it has been referenced in both Orion [8] and Binius [9][10], and incorporated into the latest Plonky3. Its main drawback is the larger proof size.
The Brakedown polynomial commitment scheme evolved from the linear-time commitment scheme, primarily improving the linear-time encoding part by utilizing Expander Graphs. Its main technical components are illustrated in the diagram below.
In mathematics, a tensor can be understood as a multilinear map, i.e., a mapping from several linear spaces to a field. The relationship between tensors of different orders (dimensionality) and other data types is as follows:
• Scalar (0-order tensor): A single numerical value.
• Vector (1-order tensor): A one-dimensional array.
• Matrix (2-order tensor): A two-dimensional array.
• Higher-order tensor: Arrays of three or more dimensions, such as a color image (each pixel containing RGB values).
There are various types of tensor products, such as the outer product, inner product, direct product, and Kronecker product. Here, we focus on the direct product (commonly referred to as the tensor product), described as: for two tensors of any order, each component of the first tensor multiplies with each component of the second tensor. The collection of these combinations still forms a tensor, known as the tensor product of the first and second tensors. The order of the resulting tensor equals the sum of the orders of the factor tensors. Here is an intuitive example:
Typically, when we refer to the tensor product, we mean the direct product, which has the effect of expanding the vector dimension. In the above example, two one-dimensional vectors expand into a two-dimensional matrix. In zero-knowledge (ZK) systems, the tensor product used is the direct product, where a matrix composed of polynomial coefficients is decomposed into the tensor product of two vectors, as shown below:
Error correcting codes (ECC) are techniques used to control errors in data transmission or storage. They achieve error detection and correction by adding redundant information to the original data, ensuring data integrity and reliability. ECCs are widely used in the field of communications. The main processes include encoding, transmission/storage, decoding, and data recovery. One simple example of an error correcting code is the repetition code, where each data bit is sent three times. During decoding, the bit with the highest repetition is taken as the correct one. This method can correct at most one error bit or recover two missing bits. Here is a specific example:
Transmission Data | Encoded Data | Received Codeword | Decoded Data |
---|---|---|---|
0 | 000 | 000 | 0 |
001 | |||
010 | |||
100 |
Transmission Data | Encoded Data | Received Codeword | Decoded Data |
---|---|---|---|
1 | 111 | 111 | 1 |
110 | |||
101 | |||
011 |
Table 1: Encoding and Decoding Process of Repetition Codes
▲ BCH Codes: BCH codes use finite fields and polynomial computations. An error-detecting polynomial can be constructed to allow the receiver to detect errors. The basic idea of BCH encoding is: if the message is
▲ Reed-Solomon Codes: Reed-Solomon codes are a subset of BCH codes. They use a primitive polynomial called a generator polynomial, given by:
Since Reed-Solomon encoding is also performed over a finite field, here
where
The Reed-Solomon encoding is then:
Here, the degree of
Therefore, the encoded codeword is
A hash function takes input data, scrambles it, and creates a fingerprint called a hash value. The hash value is typically represented as a short string of random letters and numbers. Mathematically, it is expressed as:
where
The characteristics of hash functions are:
One of the evolutionary goals of zero-knowledge (ZK) systems is to find computation-friendly collision-resistant hash functions. Currently, common hash algorithms include SHA256, Keccak, Blake3, Poseidon2, and Poseidon3 (detailed in previous articles).
Figure 2: Structure of a Merkle Tree
Merkle trees are fundamental to blockchain technology. First, in a blockchain, all transactions are organized in a Merkle tree format and correspond to the block header, ensuring the immutability of transaction information within the block. Second, in a Merkle tree, any change in a leaf node will alter the root hash, making it easy to identify which data has changed within a large dataset, thus making the entire data verification process very efficient. Third, by leveraging the one-way property of hash functions, zero-knowledge proof systems can be constructed, allowing polynomial commitments to be verified through partial nodes without revealing the specific content. Fourth, Merkle trees are used in the Proof of Work (PoW) consensus algorithm, where the main operation involves providing certain data and finding other data to combine and calculate a root hash value smaller than a given target (commonly known as mining). Current cryptocurrencies like Bitcoin use the PoW consensus.
In summary, the Merkle tree's ability to efficiently and securely verify data, detect changes, and support zero-knowledge proofs and consensus algorithms makes it a cornerstone of modern blockchain technology.
The foundation of Brakedown is constructing polynomial commitments using linear codes. The advantage lies in the proof size and verification time complexity, both being the square root of the length.
Below is a simplified process of a polynomial commitment using linear codes. Suppose the length of the coefficient vector of polynomial
By the above equation, the polynomial coefficients of length
First, apply linear error-correcting codes to encode each row of the matrix 𝐵 denoted as
Next, commit to each column (with 𝑘 values) of the matrix and build the first Merkle tree. Then, use the root hashes of each column's Merkle tree as leaf nodes (totaling 𝑙 nodes) to construct a second Merkle tree. Finally, the polynomial commitment is based on the second Merkle tree.
In the proof of evaluation, two steps are required: the Proximity Test and the Consistency Test. The Proximity Test ensures that the matrix committed by the Merkle Tree indeed commits to
Proximity Test: The verifier sends a random vector
First, the verifier encodes 𝑢 to get
Next, the verifier selects 𝑙 random points from
Consistency Test: This step is similar to the Proximity Test, but instead of using a random vector
First, the polynomial evaluation can be represented as the inner product of the coefficient matrix and the coordinate matrix:
In the above equation, the matrix
This means that for any input
During the Consistency Test phase,
If this condition is not met, the test fails. The complete commitment scheme is illustrated as follows.
Commit:
P → V: a commit vector
Proximity Test:
V → P: a random vector
P → V: a vector
// Now V probabilistically checks consistency between
V: chooses
V queries all
V confirms
Consistency Test
Let
The evaluation phase is identical to the testing phase except that
If all consistency tests pass, then V outputs
Linear-time encoding is a type of linear error-correcting code, with its core component being the Expander Graph, as illustrated below:
Figure 3: Expander Graph
An Expander Graph is a type of sparse graph with strong connectivity, denoted as
Given a set of parameters:
Here,
In this content,
The encoding algorithm is a recursive process aimed at constructing a linear mapping
Figure 4: Linear-Time Encoding Based on Expander Graph
Brakedown does not require a trusted setup, and both the commitment and prover time are
Brakedown is a scalable commitment scheme, suitable for both univariate polynomial commitments and multilinear polynomial commitment schemes. With the development of new hash functions and error-correcting codes, there is significant potential for further optimization in the future.
As analyzed above, the only drawback of the Brakedown polynomial commitment is the relatively large proof size. Therefore, the optimization of Brakedown focuses on reducing the proof size. Existing methods include:
① Parallel Execution of Proximity Test and Consistency Test: These tests can be executed in parallel, and the same query data can be used for both testing and evaluation. Alternatively, the Proximity Test can be omitted entirely.
② Rearranging the Polynomial Coefficients: This approach, used by Ligero [11], involves altering the arrangement of polynomial coefficients. Instead of arranging them in a square matrix, the row-to-column ratio can be adjusted according to the actual encoding and query methods. This optimization can significantly reduce the proof size.
In addition to the optimizations mentioned above, this article considers another potential approach: expanding the dimensional space of the polynomial coefficient matrix and representing polynomial evaluations using a two-dimensional tensor product (to be developed).
References:
[2] Kate, A., Zaverucha, G.M., Goldberg, I.. Constant-Size Commitments to Polynomials and Their Applications. International Conference on the Theory and Application of Cryptology and Information Security, 2010.
[3] https://doc-internal.dalek.rs/bulletproofs/notes/inner_product_proof/index.html
[4] Ulrich Haböck. A summary on the fri low degree test. Cryptology ePrint Archive, Paper 2022/1216, 2022.
[5] https://eprint.iacr.org/2021/1043.pdf?ref=hackernoon.com
[6] J. Bootle, A. Chiesa, and J. Groth. Linear-time arguments with sub-linear verification from tensor codes. In TCC, 2020.
[7] S. Setty. Spartan: Efficient and general-purpose zkSNARKs without trusted setup. In CRYPTO, 2020.
[8] T. Xie, Y. Zhang, and D. Song, “Orion: Zero knowledge proof with linear prover time,” Cryptology ePrint Archive, Paper 2022/1010, 2022, https://eprint.iacr.org/2022/1010.
[9] B. Diamond, J. Posen,“Succinct Arguments over Towers of Binary Fields,” Cryptology ePrint Archive, Paper 2023/1784, 2023, https://eprint.iacr.org/2023/1784.pdf
[10] https://github.com/IrreducibleOSS/binius
[11] S. Ames, C. Hazay, Y. Ishai, and M. Venkitasubramaniam. Ligero: Lightweight sublinear arguments without a trusted setup. In CCS, 2017