Skip to content

Sphincs FV - #275

Merged
TomWambsgans merged 21 commits into
mainfrom
sphincs-fv
Sep 13, 2026
Merged

Sphincs FV#275
TomWambsgans merged 21 commits into
mainfrom
sphincs-fv

Conversation

@TomWambsgans

Copy link
Copy Markdown
Collaborator

127 bits of classical SUF for our sphincs, in the ROM

Lean4 checked, based on VCVio

Sign layers from bottom to top, stop at the first failed encoding search, and compute the discarded top root on success. Update the reference cost models and execution proofs, with regression coverage for failure positions and serialization order.

Validation: full lake build without warnings, independent public-theorem and axiom checks, and kernel replay of all eight changed modules.
Bound hash calls on supported executions of the consistent cached random oracle, counting cache hits and all honest computation. Adapt both security proofs without strengthening their public hypotheses, and add regression proofs separating consistent execution budgets from arbitrary reply paths.

Validate both full Lake builds, explicit public theorem types, standard-axiom audits, regression kernel checks, fresh leanchecker replays, and the SPHINCS LaTeX build. Independent adversarial reviews found no remaining issues.
Tighten definitions and explanations, remove implementation-specific references, and clarify parameter meanings. Add vector diagrams for the branching hypertree, vertical WOTS chains, the FORS forest, and complete verification.

Build with latexmk and visually check all four figures. The final build has no LaTeX warnings or layout issues.
Derive each FORS and hypertree parent index from the previous index by clearing its low bit and dividing by GEN. Preserve the existing tweak bytes.

For aggregate --sphincs 245 --log-inv-rate 1 --repeat 3, VM cycles fall from 2,351,886 to 2,123,791 (9.7%).

Validation: benchmark proof verification, aggregate_mixed_two_to_one, aggregate_hints_bind, and git diff --check passed.
Use a 16-byte layout with protocol_domain_sep 0 for XMSS and 1 for SPHINCS. Align type codes and field positions across the native encoders, aggregation guest, specifications, and Lean statements. Adapt the byte-injectivity proofs and preserve the incremental SPHINCS parent-index calculation.

Keep both specifications self-contained. Remove the exact-layout test and the complete-verification diagram.

Validation: release workspace tests, adversarial witness checks, affected-crate Clippy, both LaTeX builds, and both Lean security proofs with unchanged axiom footprints pass. Aggregation benchmarks verify at 2,132,425 cycles for 245 SPHINCS signatures and 1,573,750 cycles for 900 XMSS signatures.
Use the full 32-byte SPHINCS seed for WOTS and FORS derivation. Derive both schemes public parameters under tweak type 10 with a zero public-parameter field. Use dedicated types 0 and 5 for signing secrets and type 11 for XMSS filler nodes, retaining separate protocol prefixes.

Update SPHINCS secret-key serialization to 48 bytes, expose MasterSecret, refresh benchmark caches, and document the seeded constructions. The seeded Lean proof extensions remain separate work.

Validation: release workspace tests, full-master and domain-separation regressions, adversarial aggregation hints, affected-crate Clippy, and both LaTeX builds pass.
Derive the public parameter and signing secrets from one 256-bit master seed in both complete Statement.lean specifications. Preserve scheme and key-derivation domain separation.

Reduce the shared consistent random-oracle games to independent secrets, account for adaptive seed guessing and every actual hash call, and retain the 127-bit bound. Keep proof machinery separate from the statements and align the standalone documents.

Validation: both full Lean builds and standard-axiom guards passed; final edited modules checked; both LaTeX projects built. Independent adversarial reviews found no proof blockers, and their documentation findings were corrected. Existing XMSS implementation coverage limits are recorded in its README.
Use a separate type-12 hash domain for deterministic signing trials, bound XMSS search, and remove RNG arguments from both signing APIs and their callers. Update both specifications and keep the complete deterministic schemes in Statement.lean.

Prove both public 127-bit security claims by coupling seed-derived trials to independent tables, replaying repeated requests, and transferring the consistent random-oracle query budget. Keep randomized reference schemes inside the proof modules.

Validation: both full Lean builds and standard-axiom guards; release signature tests and aggregate_two_to_one; release workspace check; focused clippy; rustdoc; formatting; both LaTeX builds; adversarial reviews.
Expose only hash and signing queries in the public adversary interface and sample the master seed outside the hash-only game. Preserve the complete counted experiment through an embedding into the internal randomized game, and prove the independent-strategy averaging bound.

Update both specifications and proof guides. Validated both full Lean builds, query-budget regression checks, standard axiom footprints, both LaTeX builds, and adversarial reviews.
Reuse each scheme’s key-generation definition, factor duplicated game code, and shorten the oracle logging and counting arguments. Make hash byte lengths explicit in each self-contained statement while keeping the projects independent.

Validation: both full Lean builds and query-budget tests pass. Public security claims and randomized-adversary results use only the three standard Lean axioms. Independent adversarial reviews found no issues.
Keep main's README structure and naming while preserving the updated SPHINCS benchmark results.
@TomWambsgans
TomWambsgans merged commit e41c289 into main Sep 13, 2026
8 checks passed
@TomWambsgans
TomWambsgans deleted the sphincs-fv branch September 13, 2026 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant