Fischlin Transform #
This file defines the Fischlin transform (CRYPTO 2005), which converts a Σ-protocol into a signature scheme (non-interactive proof of knowledge) in the random oracle model with online (straight-line) extraction.
Unlike the Fiat-Shamir transform, which requires a rewinding extractor (via the forking lemma), the Fischlin transform enables extraction by simply observing the prover's hash queries. This comes at the cost of a more complex prover that performs a "proof-of-work" search over the challenge space, and a slight completeness error.
Parameters #
ρ— number of parallel repetitionsb— hash output bit-length (random oracle range isFin (2^b))S— maximum allowed sum of hash values in a valid proof (paper notation)
References #
- Marc Fischlin, "Communication-Efficient Non-Interactive Proofs of Knowledge with Online Extractors", CRYPTO 2005.
Type Definitions #
Input to the Fischlin random oracle. Defined as a structure rather than a nested product
to give fast DecidableEq synthesis (avoiding deep product-type unfolding).
Instances For
Instances For
The random oracle specification for the Fischlin transform.
Domain: FischlinROInput (statement, message, commitment list, index, challenge, response).
Range: Fin (2^b) (b-bit hash values).
Instances For
A Fischlin proof consists of one (commitment, challenge, response) triple
per parallel repetition.
Instances For
Prover Search #
Main Definition #
The Fischlin transform applied to a Σ-protocol and a generable relation produces a signature scheme in the random oracle model.
Signing: generates ρ independent commitments, then for each repetition searches
through all challenges ω ∈ Ω (via FinEnum.toList) to find the (ω, response) pair
whose hash value is minimal, exiting early at hash 0.
Verification: re-hashes each (commitment, challenge, response) triple, checks
sigma-protocol verification for each repetition, and verifies that the sum of hash
values is at most S.
Instances For
Runtime bundle for the Fischlin random-oracle world.
Instances For
Fischlin verification makes at most ρ random-oracle queries under unit-cost
instrumentation.
Fischlin verification makes at least ρ random-oracle queries under unit-cost
instrumentation.
Fischlin signing makes at most ρ * |Ω| random-oracle queries under unit-cost
instrumentation.
Fischlin signing has weighted query cost at most ρ • (|Ω| • w) whenever every random-oracle
query carries cost at most w.
Fischlin signing has expected weighted query cost at most ρ • (|Ω| • w) whenever every
random-oracle query is weighted by at most w.
Fischlin signing has expected query count at most ρ * |Ω| in the unit-cost runtime model.
This is the expectation-level counterpart of
[Fischlin.sign_usesAtMostRhoCardOmegaQueries].
Fischlin verification has expected query count exactly ρ in the unit-cost runtime model.
Completeness #
Completeness error bound for the Fischlin transform (Fischlin 2005, Lemma 1).
Given ρ repetitions, b-bit hashes, max sum S, and challenge space size t:
the error is ρ · ((2^b - ⌊S/ρ⌋ - 1) / 2^b)^t.
Derivation: by a union/pigeonhole bound over repetitions, if the sum of minimum
hash values exceeds S, at least one minimum exceeds ⌊S/ρ⌋. The probability
that the minimum of t independent uniform samples from Fin (2^b) exceeds k
is ((2^b - k - 1) / 2^b)^t.
For S = 0 this simplifies to ρ · ((2^b - 1) / 2^b)^t.
The intended regime is 0 < ρ; theorem statements below make that explicit.
Instances For
Almost completeness of the Fischlin transform: if the underlying Σ-protocol is
perfectly complete, then the signature scheme verifies with probability at least
1 - completenessError ρ b S t where t = FinEnum.card Chal is the challenge space size.
Unlike the Fiat-Shamir transform (which is perfectly complete), the Fischlin transform
has a non-zero completeness error because the prover's proof-of-work search may fail
to find hash values whose sum is at most S.
Online Extraction / Knowledge Soundness #
Structural query bound: the computation makes at most Q total hash oracle queries
(Sum.inr queries), with no restriction on unifSpec queries (Sum.inl).
Instances For
A cheating prover (knowledge soundness adversary) for the Fischlin transform.
The adversary receives a statement and message, has access to both the random oracle
and internal randomness (unifSpec), and attempts to produce a valid Fischlin proof
without knowing the witness.
The Σ-protocol σ is not referenced in the structure itself (only in the
extraction and verification steps of the experiment), so it enters the
theorem statements via hypotheses like σ.SpeciallySound.
- run : Stmt → M → OracleComp (unifSpec + fischlinROSpec Stmt Commit Chal Resp ρ b M) (FischlinProof Commit Chal Resp ρ)
Instances For
Online extractor for the Fischlin transform (Fischlin 2005, Construction 2).
Given statement x, a proof π, and the log of all hash oracle queries made by
the prover, the extractor searches for two accepting transcripts at the same
commitment with different challenges, then invokes the Σ-protocol's extract
function. Returns none if no such collision is found in the log.
The key property enabling this extractor is UniqueResponses: given the same
(statement, commitment, challenge), there is at most one valid response.
So finding a second valid query at a different challenge gives a proper
input pair for the Σ-protocol extractor.
Instances For
Soundness error bound for the Fischlin transform (Fischlin 2005, Theorem 2).
For Q total hash oracle queries, ρ repetitions, b-bit hashes, and max sum S:
the error is (Q + 1) · (S + 1) · C(S + ρ - 1, ρ - 1) / 2^(bρ).
For S = 0 this simplifies to (Q + 1) / 2^(bρ).
The intended regime is 0 < ρ; theorem statements below make that explicit.
Instances For
The knowledge soundness experiment for the Fischlin transform.
Runs a cheating prover with a logged random oracle, then checks:
- Whether the Fischlin verifier accepts the produced proof.
- Whether the online extractor returns a witness satisfying the relation.
Returns true (the "bad event") when verification succeeds but the extracted
output is either none or an invalid witness.
The prover argument is the raw function rather than KnowledgeSoundnessAdv
to keep type inference tractable with sorry bodies.
Instances For
Knowledge soundness of the Fischlin transform via online (straight-line) extraction (Fischlin 2005, Theorem 2).
If the Σ-protocol is specially sound with unique responses, then for any cheating prover
making at most Q hash queries, the probability that the verifier accepts but the
online extractor fails to recover a valid witness is at most
(Q + 1) · (S + 1) · C(S + ρ - 1, ρ - 1) / 2^(bρ).
Unlike the Fiat-Shamir transform, this extraction is straight-line (no rewinding), which enables a tight security reduction.
EUF-CMA Security #
A tight EUF-CMA corollary for the Fischlin signature scheme requires an explicit simulation of signing queries inside a hard-relation experiment. The previous placeholder theorem overclaimed by bounding forgery probability solely by the knowledge-soundness error, so we intentionally leave that corollary unstated until the signing-simulation reduction is formalized.