Fischlin Transform: Core Definitions #
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.
This module holds the core definitions: the random-oracle input type FischlinROInput, the
oracle signature fischlinROSpec, the proof type FischlinProof, the prover's inner search
fischlinSearchAux, the transform Fischlin itself, and the bundled random-oracle runtime
used to denote the signature scheme as a probabilistic computation.
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)
Module layout #
The development is split across the sibling modules under Fischlin/:
Fischlin.Defs— the definitions in this file.Fischlin.CostAccounting— random-oracle query-cost and expected-query bounds forsignandverify.Fischlin.Completeness— the completeness boundalmostCompletevia the pure-probability model game.Fischlin.KnowledgeSoundness— online extraction and theknowledgeSoundnessbound via a supermartingale potential argument.
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 #
Recursive search over a list of challenges for one Fischlin repetition.
For each challenge ω, computes the sigma protocol response and queries the hash oracle.
Exits early if a hash value of 0 is found (the ideal "proof of work" result).
Otherwise, tracks the (challenge, response) pair with the minimal hash value.
This models the sequential search in Construction 1 of the Fischlin paper:
the prover queries H on each input and keeps the best.
Instances For
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.