Fiat-Shamir-with-aborts transform #
Signing variant of Fiat-Shamir used by lattice schemes such as ML-DSA. On
input (pk, sk, msg) the prover runs a commit-hash-respond loop up to
maxAttempts times, returning the first non-aborting transcript or none
if every attempt aborts.
This file holds the scheme definition, the random-oracle runtime bundle, and
the core cache invariant that drives the correctness proof. Cost-accounting
lemmas, expected-cost PMFs, and the EUF-CMA security statement live in the
FiatShamir.WithAbort.Cost, FiatShamir.WithAbort.ExpectedCost, and
FiatShamir.WithAbort.Security submodules.
References #
- Barbosa et al., Fixing and Mechanizing the Security Proof of Fiat-Shamir with Aborts and Dilithium, CRYPTO 2023 (ePrint 2023/246)
- EasyCrypt
FSabort.eca,SimplifiedScheme.ec - NIST FIPS 204, Algorithms 2 (ML-DSA.Sign) and 3 (ML-DSA.Verify)
One signing attempt for the Fiat-Shamir-with-aborts transform.
This performs a single commit-hash-respond cycle and returns the public commitment together with
either a response or an abort marker. Unlike [fsAbortSignLoop], it never retries internally.
Instances For
Signing retry loop with early return for the Fiat-Shamir with aborts transform.
Tries up to n commit-hash-respond cycles:
- Commit to get
(w', st) - Hash
(msg, w')via the random oracle to get challengec - Attempt to respond; if
some z, return immediately; ifnone(abort), decrement the counter and retry.
Returns none only when all n attempts abort.
Instances For
The Fiat-Shamir with aborts transform applied to an identification scheme with aborts. Produces a signature scheme in the random oracle model.
The signing algorithm runs fsAbortSignLoop (up to maxAttempts iterations) with
early return on the first non-aborting response.
The type parameters are:
M: message spaceCommit: public commitment (included in signature for verification)Chal: challenge space (range of the hash/random oracle)Resp: response spaceStmt/Wit: statement / witness (= public key / secret key)
Instances For
Runtime bundle for the Fiat-Shamir-with-aborts random-oracle world.
Instances For
When the simulated signing loop produces some (w, z), the random-oracle cache
contains a challenge c at (msg, w) satisfying ids.verify pk w c z = true.
This is proved by induction on the loop counter: each abort iteration preserves the invariant (the cache only grows), and a successful iteration writes exactly the challenge used in verification.
When the random-oracle cache already contains the challenge for (msg, w),
verification of signature (w, z) deterministically returns true.
Correctness of the Fiat-Shamir with aborts signature scheme: the canonical
keygen-sign-verify execution succeeds with probability at least 1 - δ, where δ bounds
the per-key probability that signing aborts (returns none).
When the underlying IDS is complete, any non-aborting signature verifies correctly (by RO
consistency and IdenSchemeWithAbort.verify_of_complete). So the only source of
verification failure is signing abort, and the completeness error equals the abort probability.
The hypothesis h_abort bounds the abort probability for each valid key pair separately.
It can be discharged using sign_abortPrefixProbability_eq_signAttemptAbortProbability_pow,
which gives Pr[sign = none] = signAttemptAbortProbability ^ maxAttempts for fixed keys.
Unlike the CRYPTO 2023 paper and EasyCrypt formalization (which use an unbounded signing loop
and do not state a correctness theorem), this formulation uses a bounded loop with
maxAttempts iterations, matching FIPS 204 Algorithm 7 (ML-DSA.Sign_internal).