LogoLogo
LogoLogo
  • Introduction
    • About Us
    • Notations & Definitions
      • MPC
      • ZK
    • Contribute to this Site!
  • Primitives
    • Multiplication
      • Karatsuba Multiplication
      • Toom-Cook Multiplication
    • NAF (Non-adjacent form)
    • Chinese Remainder Theorem (CRT)
    • Euclidean Algorithm
      • Extended Euclidean Algorithm
      • Binary Euclidean Algorithm
      • Extended Binary Euclidean Algorithm
    • Coding Theory
      • Linear Code
    • Number Theoretic Transform
    • Abstract Algebra
      • Group
        • -Morphisms
        • Batch Inverse
      • Elliptic Curve
        • Weierstrass Curve
          • Coordinate Forms
          • Fast Elliptic Curve Arithmetic and Improved WEIL Pairing Evaluation
        • Edwards Curve
          • Coordinate Forms
          • Twisted Edwards ↔ Short Weierstrass Transformation
        • Batch Inverse for Batch Point Additions
        • Scalar Multiplication
          • Double-and-add
          • GLV Decomposition
        • MSM
          • Pippenger's Algorithm
          • Signed Bucket Index
          • CycloneMSM
          • EdMSM
          • cuZK
        • 2-Chain and 2-Cycle of Elliptic Curves
    • Encryption Scheme
      • ElGamal Encryption
    • Modular Arithmetic
      • Modular Reduction
        • Barrett Reduction
        • Montgomery Reduction
      • Modular Inverse
        • Bernstein-Yang's Inverse
    • Multiset Check
    • Sumcheck
    • Commitment Scheme
      • Fflonk
      • SHPlonk
      • Zeromorph
  • MPC
    • Yao's Garbled Circuits
    • GMW
    • BMR
  • ZK
    • Arithmetization
      • R1CS
      • PLONK
      • AIR
    • Folding
      • LatticeFold
      • Nova
        • Nova over Cycles of Curves
    • Lookup
      • Lasso
      • LogUp-GKR
    • SNARK
      • Groth16
      • HyperPlonk
      • Spartan
        • SPARK
    • STARK
      • Additive NTT
      • Basefold
      • Binius
      • Brakedown
      • CircleSTARK
      • FRI
        • FRI Security Features and Optimizations
      • DEEP FRI
      • STIR
      • WHIR
    • Distributed ZK
      • Ryan's Trick for Distributed Groth16
  • Application
    • zkLogin
    • zkHoldem
    • zkTLS
      • DECO
      • Proxying is enough
  • zkVM
Powered by GitBook
On this page
Export as PDF

Last updated 3 months ago

Introduction

is a new Polynomial Commitment Scheme that is field-agnostic, with verifier complexity of and prover complexity of . While the RS-code used in FRI-IOPP requires an FFT-friendly field, BaseFold eliminates this constraint by introducing the concept of random foldable code, making it usable with sufficiently large fields.

Background

Constant Polynomial in FRI-IOPP

In FRI, the following polynomial is folded using a random value .

After the first round, the polynomial becomes:

If this folding process is repeated times, the resulting polynomial will eventually reduce to a constant polynomial, which looks like:

Protocol Explanation

Foldable Code

The matrix on the left can be transformed into the matrix on the right by applying a row permutation.

If the matrix used in the encoding of a linear code takes the form above, it is referred to as a foldable linear code. Let us define this more formally.

Random Foldable Code

To design a linear code that is foldable and efficiently encodable regardless of its finite field, BaseFold uses this algorithm:

Encoding Algorithm

The encoding can be computed recursively as follows:

This approach is valid and can be proven inductively:

BaseFold IOPP

Multilinear PCS based on interleaving BaseFold IOPP

  1. The prover sends the following to the verifier:

  1. The verifier checks that

Conclusion

In a 256-bit PCS:

  • BaseFold compared to field-agnostic Brakedown:

    • Prover time: Slower

    • Verifier time: Faster

    • Proof size: Bigger with a small number of variables but smaller with a large number of variables.

  • BaseFoldFri compared to the non-field-agnostic ZeromorphFri:

    • Prover time: Faster

    • Verifier time: Faster

    • Proof size: Larger

