§ Abstract
We commit every table of a multi-table AIR proof in one tensor commitment: one Merkle tree per oracle whose leaf hashes every table’s part of a codeword column, one fold vector, one set of opened columns, and one sumcheck that reduces every table’s evaluation claims to a shared point. Committed separately, tables pay fold vectors and query sets of columns each. A table of rows sits on a grid of columns: a shorter table packs of its columns into one message row, a taller one keeps grid rows, and zero extension to a common height makes the pool a single table, whose proximity error is the single-table error with batched units for slot roles and masters. Four rules carry the construction, and for each we give the forgery or the inconsistency its violation admits. The evaluation argument is sound with its error stated in full: an accepting verifier reads, for every table, the evaluations of the columns decoded from the one commitment. The split minimizes an integer byte count that charges the blind claims of packed tables, and both parties derive it from absorbed data. Merkle leaves without salts need random support cells per row: at cells every unopened leaf of a tree without blind rows is a function of the witness and the verifier’s view, and at every unopened symbol is uniform given that view; the openings, the fold vector and both Merkle trees are then simulatable without the witness. In Hekate’s zero-knowledge mode, against separate commitments, proof size changes by to % on ML-KEM-768, ML-DSA and AES and by % on RSA-2048.
§ 1 Introduction
A proof over AIR tables can open all of them with one fold vector and one set of queried columns. We commit every table of a proof in one Merkle tree per oracle and reduce every table’s evaluation claims with one sumcheck.
The setting is a tensor polynomial commitment in the style of Ligero and Brakedown (Ames et al. 2023; Golovnev et al. 2021) over the binary tower (Cantor 1989), with a Reed-Solomon row code evaluated by the additive FFT (Lin, Chung, and Han 2014) and claims on bit-packed columns reduced by ring-switching (Diamond and Posen 2024). Each table carries its own ZeroCheck, and LogUp buses (Haböck 2022) connect the tables. Every table then owes evaluation claims on its committed columns at points of its own height.
Committed separately, table pays a Merkle root, a fold vector of field elements for its own split , and opened columns with their Merkle multiproof. For the seven tables of an ML-DSA-65 verification this layout produced a zero-knowledge proof of KiB.
In the pool, a split fixes one grid of columns for every table. A table of rows with keeps grid rows; a table with packs of its columns side by side into one message row, and the bits that select a column become variables of the evaluation sumcheck. One leaf hashes every table’s digest of one codeword column. One sumcheck over variables carries every table, a table with fewer variables entering the remaining rounds through the factor . After zero extension the pool is one table of rows whose slots vanish above their table’s height (Lemma 3), and its proximity error is the single-table error on that shape (Section 5).
Four rules carry the construction (Section 4): the slot challenge follows every table’s claims, every master carries its own power of the line challenge , a finished table is extended by and never by a constant, and a short table’s block bits are sumcheck variables. The split minimizes an integer byte count (Section 6). Leaf hiding needs one support cell more than the query count (Section 7): at an unopened leaf of a tree without blind rows is a function of the witness, which a guess can test against the root.
Three theorems carry the security. Theorem 2 is completeness. Theorem 6 binds every claim of every table to the columns decoded from the pool’s commitment, with error for the commitment and terms without the factor for the batching; Lemma 4 derives from the curve bound of (Ben-Sasson et al. 2020) and the interleaving and tensor bounds of (Diamond and Gruen 2024). Theorem 14 simulates the openings, the fold vector and both Merkle trees without the witness in the random oracle model.
In Hekate’s zero-knowledge mode the pool changes proof size by to % on ML-KEM-768, ML-DSA and AES and by % on RSA-2048 (Section 8).
Batching polynomials of one length under one commitment is the interleaved setting of Ligero and Brakedown, and the proximity bounds are those of (Ben-Sasson et al. 2020) and (Diamond and Gruen 2024). Matrices of differing heights are committed under one Merkle tree in FRI stacks (The Plonky3 Authors 2026) and in S-two, whose whitepaper shows cross-domain correlated agreement for multi-table circle FRI (Carmon et al. 2026), and claims on columns of differing heights are reduced inside the sumcheck by a jagged reduction (Hemo et al. 2025; Duan 2026). Beneath that reduction, SP1 Hypercube cuts the trace into columns of one fixed height and commits them as one interleaved batch in the manner of Ligero (Succinct Labs 2026); Binius64 lifts each shorter oracle to the common variable count by zero padding, the lift carrying the factor on the high variables, and batches the lifted oracles in one sumcheck and one BaseFold (The Binius Developers 2026, secs. 5.3-5.4). Here the heights are resolved in the layout: a tall table keeps its grid rows, a short one packs its columns into one message row, zero extension in place makes the pool one interleaved codeword, and one fold vector, one query set and one proximity term cover every table. New here are the layout for tables of different heights under one fold vector, its soundness and hiding proofs, the four rules with the attacks their violations admit, the split objective, the support requirement for unsalted leaves, and the measurements. The per-table ZeroCheck and LogUp arguments are unchanged and outside this note. The outer argument of (Kochergin 2026), which proves the verifier’s predicate on one-time-padded scalars, runs only in zero-knowledge mode, and we assume its soundness and zero-knowledge.
§ 2 Notation and the row code
Throughout, , built as a tower of quadratic extensions (Cantor 1989), and . For put . A table of rows commits each column as the multilinear polynomial in variables that agrees with on , and is its value at .
Fix a split and put . A message is a pair with a support , uniform in zero-knowledge mode, and data . Its codeword is the polynomial evaluated on an -subspace of points, where is the novel polynomial basis of (Lin, Chung, and Han 2014) over a Cantor basis, . The code has length when and the query term below reaches 100 bits at that length. At and the term reads 82 bits at and 100.1 at : a grid with takes support cells at , and every deployed split has . The row code is Reed-Solomon of dimension and length , hence MDS, with minimum distance .
A table of rows with stores a column on grid rows: grid row holds for . The columns of a table are grouped into slots, one slot per column here, and each pair of a slot and a grid row is one message with its own support. The encoded messages form a matrix of columns, and the commitment is a Merkle tree over those columns.
The verifier batches a table’s claims into at most two master claims. Each unit of the table, a committed column or a ring-switched group of bit columns, carries a power of a slot challenge , and a slot’s coefficient in master is the sum of the powers of its units assigned to . Master is , the multilinear polynomial of slot , and a sumcheck reduces the table’s batched claims to the values at one point . The prover sends a fold vector where are the last coordinates of and the first . The verifier checks the line on the data part of , draws columns , and checks that the encoding of at equals the same combination of the opened symbols, with their Merkle paths.
The single-table analysis bounds two terms. The query term is bits with (Golovnev et al. 2021, App. B, Thm. 7). The proximity error is , with the depth of the tensor over grid rows (Diamond and Gruen 2024) and the degree of the batching curve over units (Ben-Sasson et al. 2020, Thm. 1.5); Lemma 4 proves this form for the pool and Section 5 counts .
Interleaved codes and proximity gaps.
Write for the row code and for its unique decoding radius. For a matrix let be the least number of columns on which differs from a matrix whose every row is a codeword; is -close if , and then that matrix is unique, each row of lying within of one codeword, and we call it the decoding of . Two bounds carry Section 5, both in this unique-decoding regime. The curve bound (Ben-Sasson et al. 2020, Thm. 1.5): for words , if over , then the matrix with rows is -close. The tensor bound: by (Diamond and Gruen 2024, Thms. 1 and 2) every interleaving has the proximity gap for affine lines of , with false-witness bound , and by (Diamond and Gruen 2024, Thm. 3) applied to it has tensor-style gaps with the same parameters: for matrices , if over , then the matrix that stacks the is -close.
Model.
The protocol is public-coin. The two roots fix the leaves of both trees, and we take the trees as binding to the committed symbols of every slot and grid row, the rows an extractor reads from the prover’s queries to when is a random oracle, with the collision term and the Fiat-Shamir compilation of the interactive protocol accounted as in (Ben-Sasson, Chiesa, and Spooner 2016; Golovnev et al. 2021). Section 5 extends those rows by zero rows to the matrix , and soundness is stated against it: Theorem 6 bounds the probability that the verifier accepts while some claim differs from the evaluation of the column decoded from , and the extractor of Corollary 8 outputs those columns. Hiding is honest-verifier: Theorem 14 gives a simulator of the pool’s part of the verifier’s view in zero-knowledge mode that reads no witness, with a random oracle and the one-time pad of the masked scalars uniform.
§ 3 The pool
The pool is every table of a proof in a fixed order, tables with rows each. The split is derived in Section 6; put and . Table uses grid rows and packs columns per slot.
A table with is laid out as in Section 2. A table with has one grid row, and its slot holds columns side by side: column for occupies positions , and is a multilinear polynomial in variables. A class of columns fills slots, the last closed by zero blocks. In zero-knowledge mode table adds whole blind columns, in the deployed system, and its ring-switched units a blind of their own (Diamond 2025). The slot roles of every table are numbered by one index running over the pool in table order, in all, and the pool has masters, one or two per table.
Every message of every table is encoded at the same width . Leaf of the trace tree is
where is the column- symbols of table over its slots and grid rows, and an inner node hashes its two children and 0x01. The verifier hashes times per opened column. The LogUp helper columns of the bus-carrying tables form slots in a second tree of the same width, committed after the bus challenges; a pool with no bus has none. The fold vector and the queries cover both trees.
The transcript runs in this order.
-
The main table’s dimensions, then each chiplet’s in pool order, then the trace root; in zero-knowledge mode, the root of the one-time pad.
-
The LogUp challenges ; every lookup bus’s maximal height, then each bus’s point; then the root of the tree.
-
For each table in pool order: its claimed bus sums, its ZeroCheck challenge and rounds, its evaluations and its column claims.
-
The slot challenge ; block challenges, of which table reads the first as ; the ring-switching challenge when a table carries ring units; the eval sumcheck; the masters in pool order; when ; the fold vector ; the query columns; both openings.
For table split as with , and ; a tall table has no , and a table with has no . The eval sumcheck runs over variables, low variable first, on where are the masters of table and are the public multilinear weights defined below. Its initial claim is , the batched value of every table’s claims, formed as follows.
Table claims its columns at one point , the point its ZeroCheck ended at, and at the next row: a column claims the pair , the column shifted by one row. A unit is a whole column , or a group of bit columns that one column packs as over the tower basis of over ; a ring unit claims the values and . Every unit has a slot , a block of that slot, a slot role and a master ; the units of a slot fall into roles, ring roles and whole roles, each role holding at most one unit per block of the slot, and sums over the roles of slot in master . Blocks of a slot that hold no unit are zero columns. Once every table has claimed, the verifier draws , the block challenges and, when ring units exist, with , and gives unit the value and the claims at and at the next row, where batches the tower coordinates of and is -linear. Then The weight of the whole master of table is , where is the multilinear weight with for every column ; the weight of the ring master is , where is the multilinear extension of on , evaluated as in (Kochergin 2026). Each round polynomial has degree 2. At the final point , read per table, the verifier checks against the masters the prover then sends, for the master of table with the claimed value of . Let be the first and the last coordinates of . The fold vector is with read as a point of , and the verifier checks the line and, at each of the drawn columns , that the encoding of equals the same combination (3) of the opened symbols of both trees.
Lemma 1. For an honest prover, (4) holds.
Proof. It suffices to show for each slot of table . If , then restricted to its first coordinates, and for the factor splits as , the coordinates of ; the sum over and the inner product together evaluate at . If , then , and , and the inner product is by the layout of packed columns. Summing over slots with the coefficients of (3) gives . ◻
Theorem 2 (completeness). For an honest prover the verifier accepts.
Proof. Write over the cube of the table. For a whole unit, by the definition of . For a ring unit, with , and is -linear, whence and likewise with and ; again . A unit of table in slot at block has , a tall table having one block. Summing (1) over , , and since sums over the roles of slot in master and a role’s units run over the blocks of its slot, the other blocks holding zero columns, The round polynomials of have degree at most 2 in each variable, and is (2) with . The line is Lemma 1. The encoding is linear, and the encoding of at a column is the combination (3) of the rows’ symbols there. ◻
§ 4 Four rules
Each rule below is necessary. An interactive simulation over with the deployed additive FFT, on four tables of , , and rows at , , and 24 queries, exhibits the forgery or the inconsistency of each violation. The verifier of the final build rejected the forging provers of the first two rules in both modes.
-
The slot challenge follows the claims of every table. A prover that knows before it fixes the claims of one table moves two of them by with . The batched value is unchanged and every later check passes. The forging prover that drew from a copy of the transcript ahead of the last table’s claims was rejected, at the sumcheck in base mode and at the outer argument’s linear test in zero-knowledge mode, because the verifier draws after those claims.
-
Every master carries its own power . Under one pair for the whole pool, a whole master of table and one of table enter (4) with the same coefficient, and one claim error routed through the sumcheck into both masters cancels there in characteristic 2. The forging prover carried the drift through the eval rounds and moved the first and the last whole master; the verifier rejected it at the line.
-
A table with enters the rounds beyond through . Carried as a constant instead, it contributes to the initial claim: in characteristic 2 every shorter table drops out, and its claims go unchecked. In the simulation a forged claim on the -row table left the target of the constant-padded sumcheck unchanged.
-
The block bits of a short table are sumcheck variables. Opened at its own point , a short table’s master is another linear form on its slot than the one (4) applies to , and the line fails for an honest prover. In the simulation the two points disagreed on one slot.
The root of the tree precedes the first ZeroCheck challenge of every table, the rule a single table already obeys, held across the pool.
The proof of Theorem 6 consumes the rules in order: rule 1 fixes the claim polynomial of step 6 before , rule 2 separates the masters on the line in step 3, rule 3 is the identity that step 5 takes from Theorem 2, and rule 4 is the identity of Lemma 1 that step 3 applies to the decoded data.
§ 5 Soundness of the pool
To the verifier the pool is one table, and its proximity error is the single-table error with . Let be the matrix with one row for each pair of a slot of the pool and a point , equal to the committed row of slot on grid row , its symbols, when and to zero otherwise.
Lemma 3. On the line and the column checks, the verifier of the pool runs the verifier of one table on , with grid depth and fold weights , and every row of outside the commitment is zero in every column.
Proof. A zero row is a codeword and adds nothing to any column. Summing the opened symbols over the committed rows, as the column check does, therefore equals summing over every row of . For an honest prover the rows of encode the messages of (3), the encoding of is the fold of by the stated weights, and by Lemma 1 the line (4) is the line of that table at with the zero-extended masters . ◻
Write for the fold of itself, whose entry is the combination (3) of the committed symbols at column ; the column check compares the encoding of with at the drawn columns. Each row of carries the weight with .
Lemma 4 (proximity). If is not -close, then is -close with probability at most over , and .
Proof. Fold in three stages: with rows , the tensor fold of the matrices ; then for each master ; then . Let be the event that is -close, that the matrix with rows is, and that is. The three challenges are uniform and independent whatever the prover sends between them, and precedes them all.
Since is not -close, the tensor bound for with gives . Fix outside . If the agree with codewords outside common columns, then agrees with the codeword there: implies that is -close; and is a curve of degree in whose coefficient words are rows of , every row occurring since every slot holds a unit. By the curve bound, , as a larger probability would make -close. Fix outside . Then is a curve of degree in with coefficient words , and the curve bound gives . The union bound over the three stages is (5). ◻
Lemma 5 (column test). Let the columns be drawn uniformly and independently. If is not -close, every column check passes with probability at most . If is -close with decoding and differs from the fold of the messages of by the weights of (3), every column check passes with probability at most .
Proof. The check at column reads . In the first case is a codeword, from which differs on more than columns, and one check passes with probability at most . In the second case let be the set of at most columns on which and differ. Outside the symbols of are those of , and the combination of codewords is the codeword of the combined messages, whence for . The distinct codewords and agree on at most columns, and a check passes only on or on those columns, in all. The draws are independent. ◻
Theorem 6 (soundness). Let be the committed matrix, let the prover be arbitrary after the roots, let , and let when some table carries ring units and otherwise. In base mode the verifier accepts while one of the following holds with probability at most (a) is not -close; (b) is -close with decoding and a claim of some table differs from the value it names on , that is, for a whole unit or and for a ring unit or , where is the unit’s column in and its -th tower coordinate.
Proof. Six steps, each charged once.
1. Let not be -close. By Lemma 4, is -close with probability at most , and otherwise Lemma 5 rejects except with probability . Henceforth is -close with decoding ; its rows outside the commitment are zero (Lemma 3), and its messages define the decoded slot polynomials , masters , columns and coordinates .
2. If , Lemma 5 rejects except with probability . The matrix is fixed; steps 1 and 2 are exclusive, and the query term is charged once. Henceforth .
3. Put . The identity in the proof of Lemma 1 holds for every message matrix; with the left side of the line (4) is . The masters precede ; if some , the line holds only at a root of the nonzero polynomial of degree below , probability at most . Henceforth for every .
4. Let be (1) with the masters . With the final check (2) reads , and the verifier holds every round polynomial to degree 2. If , the sumcheck accepts with probability at most (Lund et al. 1992). Henceforth .
5. Summing over as in the proof of Theorem 2 gives . Here with the value takes on the true claims of , the identity of a ring unit holding for the coordinates of any column of ; and the blocks that hold a unit of role , collects what carries in the blocks an honest prover leaves zero.
6. The claims precede , the and . The difference is a polynomial in these challenges. Sorted by the monomials and and then by the block, its terms are and at a block holding the unit of role , and times the -free part and the part of at a block without one, where for a whole unit and , and for a ring unit and likewise with the next-row claims. A block holds at most one unit of a role, the for distinct are linearly independent, is the zero polynomial in only at , and the are a basis. Hence the difference is the zero polynomial only when every vanishes, that is, when every claim is true, and otherwise it has degree at most in , at most in the and at most in , and vanishes at the drawn challenges with probability at most . ◻
Remark 7. In zero-knowledge mode the claims, the masters, the round values and the line are one-time-padded, and the checks of steps 3, 4 and 6 are rows of the outer statement; Theorem 6 then holds with the soundness error of the outer argument (Kochergin 2026) added, under the assumption of the introduction.
Corollary 8 (extraction). With a random oracle, the extractor that reads the leaves of both trees from the prover’s oracle queries and decodes every row of to radius , by Berlekamp-Welch on the evaluation points of the row code, outputs columns whose evaluations at and at the next row, and those of their tower coordinates, are the claims of every accepting transcript, except with probability and the collision term of the trees.
On the workloads of Table 1 the terms of without the factor sum to less than , and the query term is unchanged from a single table: one code, one width , columns. The per-table ZeroCheck and LogUp terms do not change.
Both parties compute the shape from absorbed data in integer arithmetic and reject one whose query or proximity term falls below 100 bits; the verifier holds the LogUp term, 106 to 128 bits on the workloads below, to the same floor. Table 1 lists the shape of each workload of Section 8 in zero-knowledge mode. The proximity term is the smaller on every row, 102 to 108 bits; the query term is 109 to 118.
| workload | query | proximity | |||||
|---|---|---|---|---|---|---|---|
| ML-KEM-768 sender | 9 | 13 | 13 | 14 | 229 | 114 | 106 |
| ML-KEM-768 receiver | 8 | 15 | 14 | 15 | 206 | 116 | 105 |
| ML-DSA-44 | 7 | 15 | 14 | 15 | 226 | 116 | 105 |
| ML-DSA-65 | 7 | 15 | 14 | 15 | 272 | 116 | 104 |
| ML-DSA-87 | 7 | 16 | 15 | 16 | 239 | 117 | 104 |
| AES-128 | 3 | 19 | 16 | 17 | 194 | 118 | 103 |
| AES-256 | 3 | 19 | 16 | 17 | 234 | 118 | 103 |
| RSA-2048 | 3 | 15 | 15 | 16 | 143 | 117 | 104 |
| SHA-256, rows | 1 | 12 | 12 | 13 | 91 | 109 | 108 |
| SHA-256, rows | 1 | 21 | 17 | 18 | 219 | 118 | 102 |
| Keccak-f, rows | 1 | 15 | 14 | 15 | 84 | 116 | 106 |
| Keccak-f, rows | 1 | 20 | 16 | 17 | 84 | 118 | 104 |
| Fibonacci, rows | 1 | 20 | 15 | 16 | 12 | 117 | 108 |
| Fibonacci, rows | 1 | 24 | 17 | 18 | 12 | 118 | 105 |
| Fibonacci, rows | 1 | 26 | 18 | 19 | 12 | 118 | 104 |
Table 1: Shape and security bits of the pool in zero-knowledge mode, as the verifier logs them, , . ; the proximity column is .
§ 6 The split
The split minimizes an integer estimate of the bytes that depend on it: The first term is the data part of , priced at 17 bytes per element, a one-byte bincode varint tag and 16 bytes; its support part, elements from , is not priced. The second is the opened symbols: is the byte count of table ’s symbols on one grid row of one column, both trees, at columns per slot. The third is the claims on blind columns: each of the blind columns of table sends two masked claims of 16 bytes, and the term counts the blinds beyond those of an unpacked table. In base mode .
The search runs over , the packing depth of table ’s widest class, and admits when it leaves room for the support, , and when the shape of Section 5 clears 100 bits. Ties go to the narrower split. The inputs are the absorbed heights, the program and the configuration; nothing in the proof sets .
Not counted: the Merkle multiproof, at most hashes per tree per unit of , and the eval sumcheck, elements; the masters and the remaining claims do not depend on . With both added, the minimizer moves on no workload of Table 1 in either mode, and under that count the next split costs at least 18.6 KiB more.
The third term matters for small tables: a table of rows in a pool at packs , and its blind columns send 128 KiB of claims and masked scalars to the outer argument. Every table of Table 1 has at least rows, and the term stays below 4 KiB per table there.
§ 7 Leaves and the support
Unsalted leaves need one support cell more than the query count. In zero-knowledge mode the verifier sees the fold vector , data and support parts, the masters, and the opened symbols of at most distinct columns. Every other column reaches it only through its Merkle leaf, a hash with no salt. If an unopened column is a function of the witness and the view, a guess of the witness can be tested against the root.
Lemma 9. Let . For every message and every column , the symbol at is an affine function of and the symbols at the opened columns.
Proof. The symbol at a point is . Since , the with span the polynomials of degree below , and a nonzero one has fewer than roots. The matrix over the opened points is therefore invertible at , and is an affine function of and the opened symbols. Substituting it gives the symbol at . ◻
At , then, a tree whose rows carry no uniform data cell has every unopened leaf fixed by the witness and the view. The tree is such a tree: it carries no blind. The trace tree of a pool with one table, without ring units, on one grid row is another: there fixes the data of the one blind slot as ’s data part minus the witness terms, and Lemma 9 fixes the rest.
Lemma 10. Let , and let at least two messages carry nonzero weight in . Given the view and every data cell, the symbol of any message at any unopened column is uniform.
Proof. With the data fixed, the view is linear in the supports . Put and let be the span of over the opened columns . Polynomials of degree below interpolate any values, whence for an unopened . The view determines for every and , and , the weights of . Were determined as well, it would equal identically, every . A message with forces , and then , a contradiction. ◻
In the pool every table has a data slot and a blind slot, and each weight of (3) is a nonzero polynomial of degree below in the challenges: the hypothesis fails with probability at most .
Theorem 14 assembles the lemmas into a simulator. Index the committed rows of both trees by , in all, each with a support uniform in and data , the data of a blind row uniform too. The verifier opens distinct columns ; with as in Lemma 10 and , the symbol of row at column is , denotes it at , and is the weight of row in (3).
Lemma 11 (openings). For the opened symbols of a row are uniform in and independent of its data, and the rows are independent.
Proof. The are linearly independent, as in the proof of Lemma 10, and is onto : a uniform makes the opened symbols uniform whatever . ◻
Lemma 12 (the fold). Let , let complete to a basis, and let . Given the opened symbols of every row, the data part of is uniform in , the coordinate of its support part is uniform in , the two are independent of each other and of the openings, and the remaining coordinates are determined by the openings and .
Proof. The last claim is the column check at , which the honest prover satisfies. Put ; in the basis the coordinates of a uniform are independent and uniform; the are therefore uniform and independent of the openings, and is uniform because some . The blind slot of a table with has weight in (3), and its data over its grid rows is uniform in , the summing to over and the being uniform and independent; it is independent of the openings by Lemma 11 and of every support. Then , the sum of this term with terms independent of it, is uniform and independent of the openings and of the . ◻
Lemma 13 (leaves). Let and . Given the openings, , the data of every row and the witness, the part of every table at every unopened column of either tree is uniform on a set of at least values.
Proof. Write ; for an unopened , since . The symbol of row at is with , which the openings and the data determine. The vector is uniform on and the conditioning reveals alone, leaving it uniform on an affine hyperplane of . A part is an injective affine image of the of the table’s rows in that tree. In the trace tree those rows number at least two, a data slot and a blind slot, and their range over at least values of the hyperplane; in the tree they number at least one, a blind row of a table with , whose weight is nonzero, absorbs the hyperplane constraint, and their range over all of each. ◻
Theorem 14 (hiding). Let , let every table carry a blind slot, let be a random oracle and the one-time pad uniform. There is a simulator that, from the public inputs and the verifier’s coins alone, outputs the roots and opening paths of both trees, the opened symbols, the fold vector and the masked scalars, such that no distinguisher making queries to tells its output from the honest verifier’s view with advantage above .
Proof. The simulator commits the all-zero witness with uniform supports and uniform blinds, forms by (3) from its own rows, opens the drawn columns, draws the masked scalars uniformly, and hands the simulator of the outer argument the plaintext values its predicate needs, chosen to satisfy every row of the outer statement with the line (4) evaluated on its own . The term excludes . The opened symbols are uniform and independent of the data in both worlds (Lemma 11). Given them, and are uniform and the rest of is the same function of the openings and in both worlds (Lemma 12). The masked scalars are uniform in both worlds, the pad being uniform and used once, and the outer argument’s messages depend on the plaintext scalars, on and on its own randomness, on no support of the pool. The opened parts and leaves are the same function of the opened symbols in both worlds. By Lemma 13, the distinguisher’s queries hit the part of some table at some unopened column with probability at most in either world, there being at most such parts; otherwise every digest of such a part is a uniform string in both worlds, and the unopened leaves, the inner nodes and the roots are the same functions of those digests and the opened parts. Conditioned on no hit the two views have one law. ◻
Table 2 checks Lemmas 9 and 10, and the hiding of the whole linear view, by exact ranks over on the deployed layout code. Every entry of the view and every unopened symbol is a linear form over masking cells, supports and blinds, and witness cells, trace and ; with the masking part of the view and its witness part, the view is independent of the witness if and only if , and a leaf is fixed when the masking part of every symbol it hashes lies in the row space of . The pools sit at , and distinct queries, leaving 26 unopened columns: three tables of , and rows, the first on four grid rows and the others packed, two with ring units, two with LogUp columns and each with one blind; and one table of rows packed on one grid row. The computation first checks the line (4) and the encoding of against the folded columns.
| pool | fixed leaves, trace | fixed leaves, | |||
|---|---|---|---|---|---|
| three tables | 206 | 206 | 0/26 | 26/26 | |
| three tables | 207 | 207 | 0/26 | 0/26 | |
| one table, one grid row | 34 | 34 | 26/26 | 26/26 | |
| one table, one grid row | 35 | 35 | 0/26 | 0/26 | |
| second table without blind | 200 | 201 | |||
| three tables | 185 | 205 |
Table 2: Exact ranks over of the view at , , . The last two rows are controls with a planted leak.
The linear view hides the witness in all four configurations, and both controls register their leak. At every unopened leaf of the tree is fixed, and of the trace tree too when one table sits on one grid row; at none is. The deployed configuration takes , and both parties reject , at the cost of one element of . A salt per leaf would also free every leaf, at salts per opening.
§ 8 Measurements
On ML-KEM-768, ML-DSA and AES the pool changes proof size by to %, and on RSA-2048 by %. We measured the example workloads of Hekate (Oumuamua Labs 2026) on an Apple M3 Max, with the verifier built with whole-program link-time optimization and one codegen unit; each figure is the best of three runs. Peak memory is the larger of the peak physical footprint and the maximal resident set. The pool runs at , the configuration of Table 1; the separate commitments run at , to which would add 16 bytes per table.1 Table 3 collects the zero-knowledge figures.
Hekate 0.36.0 with prover 0.14.0 for the separate commitments, 0.37.0 with prover 0.15.0 for the pool; signed public builds 6f09b831 and 4e72a3c1.
| workload | proof separate, KiB | proof pool, KiB | verify separate, ms | verify pool, ms | prove separate, ms | prove pool, ms | peak pool, MiB | |
|---|---|---|---|---|---|---|---|---|
| ML-KEM-768 sender | 9 | 72.1 | 11.6 | 567 | 408 | 204 | ||
| ML-KEM-768 receiver | 8 | 88.6 | 13.9 | 754 | 552 | 292 | ||
| ML-DSA-44 | 7 | 50.7 | 10.5 | 549 | 432 | 219 | ||
| ML-DSA-65 | 7 | 52.0 | 10.3 | 594 | 472 | 207 | ||
| ML-DSA-87 | 7 | 55.7 | 11.2 | 766 | 618 | 308 | ||
| AES-128 | 3 | 20.1 | 6.4 | 920 | 770 | |||
| AES-256 | 3 | 19.9 | 6.5 | 975 | 961 | |||
| RSA-2048 | 3 | 29.4 | 8.2 | 334 | 204 | 397 | ||
| SHA-256, rows | 1 | 540 | 516 | 9.4 | 3.2 | 69 | 53 | 62 |
| SHA-256, rows | 1 | 22.7 | 11.3 | |||||
| Keccak-f, rows | 1 | 858 | 851 | 11.9 | 4.6 | 195 | 163 | 143 |
| Keccak-f, rows | 1 | 17.1 | 7.1 | |||||
| Fibonacci, rows | 1 | 6.8 | 3.7 | 328 | 259 | 252 | ||
| Fibonacci, rows | 1 | 12.9 | 8.1 | |||||
| Fibonacci, rows | 1 | 21.3 | 12.4 |
Table 3: Zero-knowledge mode, best of three runs; separate commitments in 0.36.0 at , the pool in 0.37.0 at .
Every RSA-2048 table has at most rows, and the pool at packs at least 32 of its columns per slot; no AES table has fewer than rows, and AES gains from the shared fold vector and query set alone. Base mode carries no blinds and no outer argument, and its figures are not tabulated: proof size changes by to % on the same seven, and by % on RSA-2048. On the seven single-table workloads proof size changes by to %, except SHA-256 at rows, 540 to 516 KiB, while verification time changes by to % and prove time by to % through changes outside the pool.
§ 9 Remarks
Theorem 14 simulates the pool’s part of the view; the outer argument’s part is simulated by (Kochergin 2026), whose soundness and hiding the introduction assumes. Table 2 checks Lemmas 9, 10 and 13 numerically on the deployed layout code.
Prove time depends on how the prover schedules encoding and hashing, which this note does not describe.
§ References
Ames, Scott, Carmit Hazay, Yuval Ishai, and Muthuramakrishnan Venkitasubramaniam. 2023. “Ligero: Lightweight Sublinear Arguments Without a Trusted Setup.” Designs, Codes and Cryptography.
Ben-Sasson, Eli, Dan Carmon, Yuval Ishai, Swastik Kopparty, and Shubhangi Saraf. 2020. “Proximity Gaps for Reed-Solomon Codes.” Cryptology ePrint Archive, Paper 2020/654. FOCS 2020. Theorem numbers follow the revision of July 3, 2021. https://eprint.iacr.org/2020/654.
Ben-Sasson, Eli, Alessandro Chiesa, and Nicholas Spooner. 2016. “Interactive Oracle Proofs.” In Theory of Cryptography, TCC 2016-b, 9986:31-60. LNCS.
Cantor, David G. 1989. “On Arithmetical Algorithms over Finite Fields.” Journal of Combinatorial Theory, Series A 50 (2): 285-300.
Carmon, Dan, Lior Goldberg, Ulrich Haböck, Leonardo Lerer, Ilya Lesokhin, Shahar Papini, and Shahar Samocha. 2026. “S-two Whitepaper.” Cryptology ePrint Archive, Paper 2026/532. https://eprint.iacr.org/2026/532.
Diamond, Benjamin E. 2025. “Zero-Knowledge Polynomial Commitment in Binary Fields.” Cryptology ePrint Archive, Paper 2025/1015. https://eprint.iacr.org/2025/1015.
Diamond, Benjamin E., and Angus Gruen. 2024. “Proximity Gaps in Interleaved Codes.” Cryptology ePrint Archive, Paper 2024/1351. IACR Communications in Cryptology, 2025. https://eprint.iacr.org/2024/1351.
Diamond, Benjamin E., and Jim Posen. 2024. “Polylogarithmic Proofs for Multilinears over Binary Towers.” Cryptology ePrint Archive, Paper 2024/504. https://eprint.iacr.org/2024/504.
Duan, Stephen. 2026. “Ziren: Succinct Arguments for MIPS32 Execution.” Cryptology ePrint Archive, Paper 2026/2330. https://eprint.iacr.org/2026/2330.
Golovnev, Alexander, Jonathan Lee, Srinath Setty, Justin Thaler, and Riad S. Wahby. 2021. “Brakedown: Linear-Time and Field-Agnostic SNARKs for R1CS.” Cryptology ePrint Archive, Paper 2021/1043. CRYPTO 2023. Appendix B as in the revision of August 24, 2023. https://eprint.iacr.org/2021/1043.
Haböck, Ulrich. 2022. “Multivariate Lookups Based on Logarithmic Derivatives.” Cryptology ePrint Archive, Paper 2022/1530. https://eprint.iacr.org/2022/1530.
Hemo, Tamir, Kevin Jue, Eugene Rabinovich, Gyumin Roh, and Ron D. Rothblum. 2025. “Jagged Polynomial Commitments (or: How to Stack Multilinears).” Cryptology ePrint Archive, Paper 2025/917. EUROCRYPT 2026. https://eprint.iacr.org/2025/917.
Kochergin, Andrei. 2026. “Zero-Knowledge Ring-Switching Without the Transpose.”
Lin, Sian-Jheng, Wei-Ho Chung, and Yunghsiang S. Han. 2014. “Novel Polynomial Basis and Its Application to Reed-Solomon Erasure Codes.” In 55th IEEE Annual Symposium on Foundations of Computer Science, 316-25.
Lund, Carsten, Lance Fortnow, Howard Karloff, and Noam Nisan. 1992. “Algebraic Methods for Interactive Proof Systems.” Journal of the ACM 39 (4): 859-68.
Oumuamua Labs. 2026. “Hekate.” Source repository https://github.com/oumuamua-labs/hekate.
Succinct Labs. 2026. “SP1 Hypercube: The Dense Polynomial Commitment and the slop-stacked Crate.” Documentation https://docs.succinct.xyz/docs/sp1/hypercube/pcs and crate https://docs.rs/slop-stacked, version 6.8.1. Accessed October 9, 2026.
The Binius Developers. 2026. “Binius64 Blueprint.” Specification, version of August 12, 2026, https://www.binius.xyz/blueprint/.
The Plonky3 Authors. 2026. “Plonky3.” Source repository https://github.com/Plonky3/Plonky3, commit a21f9e3. Mixed matrix commitment scheme, trait Mmcs.