Tree-forking lemma for multi-round public-coin interactions #
This file states and proves the tree-extraction lemma of (k₁,…,k_μ)-special
soundness for μ-round public-coin interactions over SPComp, with the knowledge
error of Attema–Cramer–Kohl.
Model #
A round (Round) has a finite nonempty challenge set C, a prover message type
M and an arity k. A deterministic prover strategy (Strategy Y rs) for the
round list rs sends a message at each round and, after the last challenge, an
output Y. A probabilistic prover is P : SPComp (Strategy Y rs): a distribution
over strategies, which is the random-tape view of a prover that the rewinding
extractor controls. The verifier is a predicate V : Transcript rs → Y → Bool on
the full transcript and the final output.
A transcript tree (Tree Y rs) of arity (k₁,…,k_μ) stores, at a node of round
i, the prover message and kᵢ children labelled by challenges. It is accepting
(Tree.Accepting) when sibling challenges are pairwise distinct and every leaf
satisfies V on its root-to-leaf transcript, and it is consistent with a strategy
(Tree.Consistent) when every message and output is the strategy's response to
the challenges on its path.
Extractor #
extract is the rewinding extractor on a strategy: at a node of round i it
rewinds the prover once for each challenge in Cᵢ (at most |Cᵢ| rewinds per
node, so at most ∏ |Cᵢ| prover runs in total), keeps the challenges whose
subtree extraction succeeds, and returns a node built from the first kᵢ of them
when there are at least kᵢ. treeExtractor P runs it on a strategy drawn from
P. Every output tree is accepting and consistent (extract_sound).
Main results #
knowledgeError rs = 1 − ∏ᵢ (1 − (kᵢ − 1)/|Cᵢ|).runAccept_le— for a deterministic strategy, the acceptance probability over uniform challenges is at mostκ + (1 − κ)·[extract succeeds].acceptProb_le— for a probabilistic prover accepted with probabilityε,ε ≤ κ + (1 − κ)·Pr[treeExtractor outputs a tree].acceptProb_sub_le_mul/acceptProb_sub_le—ε − κ ≤ (1 − κ)·Pr[tree] ≤ Pr[tree].knowledgeError_lt_one—κ < 1when everykᵢ ≤ |Cᵢ|;extractProb_const_accept— a prover accepted on every challenge yields a tree with probability at least1 − κ.forkSuccProb_le_extractProb— for μ = 1 and k = 2, the two-branch forking experimentForkingLemma.forkSuccProbsucceeds with probability at most the tree extractor's, sofork_success_gegives a second lower boundacc² − acc/|R|on the same extraction probability (single_round_extract_ge).
References #
- [Attema, Cramer, Kohl, A Compressed Σ-Protocol Theory for Lattices, CRYPTO 2021]
- [Attema, Fehr, Klooß, Fiat–Shamir Transformation of Multi-Round Interactive Proofs, TCC 2022]
- [Bootle, Cerulli, Chaidos, Groth, Petit, Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting, EUROCRYPT 2016]
Rounds, transcripts, strategies and trees #
Full transcript of the rounds rs: one message and one challenge per round.
Equations
Instances For
Deterministic prover strategy for the rounds rs with final output Y: a
message at each round and a continuation per challenge.
Equations
- CatCrypt.Crypto.TreeForking.Strategy Y [] = Y
- CatCrypt.Crypto.TreeForking.Strategy Y (r :: rs) = (r.M × (r.C → CatCrypt.Crypto.TreeForking.Strategy Y rs))
Instances For
Transcript tree of arity (k₁,…,k_μ): a node of round r holds the prover
message and r.k children, each labelled by a challenge.
Equations
- CatCrypt.Crypto.TreeForking.Tree Y [] = Y
- CatCrypt.Crypto.TreeForking.Tree Y (r :: rs) = (r.M × (Fin r.k → r.C × CatCrypt.Crypto.TreeForking.Tree Y rs))
Instances For
Acceptance of a transcript tree under the verifier V: sibling challenges are
pairwise distinct and every leaf output is accepted on its root-to-leaf
transcript.
Equations
Instances For
Consistency of a transcript tree with a strategy: each message and output in the tree is the strategy's response to the challenges on its path.
Equations
- CatCrypt.Crypto.TreeForking.Tree.Consistent [] T s = (T = s)
- CatCrypt.Crypto.TreeForking.Tree.Consistent (head :: rs) T s = (T.1 = s.1 ∧ ∀ (j : Fin head.k), CatCrypt.Crypto.TreeForking.Tree.Consistent rs (T.2 j).2 (s.2 (T.2 j).1))
Instances For
The honest run and the extractor #
One run of the interaction between a deterministic strategy and the verifier:
uniform challenges at each round, then the output of V on the transcript.
Equations
- One or more equations did not get rendered due to their size.
- CatCrypt.Crypto.TreeForking.runAccept [] V s = CatCrypt.Core.SPComp.pure (V () s)
Instances For
The rewinding tree extractor on a deterministic strategy. At a node of round r
it runs the sub-extractor once for every challenge in r.C, and succeeds with the
first r.k challenges (in the order of Finset.equivFin) whose sub-extraction
succeeds, when there are at least r.k of them.
Equations
Instances For
Every tree output by the extractor is accepting and consistent with the strategy.
Knowledge error #
The product ∏ᵢ (1 − (kᵢ − 1)/|Cᵢ|).
Equations
Instances For
The Attema–Cramer–Kohl knowledge error κ = 1 − ∏ᵢ (1 − (kᵢ − 1)/|Cᵢ|).
Equations
Instances For
κ < 1 when every arity is at most the size of its challenge set.
For a single round of arity 2 the knowledge error is 1/|C|.
The deterministic bound #
Averaging a bound over a uniform challenge: ∑_c |C|⁻¹ · [c ∈ S] = |S|/|C|.
Deterministic tree-extraction bound. For every strategy, the probability
that V accepts over uniform challenges is at most
κ + (1 − κ) · [extract succeeds].
The probabilistic bound #
Affine monotonicity of prTrue under bind: a pointwise bound
prTrue (k₁ a) ≤ κ + σ · prTrue (k₂ a) averages over the first computation.
Acceptance probability of a probabilistic prover P (a distribution over
strategies) against the verifier V.
Equations
- CatCrypt.Crypto.TreeForking.acceptProb rs P V h₀ = CatCrypt.Crypto.prTrue (P.bind (CatCrypt.Crypto.TreeForking.runAccept rs V)) h₀
Instances For
The tree extractor for a probabilistic prover: draw a strategy from P and run
the rewinding extractor extract on it.
Equations
- CatCrypt.Crypto.TreeForking.treeExtractor rs P V = P.bind fun (s : CatCrypt.Crypto.TreeForking.Strategy Y rs) => CatCrypt.Core.SPComp.pure (CatCrypt.Crypto.TreeForking.extract rs V s)
Instances For
Probability that the tree extractor outputs a tree.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tree-forking lemma. A prover accepted with probability ε yields, through
the rewinding extractor, an accepting (k₁,…,k_μ)-tree consistent with its
strategy with probability p satisfying ε ≤ κ + (1 − κ) · p, where
κ = knowledgeError rs and 1 − κ = survival rs.
ε − κ ≤ (1 − κ) · Pr[tree extracted].
ε − κ ≤ Pr[tree extracted].
Satisfiability #
A prover accepted with probability 1 yields a tree with probability at least
1 − κ.
A deterministic prover run against the always-accepting verifier yields a tree
with probability at least 1 − κ, which is positive when every kᵢ ≤ |Cᵢ|.
The single-round, arity-2 case #
The single round of the two-branch forking lemma: challenge set R, no
prover message (the commitment is part of the strategy draw), arity 2.
Equations
- CatCrypt.Crypto.TreeForking.forkRound R = { C := R, M := Unit, k := 2, fintype := inst✝¹, nonempty := inst✝ }
Instances For
A ForkableAdversary as a probabilistic single-round prover: the commitment
phase draws the strategy e ↦ respond x c e.
Equations
- CatCrypt.Crypto.TreeForking.forkProver A x = (A.coins x).bind fun (c : Cm) => CatCrypt.Core.SPComp.pure (CatCrypt.Crypto.TreeForking.forkStrategy fun (e : R) => A.respond x c e)
Instances For
The two-branch fork succeeds with probability at most the tree extractor's on
forkProver: a fork success exhibits two distinct accepting challenges for the
drawn commitment.
For μ = 1 and k = 2 the tree-extraction probability of forkProver is bounded
below both by acc − 1/|R| (acceptProb_sub_le) and by the forking-lemma bound
acc² − acc/|R| (fork_success_ge).