- proofs/easycrypt/: 13 EC files mirroring Pulsar layout, admit budget 0/0 statically pinned by scripts/checks/ec-admits.sh
- proofs/lean-easycrypt-bridge.md: 5-axiom Lean ↔ EC bridge (lagrange_inverse_eval, threshold_partial_response_identity, reconstruct_linear, shamir_correct, add_share_zeroR)
- jasmin/{lib,rlwe,threshold}/: round1/round2/combine .jazz with #ct annotations
- ct/dudect/: Verify + Combine harness (arm64 + x86_64 build tags)
- scripts/check-high-assurance.sh + scripts/checks/{ec-admits,ec-regressions,ec-refinement-scaffold,ec-compile,jasmin,extraction}.sh + check-lean-bridge.sh
- AXIOM-INVENTORY: residual axioms enumerated with closure pathways
- CRYPTOGRAPHER-SIGN-OFF: APPROVED WITH ROADMAP GATES; GATE-1+2+3a CLOSED; GATE-3b (dudect 10⁹ pinned CPU) + GATE-4 (external audit) + GATE-5 (Jasmin extraction filling out byte-walk) roadmap v0.8.0
Tier label: Tier A full closure scaffold landed; matches Pulsar v1.0.7 posture (admit 0/0 + Lean bridges + Jasmin + dudect harness wired). The submission-grade dudect run + external audit are v0.8.0 audit-track items.
13 KiB
PROOF-CLAIMS — Corona (HONEST framing)
What this submission proves, and — critically — what it does NOT. Companion to
TRUSTED-COMPUTING-BASE.md(TCB) andSUBMISSION.md(cover sheet).Read this before reading the Corona code. The framing matters as much as the implementation.
§1 The narrow claim Corona makes at this submission
The strongest precise statement supported by Corona v0.4.1:
Construction-level interchangeability (Class N1). Every signature byte string produced by the Corona threshold combine procedure (
threshold.Combine/sign.LocalSignaggregation flow) on inputs(group_pk = (A, bTilde), m, ctx, quorum, shares)satisfying the protocol's well-formedness invariants verifies under the Corona reference verifiersign.Verify(group_pk, m, σ)with outcomeOK.
Public-key preservation across resharing (Class N4). Every Corona Refresh or ReshareToNewSet ceremony on input
(group_pk = (A, bTilde), old_shares, old_committee, new_committee)satisfying the protocol's honest-majority assumption producesnew_sharessuch that any subsequent threshold signing under those new shares verifies under the byte-identical unchangedgroup_pk.
Formal-statement status: these are stated in prose, validated by test, and inherited from the Boschini et al. ePrint 2024/1113 §3 analysis for the underlying construction. They are NOT mechanized in EasyCrypt, Lean, Jasmin, or any other proof assistant at this submission. See §3 below for the explicit non-claims list.
§2 What IS provided
| Aspect | Status | Source |
|---|---|---|
| Implementation matches the Boschini et al. ePrint 2024/1113 construction | ✓ by code review + KAT cross-validation | sign/, threshold/, primitives/ |
| Class N1 (construction-level output verifies under same verifier) | ✓ by test (no mechanized refinement) | sign/sign_test.go, sign/sign_roundtrip_test.go, threshold/threshold_test.go |
Class N4 (reshare preserves (A, bTilde)) |
✓ by test (45+ tests in reshare/, integration tests assert byte-equal (A, bTilde) post-reshare) |
reshare/full_integration_test.go, reshare/refresh_test.go, reshare/reshare_test.go |
| Constant-time on threshold + dkg2 verification paths | ✓ by per-path static audit | CONSTANT-TIME-REVIEW.md |
| KAT cross-runtime byte-equality (Go ↔ C++ luxcpp port) | ✓ by manifest enforcement | scripts/regen-kats.sh --verify + scripts/regen-kats.manifest.sha256 |
| Fuzz coverage on round-based protocols | ✓ harnesses wired (operational fuzz budgets are deployment-level) | reshare/fuzz_*_test.go, dkg2/fuzz_round_test.go, threshold/fuzz_round_test.go |
| Hash-suite injection for Corona-SHA3 production profile | ✓ by code (F22 closure) | hash/sp800_185.go, primitives/hash.go |
| Identifiable-abort evidence | ✓ by test | reshare/complaint_test.go, dkg2/complaint.go |
| Activation cert as circuit-breaker | ✓ by test (verifies under unchanged GroupKey) | reshare/activation_test.go |
§3 What is NOT proved (HONEST)
This section is the load-bearing honesty disclosure. Read it.
§3.1 v0.7.0: EC + Lean + Jasmin scaffolding LANDED (was: NOT proved)
v0.7.0 update: Corona now ships:
- 13 EasyCrypt theories compiling clean with admit budget 0/0
(
proofs/easycrypt/Corona_N1.ec+Corona_N4.ec+ Layout + Refinement + Wrapper + Extracted +lemmas/RLWE_Functional.ec+lemmas/Corona_CT.ec). - 5 Lean <-> EC bridges (Shamir, OutputInterchange,
Unforgeability, dkg2 -- see
proofs/lean-easycrypt-bridge.md). - 3 Jasmin threshold-layer sources (round1.jazz, round2.jazz,
combine.jazz) with
#ctannotations + 1 centralized rlwe/sign.jazz reference + alib/of shared primitives. - dudect harness at
ct/dudect/for Verify + Combine. - CI orchestrator
scripts/check-high-assurance.shwith 7 per-push gates (mirroring Pulsar's exactly).
What's still operational (roadmap v0.8.0):
- Jasmin extraction filling out the byte-walk refinement obligations
in
Corona_N1_{Combine,Sign}_Refinement.ec. - dudect submission-grade 10^9-sample runs on pinned hardware.
- External cryptographic audit engagement.
The implementation-backed N1 byte-equality theorem to cite is
Corona_N1_Extracted.corona_n1_byte_equality_extracted.
R-LWE threshold signing has no NIST standard target. The Boschini
et al. ePrint 2024/1113 construction IS the spec; the EC theories
refine the Go implementation against the in-house mechanization of
that spec (lemmas/RLWE_Functional.ec), which is the analog of
Pulsar's libjade dependence on FIPS 204.
§3.2 NOT proved: lattice-hardness of R-LWE
This submission says nothing about the post-quantum hardness of
Ring-LWE itself. R-LWE security rests on Lyubashevsky-Peikert-Regev
(2010) and follow-up cryptanalytic analysis. The parameter set
(N = 256, q = 0x1000000004A01, 48-bit prime) was chosen to
provide ≥ 128 bits of post-quantum security per lattice-estimator
methodology — but Corona ships no parameter-set worksheet at this
revision; that is roadmap item v0.6.0.
The defensible PQ-safety claim:
Corona implements a published academic R-LWE threshold signature construction (Boschini et al. ePrint 2024/1113) on a parameter set chosen to provide ≥ 128 bits of post-quantum security against known R-LWE attacks per the lattice-estimator methodology of Albrecht-Player-Scott. The construction's EUF-CMA reduction is in the cited paper.
NOT defensible:
Corona is proved post-quantum secure.
§3.3 NOT proved: byte-equality with FIPS 204 ML-DSA
Corona signatures are NOT byte-equal to FIPS 204 ML-DSA signatures.
The two constructions use different lattice families (Corona is
R-LWE; ML-DSA is M-LWE), different ring degrees, different
parameter sets. Any reviewer expecting FIPS 204 byte-equality
should look at the Pulsar sibling at ~/work/lux/pulsar/.
§3.4 NOT proved: statistical constant-time validation (dudect)
CONSTANT-TIME-REVIEW.md documents a per-path static audit with
zero (c) (must-fix) findings. It does NOT include statistical
validation via dudect-style timing measurements. A dudect-style
harness is roadmap item v0.8.0; at submission scaffolding time the
constant-time evidence is the static audit + the upstream lattigo
constant-time claims.
§3.5 NOT proved: implementation-side covert-channel safety
The static constant-time audit does NOT address:
- Memory-access leakage (cache-timing side channels)
- Power side-channels
- EM side-channels
- Fault attacks
- Microarchitectural leakage (Spectre / Meltdown class)
- Statistical timing under realistic deployment conditions
Production deployments MUST follow the hardening checklist in
DEPLOYMENT-RUNBOOK.md (mlock pinning, core-dump disable, ptrace
disable, dedicated host, etc.).
§3.6 NOT proved: protocol-level adversarial robustness
The construction-level claim in §1 is honest-quorum correctness. It says: "when all parties follow the protocol, the output verifies and resharing preserves the group key." It does NOT prove:
- Unforgeability under adaptive corruption — inherited (with caveats) from Boschini et al. §3; no Corona-specific mechanization.
- Identifiable abort under network partition — synchronous network assumptions hold; async abort is out of scope.
- Robust completion under
f < t/2Byzantine parties. - DKG soundness under adversarial dealer — Pedersen DKG (
dkg2/) provides hiding and binding under standard assumptions; full reduction is in the LP-073 paper but not mechanized here.
§3.7 v0.7.0: 5 Lean-bridged algebraic axioms LANDED (was: NOT proved)
v0.7.0 update: Corona now has 5 Lean-bridged algebraic axioms, in 1:1 correspondence with Pulsar's:
| Corona EC axiom | Lean theorem |
|---|---|
lagrange_inverse_eval (Corona_N1.ec) |
Crypto.Corona.Shamir.shamir_correct_at_target |
threshold_partial_response_identity (Corona_N1.ec) |
Crypto.Threshold.Lagrange.threshold_partial_response_identity |
add_share_zeroR (Corona_N4.ec) |
Mathlib AddCommMonoid instance |
reconstruct_linear (Corona_N4.ec) |
Crypto.Threshold.Lagrange.combine_distributes_over_sum |
shamir_correct (Corona_N4.ec) |
Crypto.Corona.Shamir.shamir_correct_at_target |
The bridge document is proofs/lean-easycrypt-bridge.md. The CI
guard scripts/check-lean-bridge.sh verifies every EC axiom has the
required citation comment + that the cited Lean theorem still exists
in the named Lean file.
§4 Refinement chain (what's connected to what)
Go implementation (sign/, threshold/, dkg2/, reshare/, primitives/, hash/)
implements (by code review + KAT)
Boschini et al. ePrint 2024/1113 §3 algorithmic spec
+ Corona production-lifecycle additions in SPEC.md §§6, 9, 10, 13
conforms to (by inspection)
DESIGN.md invariants ("what is preserved across resharing")
Each "implements" / "conforms" relation is by inspection and test, NOT machine-checked. Compare to Pulsar's refinement chain (machine-checked at every step via EasyCrypt 13/13 + Lean bridges 5/5 + Jasmin-CT 3/3).
§5 What an auditor verifying this submission should do
- Read the
SUBMISSION.mdcover sheet for context. - Read this document (
PROOF-CLAIMS.md) for what's proved vs not. - Read
TRUSTED-COMPUTING-BASE.mdfor the implementation TCB. - Read
CONSTANT-TIME-REVIEW.mdfor the per-path CT audit. - Read Boschini et al. ePrint 2024/1113 for the underlying construction analysis (academic prior art).
- Run
scripts/test.sh— expect Go unit + integration + KAT tests all green. - Run
scripts/gen_vectors.sh && scripts/regen-kats.sh --verify— expect byte-equal KAT manifest agreement. - Read the Go reference implementation:
sign/sign.go,threshold/threshold.go,dkg2/dkg2.go,reshare/reshare.go,reshare/activation.go,primitives/hash.go,hash/sp800_185.go. - Run
scripts/bench.sh— expect performance numbers withindocs/evaluation.mdpublished bounds.
§6 The honest one-paragraph version
Corona's submission package establishes that the Go reference implementation faithfully implements the Boschini, Kaviani, Lai, Malavolta, Takahashi, and Tibouchi 2-round R-LWE threshold signature construction (IACR ePrint 2024/1113, IEEE S&P 2025) on a fixed parameter set, plus production lifecycle additions (Pedersen DKG over
R_q, proactive resharing with Refresh + ReshareToNewSet primitives, identifiable abort, activation certs as the resharing circuit-breaker, KAT-deterministic Corona-SHA3 hash suite). Unlike the Pulsar sibling submission (which ships a mechanized EasyCrypt + Lean + Jasmin refinement chain against FIPS 204), Corona ships NO machine-checked refinement at this submission — R-LWE has no NIST standard target, the construction IS the spec, and mechanizing the construction itself is a multi- month research roadmap item. Corona's correctness evidence reduces to code review of the Go reference against the published construction, KAT cross-validation (Go ↔ C++ byte-equality manifest), the per-path constant-time static audit inCONSTANT-TIME-REVIEW.md(zero must-fix findings), fuzz harness coverage, and the academic security analysis in the cited paper. The proof tier is intentionally less mature than Pulsar's; the roadmap items inNIST-SUBMISSION.mdlay out the multi-version path to mechanized refinement.
§7 Roadmap (multi-version closure path)
| Milestone | Target version | Status |
|---|---|---|
Single-document spec/corona.tex consolidating LaTeX |
v0.6.0 | shipped |
| EasyCrypt theory shell for the construction-level interchangeability claim | v0.7.0 | shipped (13 files, admit 0/0) |
Lean 4 / Mathlib mechanization of Lagrange-aggregation over R_q |
v0.7.0 | shipped (5 Lean-bridged axioms) |
| Jasmin sources + jasmin-ct CT gates on the threshold layer | v0.7.0 | shipped (3 threshold + 1 rlwe + lib/) |
| dudect harness wired (smoke-budget) | v0.7.0 | shipped (Verify + Combine) |
| dudect submission-grade 10^9-sample runs on pinned hardware | v0.8.0 | roadmap |
| External cryptographic audit (engaged lab) | v0.8.0 | roadmap |
| Parameter-set worksheet (lattice-estimator concrete bounds) | v0.6.0 | shipped |
| Jasmin extraction filling out byte-walk refinement | v0.8.0 | roadmap |
The closure path is real but long. The honest framing at this submission: production-hardened implementation of a published academic construction, with production lifecycle additions, NOT machine-checked refinement of a NIST standard.
Document metadata
- Name:
PROOF-CLAIMS.md - Version: v0.2 (v0.7.0 EC + Lean + Jasmin scaffold landed)
- Date: 2026-05-18