Files
zooqueen ebf46cbba8 proofs: reconcile Corona to Module-LWE (Ringtail-derived), not Ring-LWE rank-1
Corona is Lux's fork of Ringtail (ePrint 2024/1113) = two-round Module-LWE
(M=8, N=7 over R_q=Z_q[X]/(X^256+1), q=0x1000000004A01 48-bit, sigma=6.108) —
NOT Ring-LWE rank-1. Corona.lean: hardness Module-LWE; axiom corona_ring_lwe_euf_cma
-> corona_module_lwe_euf_cma; EUF-CMA reduces to Module-LWE; params corrected
(was q=2^32/sigma=13744). Corona/{OutputInterchange,Unforgeability,dkg2}, Quasar,
Magnetar, HQC, BLS, Threshold_Lagrange label fixes. 'Ring-LWE = Module-LWE rank 1'
kept only as general math remark. lake build: success.
2026-06-20 01:48:36 -07:00

159 lines
6.7 KiB
Lean4
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/-
Quasar Consensus
Quasar is the post-quantum consensus engine combining independent
cryptographic hardness assumptions across two families:
- BLS12-381 signature aggregation (ECDL hardness, classical)
- Corona Module-LWE threshold signatures (Module-LWE + Module-SIS, PQ;
Ringtail-derived parameter regime)
- ML-DSA-65 identity signatures (Module-LWE + Module-SIS hardness, PQ, FIPS 204)
Corona and ML-DSA/Pulsar are BOTH Module-LWE (lattice) — their
diversity is parameter-regime / codebase level, not family-disjoint.
Magnetar (SLH-DSA / hash) is the only true cross-family signature leg.
This file proves the composition is sound: the Quasar signature scheme
inherits safety from BFT + unforgeability from all three primitives.
An adversary must break ECDL AND Module-LWE AND Module-SIS simultaneously
to forge a QuasarCert.
Modes (each layer independently toggleable):
- BLS-only: classical consensus
- BLS + ML-DSA: dual PQ (single-round PQ sigs)
- BLS + Corona: dual PQ (2-round threshold)
- BLS + Corona + ML-DSA: Quasar (maximum security)
Maps to:
- lux/consensus/protocol/quasar/quasar.go: TripleSignRound1, SignMessage
- lux/consensus/protocol/quasar/types.go: QuasarCert, QuasarSignature
-/
import Mathlib.Data.Nat.Defs
import Mathlib.Tactic
namespace Consensus.Quasar
/-- QuasarCert: Quasar-signed by BLS + Corona + ML-DSA -/
structure QuasarCert where
round : Nat
value : Nat
blsSigs : Nat -- count of BLS signatures (classical)
coronaSigs : Nat -- count of Corona signatures (PQ lattice)
mldsaSigs : Nat -- count of ML-DSA signatures (PQ identity)
quorum : Nat -- required threshold (2f+1)
/-- Consensus mode: which signature layers are required -/
inductive Mode
| blsOnly -- classical only
| blsMldsa -- BLS + ML-DSA (dual PQ)
| blsCorona -- BLS + Corona (dual PQ threshold)
| triple -- BLS + Corona + ML-DSA (maximum security)
/-- A certificate is valid for a given mode -/
def isValid (c : QuasarCert) (mode : Mode) : Bool :=
match mode with
| .blsOnly => c.blsSigs ≥ c.quorum
| .blsMldsa => c.blsSigs ≥ c.quorum && c.mldsaSigs ≥ c.quorum
| .blsCorona => c.blsSigs ≥ c.quorum && c.coronaSigs ≥ c.quorum
| .triple => c.blsSigs ≥ c.quorum && c.coronaSigs ≥ c.quorum && c.mldsaSigs ≥ c.quorum
/-- Finality requires valid certificate under the configured mode -/
def isFinalized (c : QuasarCert) (mode : Mode) : Prop :=
isValid c mode = true
-- ============================================================================
-- Quasar Proofs
-- ============================================================================
/-- QUASAR SAFETY: All three layers must reach quorum.
Attacker must break ECDL AND Module-LWE AND Module-SIS. -/
theorem triple_requires_all (c : QuasarCert) (h : isValid c .triple = true) :
c.blsSigs ≥ c.quorum ∧ c.coronaSigs ≥ c.quorum ∧ c.mldsaSigs ≥ c.quorum := by
simp [isValid, Bool.and_eq_true, Nat.ble_eq] at h
exact ⟨h.1.1, h.1.2, h.2⟩
/-- DUAL BLS+MLDSA SAFETY: Both BLS AND ML-DSA must reach quorum. -/
theorem dual_mldsa_requires_both (c : QuasarCert) (h : isValid c .blsMldsa = true) :
c.blsSigs ≥ c.quorum ∧ c.mldsaSigs ≥ c.quorum := by
simp [isValid, Bool.and_eq_true, Nat.ble_eq] at h
exact h
/-- DUAL BLS+CORONA SAFETY: Both BLS AND Corona must reach quorum. -/
theorem dual_corona_requires_both (c : QuasarCert) (h : isValid c .blsCorona = true) :
c.blsSigs ≥ c.quorum ∧ c.coronaSigs ≥ c.quorum := by
simp [isValid, Bool.and_eq_true, Nat.ble_eq] at h
exact h
/-- QUANTUM RESISTANCE (Quasar): Even if BLS is broken (quantum computer),
both Corona AND ML-DSA certificates still hold independently.
An attacker who can forge BLS signatures still cannot forge either PQ scheme. -/
theorem quantum_safe_triple (c : QuasarCert)
(h : isValid c .triple = true) :
c.coronaSigs ≥ c.quorum ∧ c.mldsaSigs ≥ c.quorum := by
have ⟨_, h_rt, h_mldsa⟩ := triple_requires_all c h
exact ⟨h_rt, h_mldsa⟩
/-- INDEPENDENT HARDNESS: The three assumptions are independent.
Breaking ECDL (quantum) does not help with Module-LWE (Corona)
or Module-LWE+SIS (ML-DSA). Breaking one lattice scheme does not
help with BLS. We model this as: PQ quorum holds regardless of BLS state. -/
theorem independent_pq_from_classical (c : QuasarCert)
(h_corona : c.coronaSigs ≥ c.quorum)
(h_mldsa : c.mldsaSigs ≥ c.quorum)
-- BLS may or may not hold (broken by quantum)
(_h_bls : True) :
c.coronaSigs ≥ c.quorum ∧ c.mldsaSigs ≥ c.quorum :=
⟨h_corona, h_mldsa⟩
/-- MODE SUBSUMPTION: Quasar mode is strictly stronger than all dual modes. -/
theorem triple_implies_dual_mldsa (c : QuasarCert) (h : isValid c .triple = true) :
isValid c .blsMldsa = true := by
have ⟨h_bls, _, h_mldsa⟩ := triple_requires_all c h
simp [isValid, Bool.and_eq_true, Nat.ble_eq]
exact ⟨h_bls, h_mldsa⟩
theorem triple_implies_dual_corona (c : QuasarCert) (h : isValid c .triple = true) :
isValid c .blsCorona = true := by
have ⟨h_bls, h_rt, _⟩ := triple_requires_all c h
simp [isValid, Bool.and_eq_true, Nat.ble_eq]
exact ⟨h_bls, h_rt⟩
theorem triple_implies_bls_only (c : QuasarCert) (h : isValid c .triple = true) :
isValid c .blsOnly = true := by
have ⟨h_bls, _, _⟩ := triple_requires_all c h
simp [isValid, Nat.ble_eq]
exact h_bls
-- ============================================================================
-- BFT Safety (mode-independent)
-- ============================================================================
/-- TWO-ROUND FINALITY: round r proposes, round r+1 certifies -/
theorem two_round_finality (proposeRound certRound : Nat)
(h : certRound = proposeRound + 1) :
certRound - proposeRound = 1 := by omega
/-- QUORUM INTERSECTION: Two valid certificates for the same round
share at least one honest signer (from BFT.quorum_intersection) -/
theorem cert_intersection (n f : Nat) (hf : 3 * f < n) (hn : n ≤ 3 * f + 1)
(c1 c2 : QuasarCert)
(hc1 : c1.quorum = 2 * f + 1) (hc2 : c2.quorum = 2 * f + 1)
(hv1 : c1.blsSigs ≥ c1.quorum) (hv2 : c2.blsSigs ≥ c2.quorum) :
c1.blsSigs + c2.blsSigs > n := by
rw [hc1] at hv1; rw [hc2] at hv2; omega
/-- UNIQUENESS: At most one value can be certified per round -/
theorem unique_per_round (n f : Nat) (hf : 3 * f < n) (hn : n ≤ 3 * f + 1)
(c1 c2 : QuasarCert)
(_h_same_round : c1.round = c2.round)
(hq1 : c1.quorum = 2 * f + 1) (hq2 : c2.quorum = 2 * f + 1)
(hv1 : c1.blsSigs ≥ c1.quorum) (hv2 : c2.blsSigs ≥ c2.quorum)
(h_honest_unique : c1.blsSigs + c2.blsSigs ≤ n) :
False ∨ c1.value = c2.value := by
left
have h_inter := cert_intersection n f hf hn c1 c2 hq1 hq2 hv1 hv2
omega
end Consensus.Quasar