In a 64-bit PCS:

  • BaseFold compared to field-agnostic Brakedown:

    • Prover time: Slower

    • Verifier time: Faster

    • Proof size: Smaller

  • BaseFoldFri compared to the non-field-agnostic ZeromorphFri:

    • Prover time: Faster

    • Verifier time: Slower

    • Proof size: Larger

In a 256-bit SNARK:

  • BaseFold compared to field-agnostic Brakedown:

    • Prover time: Faster with a small number of variables but similar with a large number of variables.

    • Verifier time: Faster

    • Proof size: Smaller

  • BaseFoldFri compared to the non-field-agnostic ZeromorphFri:

    • Prover time: Similar

    • Verifier time: Similar

    • Proof size: Larger

In a 64-bit SNARK:

  • Both BaseFold and BaseFoldFri, compared to Zeromorph:

    • Prover time: Similar

    • Verifier time: Slower with a small number of variables but faster with a large number of variables.

    • Proof size: Larger

This constant polynomial is identical to the evaluation of the multilinear polynomial at point .

It is well-known that RS (Reed-Solomon) codes are a type of , and the encoding of linear codes can be represented as a matrix-vector multiplication. For example, the encoding of an -RS code, when and , can be represented as follows:

If we divide the matrix on the right into four parts, the red and yellow-colored sections are identical and correspond to the matrix used in RS encoding when and . The green-colored section is equivalent to multiplying the red matrix by a . Similarly, the blue-colored section is equivalent to multiplying the red matrix by another diagonal matrix .

Let , for every . A -foldable linear code is a with a generator matrix and rate with the following properties:

the diagonal matrices satisfies that for every .

the matrix equals (up to row permutation)\

Set ​, where ​ is a distribution that outputs with 100% probability. Such a ​ is referred to as a -foldable distribution.

Sample and set .

Generate ​ using .

Repeat steps 2 and 3 until a ​ of the desired size is obtained.

This type of code is called a Random Foldable Code (RFC). The paper demonstrates that this code has good relative minimum distance. For those interested, refer to Section 3.1 of the paper. Additionally, it is noted that this is a special case of punctured . For further details, consult Appendix D of the paper.

If , return .

Unpack matrix into a pair of matrix .

Set , , and then pack a pair of matrices to matrix.

If , ​, which holds by definition.

If , holds because of the recursive construction of .

To use this in IOPP, we need to ensure that is indeed an encoded random linear combination derived from . To demonstrate this, let ​represent the message at the -th layer and ​ the oracle (or block) at the -th layer. Then, the following holds:

Thus, for , the following conditions are satisfied, where ​ is the length of :

The values and are evaluations of the polynomial at and , respectively. When using the sampled value at each -th layer, can be constructed as follows, ensuring that encodes the message :

Using this property, an IOPP (Interactive Oracle Proof of Proximity) can be designed. Here, refers to the computation of a degree-1 polynomial such that .

Prover witness: the polynomial

For from to :

The verifier samples and sends it to the prover.

For each index , the prover

sets .

sets .

The prover outputs oracle .

The verifier samples an index .

For from to , the verifier

queries oracle entries .

computes .

checks that .

if and , update .

If is a valid codeword w.r.t. generator matrix , output accept, otherwise output reject.

When performing the sumcheck protocol, the problem is reduced to an evaluation claim. Interestingly, the BaseFold IOPP shares a similar structure: given an input oracle that encodes a polynomial , the final oracle sent by the honest prover in the IOPP protocol is precisely an encoding of a random evaluation , where .

Thus, the sumcheck protocol and the IOPP protocol can be executed interleaved, sharing the same random challenge. At the end, the verifier needs to check whether the evaluation claim , obtained through the sumcheck protocol, matches the final prover message from the IOPP protocol. It performs as follows:

Public input: oracle , point , claimed evaluation

Prover witness: the polynomial

For from to :

Verifier samples and sends to the prover.

For each , the prover

sets .

sets .

The prover outputs oracle .

if , the prover sends verifier.

outputs accept.

and for every , .

.

Written by from

QQQ
(α0,α1,α2,…,αk)(\alpha_0, \alpha_1, \alpha_2, \dots, \alpha_k)(α0​,α1​,α2​,…,αk​)
Q(X0,X1,X2,…,Xk)=c0+c1X0+c2X1+⋯+c2k−1−1X0X1⋯XkQ(X_0, X_1, X_2, \dots,X_k) = c_0+ c_1X_0 + c_2X_1 + \cdots + c_{2^{k-1} -1}X_0X_1\cdots X_{k}Q(X0​,X1​,X2​,…,Xk​)=c0​+c1​X0​+c2​X1​+⋯+c2k−1−1​X0​X1​⋯Xk​
Ti−1,Ti−1′∈Fni−1×ni−1T_{i-1}, T'_{i-1} \in \mathbb{F}^{n_{i-1} \times n_{i-1}}Ti−1​,Ti−1′​∈Fni−1​×ni−1​
diag(Ti−1)[j]≠diag(Ti−1′)[j]\mathsf{diag}(T_{i-1})[j] \ne \mathsf{diag}(T'_{i-1})[j]diag(Ti−1​)[j]=diag(Ti−1′​)[j]
j∈[0,ni−1−1]j \in [0,n_{i-1}-1]j∈[0,ni−1​−1]
Gi∈Fki×niG_i \in \mathbb{F}^{k_i \times n_i}Gi​∈Fki​×ni​
Gi=[Gi−1Gi−1Gi−1⋅Ti−1Gi−1⋅Ti−1′]G_i = \begin{bmatrix} G_{i−1} & G_{i−1} \\ G_{i−1} \cdot T_{i-1} & G_{i−1} \cdot T'_{i-1} \\ \end{bmatrix}Gi​=[Gi−1​Gi−1​⋅Ti−1​​Gi−1​Gi−1​⋅Ti−1′​​]
G0←D0G_0 \leftarrow D_0G0​←D0​
D0D_0D0​
DiD_iDi​
(c,k0)(c, k_0)(c,k0​)
Ti←$(F×)niT_i \leftarrow_\$ (\mathbb{F}^\times)^{n_i}Ti​←$​(F×)ni​
Ti′=−TiT'_i = -T_iTi′​=−Ti​
Gi+1G_{i+1}Gi+1​
Gi,Ti,Ti′G_i, T_i, T'_iGi​,Ti​,Ti′​
GiG_iGi​
i=0i = 0i=0
Enc0(m)\mathsf{Enc}_0(m)Enc0​(m)
1×ki1 \times k_i 1×ki​
mmm
1×ki/21 \times k_i / 21×ki​/2
(ml,mr)(m_l, m_r)(ml​,mr​)
l=Enci−1(ml)l = \mathsf{Enc}_{i-1}(m_l)l=Enci−1​(ml​)
t=diag(Ti−1)t = \mathsf{diag}(T_{i-1})t=diag(Ti−1​)
ki×ni/2k_i \times n_i / 2 ki​×ni​/2
(l+t∘r,l−t∘r)(l + t \circ r, l - t \circ r)(l+t∘r,l−t∘r)
ki×nik_i \times n_iki​×ni​
i=0i = 0i=0
Enc0(m)=m⋅G0\mathsf{Enc}_0(m) = m \cdot G_0Enc0​(m)=m⋅G0​
i>0i>0i>0
Enci(m)=m⋅Gi\mathsf{Enc}_i(m) = m \cdot G_iEnci​(m)=m⋅Gi​
GiG_iGi​
l+t∘r=Enci−1(ml)+diag(Ti−1)∘Enci−1(mr)=ml⋅Gi−1+diag(Td−1)∘(mr⋅Gi−1)=ml⋅Gi−1+mr⋅Gi−1⋅Ti−1l−t∘r=Enci−1(ml)−diag(Ti−1)∘Enci−1(mr)=ml⋅Gi−1−diag(Ti−1)∘(mr⋅Gi−1)=ml⋅Gi−1−mr⋅Gi−1⋅Ti−1(l+t∘r,l−t∘r)=(ml,mr)⋅[Gi−1Gi−1Gi−1⋅Ti−1Gi−1⋅−Ti−1]=m⋅Gi\begin{align*} l + t \circ r &= \mathsf{Enc}_{i-1}(m_l) + \mathsf{diag}(T_{i-1}) \circ \mathsf{Enc}_{i-1}(m_r) \\ &= m_l \cdot G_{i-1} + \mathsf{diag}(T_{d-1}) \circ (m_r \cdot G_{i-1}) \\ &= m_l\cdot G_{i-1} + m_r \cdot G_{i-1} \cdot T_{i-1} \end{align*} \\ \begin{align*} l - t \circ r &= \mathsf{Enc}_{i-1}(m_l)- \mathsf{diag}(T_{i-1}) \circ \mathsf{Enc}_{i-1}(m_r )\\ &= m_l \cdot G_{i-1} - \mathsf{diag}(T_{i-1}) \circ (m_r \cdot G_{i-1}) \\ &= m_l\cdot G_{i-1} - m_r \cdot G_{i-1} \cdot T_{i-1} \end{align*} \\ (l+t\circ r, l-t \circ r) = (m_l, m_r) \cdot \begin{bmatrix} G_{i-1} &G_{i-1} \\ G_{i-1} \cdot T_{i-1} & G_{i-1} \cdot -T_{i-1} \end{bmatrix} = m \cdot G_il+t∘r​=Enci−1​(ml​)+diag(Ti−1​)∘Enci−1​(mr​)=ml​⋅Gi−1​+diag(Td−1​)∘(mr​⋅Gi−1​)=ml​⋅Gi−1​+mr​⋅Gi−1​⋅Ti−1​​l−t∘r​=Enci−1​(ml​)−diag(Ti−1​)∘Enci−1​(mr​)=ml​⋅Gi−1​−diag(Ti−1​)∘(mr​⋅Gi−1​)=ml​⋅Gi−1​−mr​⋅Gi−1​⋅Ti−1​​(l+t∘r,l−t∘r)=(ml​,mr​)⋅[Gi−1​Gi−1​⋅Ti−1​​Gi−1​Gi−1​⋅−Ti−1​​]=m⋅Gi​
πi\pi_iπi​
mi+1m_{i+1}mi+1​
mim_imi​
iii
πi\pi_iπi​
iii
πi+1=mi+1⋅Gi+1=mi+1⋅[GiGiGi⋅TiGi⋅Ti′]=[Enci(mi+1,l)+diag(Ti)∘Enci(mi+1,r)∣∣Enci(mi+1,l)+diag(Ti′)∘Enci(mi+1,r)]\begin{align*} \pi_{i+1} &= m_{i+1}\cdot G_{i+1} \\ &= m_{i+1} \cdot \begin{bmatrix} G_i & G_i \\ G_i \cdot T_i & G_i \cdot T_i' \end{bmatrix} \\ &= [\mathsf{Enc}_i(m_{i+1, l}) + \mathsf{diag}(T_i) \circ \mathsf{Enc}_i(m_{i+1, r}) || \mathsf{Enc}_i(m_{i+1, l}) + \mathsf{diag}(T_i') \circ \mathsf{Enc}_i(m_{i+1, r}) ] \end{align*}πi+1​​=mi+1​⋅Gi+1​=mi+1​⋅[Gi​Gi​⋅Ti​​Gi​Gi​⋅Ti′​​]=[Enci​(mi+1,l​)+diag(Ti​)∘Enci​(mi+1,r​)∣∣Enci​(mi+1,l​)+diag(Ti′​)∘Enci​(mi+1,r​)]​
j∈[0,ni−1]j \in [0, n_i - 1]j∈[0,ni​−1]
nin_ini​
πi\pi_iπi​
πi+1[j]=Enci(mi+1,l)[j]+diag(Ti)[j]⋅Enci(mi+1,r)[j]πi+1[j+ni]=Enci(mi+1,l)[j]+diag(Ti′)[j]⋅Enci(mi+1,r)[j]\pi_{i+1}[j] = \mathsf{Enc}_i(m_{i+1, l})[j] + \mathsf{diag}(T_i)[j] \cdot \mathsf{Enc}_i(m_{i+1, r})[j] \\ \pi_{i+1}[j + n_i] = \mathsf{Enc}_i(m_{i+1, l})[j] + \mathsf{diag}(T_i')[j] \cdot \mathsf{Enc}_i(m_{i+1, r})[j]πi+1​[j]=Enci​(mi+1,l​)[j]+diag(Ti​)[j]⋅Enci​(mi+1,r​)[j]πi+1​[j+ni​]=Enci​(mi+1,l​)[j]+diag(Ti′​)[j]⋅Enci​(mi+1,r​)[j]
πi+1[j]\pi_{i+1}[j]πi+1​[j]
πi+1[j+ni]\pi_{i+1}[j + n_i]πi+1​[j+ni​]
f(X)=Enci(mi+1,l)[j]+X⋅Enci(mi+1,r)[j]f(X) = \mathsf{Enc}_i(m_{i+1, l})[j] + X \cdot \mathsf{Enc}_i(m_{i+1, r})[j]f(X)=Enci​(mi+1,l​)[j]+X⋅Enci​(mi+1,r​)[j]
diag(Ti)[j]\mathsf{diag}(T_i)[j]diag(Ti​)[j]
diag(Ti′)[j]\mathsf{diag}(T_i')[j]diag(Ti′​)[j]
αi\alpha_iαi​
iii
f(αi)f(\alpha_i)f(αi​)
πi\pi_iπi​
mi,l+αi⋅mi,rm_{i,l} + \alpha_i \cdot m_{i, r}mi,l​+αi​⋅mi,r​
πi[j]=f(αi)=Enci(mi+1,l)[j]+αi⋅Enci(mi+1,r)[j]=Enci(mi+1,l+αi⋅mi+1,r)[j]\begin{align*} \pi_i[j] &= f(\alpha_i) \\ &= \mathsf{Enc}_i(m_{i+1, l})[j] + \alpha_i \cdot \mathsf{Enc}_i(m_{i+1, r})[j] \\ &=\mathsf{Enc}_i(m_{i+1, l} + \alpha_i \cdot m_{i+1, r})[j] \end{align*}πi​[j]​=f(αi​)=Enci​(mi+1,l​)[j]+αi​⋅Enci​(mi+1,r​)[j]=Enci​(mi+1,l​+αi​⋅mi+1,r​)[j]​
interpolate((x1,y1),(x2,y2))\text{interpolate}((x_1, y_1), (x_2, y_2))interpolate((x1​,y1​),(x2​,y2​))
PPP
P(x1)=y1,P(x2)=y2P(x_1) = y_1, P(x_2) = y_2P(x1​)=y1​,P(x2​)=y2​
IOPP.Commit:πd:=Encd(f)∈Fnd→(πd−1,…,π0)∈Fnd−1×⋯×Fn0\mathsf{IOPP.Commit}: \pi_d := \mathsf{Enc}_d(f) \in \mathbb{F}^{n_d} \rightarrow (\pi_{d - 1}, \dots, \pi_0) \in \mathbb{F}^{n_{d-1}} \times \cdots \times \mathbb{F}^{n_0}IOPP.Commit:πd​:=Encd​(f)∈Fnd​→(πd−1​,…,π0​)∈Fnd−1​×⋯×Fn0​
f∈F[X0,X1,…,Xd−1]f \in \mathbb{F}[X_0, X_1, \dots, X_{d-1}]f∈F[X0​,X1​,…,Xd−1​]
iii
d−1d − 1d−1
000
αi←$F\alpha_i \leftarrow_\$ \mathbb{F}αi​←$​F
j∈[0,ni−1]j \in [0, n_i - 1]j∈[0,ni​−1]
f(X):=interpolate((diag(Ti)[j],πi+1[j]),(diag(Ti′)[j],πi+1[j+ni]))f(X) := \mathsf{interpolate}((\mathsf{diag}(T_i)[j], π_{i+1}[j]),(\mathsf{diag}(T'_i)[j], π_{i+1}[j + n_i]))f(X):=interpolate((diag(Ti​)[j],πi+1​[j]),(diag(Ti′​)[j],πi+1​[j+ni​]))
πi[j]=f(αi)\pi_i[j] = f(\alpha_i)πi​[j]=f(αi​)
πi∈F\pi_i \in \mathbb{F}πi​∈F
IOPP.Query:(πd,…,π0)→accept or reject\mathsf{IOPP.Query}: (\pi_d, \dots, \pi_0) \rightarrow \text{accept or reject}IOPP.Query:(πd​,…,π0​)→accept or reject
μ←$[0,nd−1−1]\mu \leftarrow_\$ [0, n_{d-1}-1]μ←$​[0,nd−1​−1]
iii
d−1d − 1d−1
000
πi+1[μ],πi+1[μ+ni]\pi_{i+1}[\mu], \pi_{i+1}[\mu + n_i]πi+1​[μ],πi+1​[μ+ni​]
p(X):=interpolate((diag(Ti)[μ],πi+1[μ]),(diag(Ti′)[μ],πi+1[μ+ni]))p(X) := \mathsf{interpolate}((\mathsf{diag}(T_i)[\mu], π_{i+1}[\mu]),(\mathsf{diag}(T'_i)[\mu], π_{i+1}[\mu + n_i]))p(X):=interpolate((diag(Ti​)[μ],πi+1​[μ]),(diag(Ti′​)[μ],πi+1​[μ+ni​]))
p(αi)=πi[μ]p(α_i) = \pi_i[\mu]p(αi​)=πi​[μ]
i>0i > 0i>0
μ>ni−1\mu > n_{i−1}μ>ni−1​
μ←μ−ni−1\mu \leftarrow \mu − n_{i−1}μ←μ−ni−1​
π0\pi_0π0​
G0G_0G0​
f∈F[X0,X1,…,Xd−1]f \in \mathbb{F}[X_0, X_1, \dots, X_{d-1}]f∈F[X0​,X1​,…,Xd−1​]
f(r)f(\bm{r})f(r)
r=(r0,r1,…,rd−1)\bm{r} = (r_0, r_1, \dots, r_{d-1})r=(r0​,r1​,…,rd−1​)
f(r)=yf(\bm{r})=yf(r)=y
PC.Eval\mathsf{PC.Eval}PC.Eval
πf:=Encd(f)∈Fnd\pi_f := \mathsf{Enc}_d(f) \in \mathbb{F}^{n_d}πf​:=Encd​(f)∈Fnd​
r\bm{r}r
y=f(r)∈Fy = f(\bm{r}) \in \mathbb{F}y=f(r)∈F
f∈F[X0,X1,…,Xd−1]f \in \mathbb{F}[X_0, X_1, \dots, X_{d-1}]f∈F[X0​,X1​,…,Xd−1​]
hd(X)=∑b∈{0,1}d−1f(b,X)⋅eq~r(b,X),eq~r(X0,X1,…,Xd−1)=∏i=0d−1(ri⋅Xi+(1−ri)(1−Xi))h_d(X) =\sum_{\bm{b} \in \{0, 1\}^{d-1}} f(\bm{b}, X) \cdot \widetilde{\mathsf{eq}}_r(\bm{b}, X), \\ \widetilde{\mathsf{eq}}_r(X_0, X_1, \dots, X_{d-1}) = \prod_{i = 0}^{d-1}(r_i \cdot X_i + (1 - r_i)(1 - X_i))hd​(X)=b∈{0,1}d−1∑​f(b,X)⋅eq​r​(b,X),eq​r​(X0​,X1​,…,Xd−1​)=i=0∏d−1​(ri​⋅Xi​+(1−ri​)(1−Xi​))
iii
d−1d − 1d−1
000
ri←$Fr_i \leftarrow_\$ \mathbb{F}ri​←$​F
j∈[0,ni−1]j \in [0, n_i - 1]j∈[0,ni​−1]
gj(X):=interpolate((diag(Ti)[j],πi+1[j]),(diag(Ti′)[j],πi+1[j+ni]))g_j(X) := \mathsf{interpolate}((\mathsf{diag}(T_i)[j], π_{i+1}[j]),(\mathsf{diag}(T'_i)[j], π_{i+1}[j + n_i]))gj​(X):=interpolate((diag(Ti​)[j],πi+1​[j]),(diag(Ti′​)[j],πi+1​[j+ni​]))
πi[j]=gj(ri)\pi_i[j] = g_j(r_i)πi​[j]=gj​(ri​)
πi∈Fni\pi_i ∈ \mathbb{F}^{n_i}πi​∈Fni​
i>0i > 0i>0
hi(X)=∑b∈{0,1}i−1f(b,X,ri,…,rd−1)⋅eq~z(b,X,ri,…,rd−1)h_i(X) =\sum_{\bm{b} \in \{0, 1\}^{i-1}} f(\bm{b}, X, r_i, \dots, r_{d-1}) \cdot \widetilde{\mathsf{eq}}_z(\bm{b}, X, r_i, \dots, r_{d-1})hi​(X)=b∈{0,1}i−1∑​f(b,X,ri​,…,rd−1​)⋅eq​z​(b,X,ri​,…,rd−1​)
IOPP.query(πd,…,π0)\mathsf{IOPP.query}^{(\pi_d, \dots, \pi_0)}IOPP.query(πd​,…,π0​)
hd(0)+hd(1)=?yh_d(0) + h_d(1) \stackrel{?}= yhd​(0)+hd​(1)=?y
i∈[1,d−1]i \in [1, d - 1]i∈[1,d−1]
hi(0)+hi(1)=?hi+1(ri)h_i(0) + h_i(1) \stackrel{?}= h_{i+1}(r_i)hi​(0)+hi​(1)=?hi+1​(ri​)
Enc0(h1(r0)/eq~z(r0,…,rd−1))=?π0\mathsf{Enc}_0(h_1(r_0) / \widetilde{\mathsf{eq}}_z(r_0, \dots, r_{d-1})) \stackrel{?}= \pi_0Enc0​(h1​(r0​)/eq​z​(r0​,…,rd−1​))=?π0​
  1. ZK
  2. STARK

Basefold

This article aims to provide an intuitive explanation of the goals and processes of the Basefold protocol.

PreviousAdditive NTTNextBinius
  • Introduction
  • Background
  • Constant Polynomial in FRI-IOPP
  • Protocol Explanation
  • Foldable Code
  • BaseFold IOPP
  • Multilinear PCS based on interleaving BaseFold IOPP
  • Conclusion
O(log⁡2n)O(\log^2n)O(log2n)
O(nlog⁡n)O(n \log n)O(nlogn)
α0\alpha_0α0​
P0(X)=c0+c1X+c2X2+⋯+c2k−1X2k−1P_0(X) = c_0 + c_1X + c_2X^2 + \cdots + c_{2^k-1}X^{2^k-1}P0​(X)=c0​+c1​X+c2​X2+⋯+c2k−1​X2k−1
P1(X)=c0+c1⋅α0+(c2+c3⋅α0)X+⋯+(c2k−2+c2k−1⋅α0)X2k−1−1P_1(X) = c_0 + c_1 \cdot \alpha_0 + (c_2 + c_3 \cdot \alpha_0) X + \cdots + (c_{2^k-2} + c_{2^k-1} \cdot\alpha_0) X^{2^{k-1}- 1}P1​(X)=c0​+c1​⋅α0​+(c2​+c3​⋅α0​)X+⋯+(c2k−2​+c2k−1​⋅α0​)X2k−1−1
k+1k+1k+1
Pk+1(X)=c0+c1⋅α0+c2⋅α1+c3⋅α1⋅α0+⋯+c2k−1⋅α0⋅α1⋅⋯⋅αkP_{k+1}(X) = c_0 + c_1\cdot \alpha_0 + c_2 \cdot \alpha_1 + c_3 \cdot \alpha_1 \cdot \alpha_0 + \cdots + c_{2^k-1} \cdot \alpha_0 \cdot \alpha_1 \cdot \cdots \cdot \alpha_kPk+1​(X)=c0​+c1​⋅α0​+c2​⋅α1​+c3​⋅α1​⋅α0​+⋯+c2k−1​⋅α0​⋅α1​⋅⋯⋅αk​
BaseFold
[n,k,d][n, k, d][n,k,d]
n=16n = 16n=16
k=8k = 8k=8
linear code
n=8n = 8n=8
k=4 k = 4k=4
T=diag(1,ω,ω2,…,ω7)T = \mathsf{diag}(1, \omega, \omega^2, \dots, \omega^7)T=diag(1,ω,ω2,…,ω7)
T′=diag(ω8,ω9,ω10,…,ω15)T' = \mathsf{diag}(\omega^8, \omega^9, \omega^{10}, \dots, \omega^{15})T′=diag(ω8,ω9,ω10,…,ω15)
diagonal matrix
c,k0,d∈Nc, k_0, d \in \mathbb{N}c,k0​,d∈N
ki=k0⋅2i−1,ni=c⋅kik_i = k_0 \cdot 2^{i-1}, n_i = c \cdot k_iki​=k0​⋅2i−1,ni​=c⋅ki​
i∈[1,d]i \in [1,d]i∈[1,d]
(c,k0,d)(c, k_0,d)(c,k0​,d)
GdG_dGd​
1c\frac{1}{c}c1​
linear code
Reed-Muller codes
A41
ryan Kim