mirror of
https://github.com/luxfi/proofs.git
synced 2026-10-30 15:21:05 +00:00
Bylines, paper authorship, correspondence addresses and the founder blurb under each post named an individual. They name the organisation that published the work instead: the brand on posts and pages, the research byline on papers, and research@ in place of a personal address. Both are what these repositories already used elsewhere — nothing new was coined. Co-authors are untouched. Where a paper named someone else alongside, they stay named; only the one byline changed. Bibliography entries, running heads, PDF metadata and affiliations move with it, so a citation still resolves to whoever the cited paper names. Sample and fixture data uses the placeholder name these tests already use elsewhere, so no assertion changed meaning. Co-authored-by: Hanzo Dev <[email protected]>
498 lines
22 KiB
TeX
498 lines
22 KiB
TeX
\documentclass[11pt]{article}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{amsmath, amssymb, amsthm}
|
|
\usepackage{booktabs}
|
|
\usepackage{hyperref}
|
|
\usepackage{graphicx}
|
|
\usepackage{geometry}
|
|
\geometry{margin=1in}
|
|
|
|
\newtheorem{theorem}{Theorem}
|
|
\newtheorem{lemma}[theorem]{Lemma}
|
|
\newtheorem{definition}[theorem]{Definition}
|
|
\newtheorem{proposition}[theorem]{Proposition}
|
|
\newtheorem{remark}[theorem]{Remark}
|
|
|
|
\title{Post-Quantum Finality for Lux Quasar \\ {\large Replacing BLS Aggregation with ML-DSA + Corona}}
|
|
\author{Lux Research \\
|
|
\textit{Lux Industries Research}}
|
|
\date{2026-04-13}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
The current Quasar consensus certificate combines BLS12-381 aggregation with
|
|
the Corona and ML-DSA lattice threshold signatures for ``defense in
|
|
depth.'' We show
|
|
that BLS contributes no post-quantum security to the combined cert and
|
|
can be removed without loss of PQ soundness. The simplified Quasar
|
|
certificate uses only $\mathsf{ML\text{-}DSA}$ (FIPS 204, Module-LWE/MSIS)
|
|
and $\mathsf{Corona}$ (a Module-LWE threshold signature, the Lux fork of
|
|
Ringtail (Boschini et al., IACR ePrint 2024/1113; see Related Work):
|
|
module dimensions $M=8$, $N=7$ over
|
|
$R_q = \mathbb{Z}_q[X]/(X^{256}+1)$, $q = \mathtt{0x1000000004A01}$,
|
|
$\sigma_E = 6.108$, NIST Category~1) --- two independent
|
|
lattice instances, each post-quantum. The result is operationally simpler,
|
|
smaller in the common case, and provably PQ-safe under either instance
|
|
independently.
|
|
|
|
\paragraph{Naming.} ``Corona'' is the Lux first-party fork of Ringtail
|
|
(Boschini et al., IACR ePrint 2024/1113; see Related Work), the
|
|
two-round Module-LWE threshold signature;
|
|
Corona adds a permissionless leaderless DKG, verifiable resharing,
|
|
activation cert, and rollback suitable for validator rotation (LP-4440 /
|
|
\texttt{github.com/luxfi/corona}). ``Pulsar'' (LP-073 /
|
|
\texttt{github.com/luxfi/pulsar}) is a \emph{separate} Module-LWE
|
|
threshold scheme, parameterised to be byte-equal to FIPS~204 ML-DSA-65;
|
|
it is not a fork of Corona, nor is Corona a fork of it. Both are
|
|
Module-LWE --- their diversity is parameter regime and lifecycle, not
|
|
lattice family. The soundness arguments below apply to either signing
|
|
primitive.
|
|
|
|
This document specifies:
|
|
\begin{enumerate}
|
|
\item the reduced three-layer Quasar cert: per-block committee cert,
|
|
per-epoch Pulsar pulse, per-era Z-chain ZK proof;
|
|
\item the security argument (forgery requires breaking both
|
|
independent Module-LWE instances --- ML-DSA's and Corona's);
|
|
\item concrete efficiency numbers measured on MacBook M3 / arm64;
|
|
\item why a fixed-size committee of $k=128$ is scale-invariant from
|
|
$N=10^3$ to $N=10^5$ validators.
|
|
\end{enumerate}
|
|
\end{abstract}
|
|
|
|
\section{Motivation}
|
|
|
|
The classical BLS12-381 pairing-based aggregate signature is broken in
|
|
polynomial time by a sufficiently large quantum computer (Shor's algorithm
|
|
on the discrete log in $\mathbb{F}_{q^{12}}$). Including BLS in a
|
|
``PQ-safe'' finality cert therefore provides only a classical speed-up;
|
|
it cannot contribute to the post-quantum security argument.
|
|
|
|
This leaves Quasar with three natural reasons to keep BLS:
|
|
\begin{enumerate}
|
|
\item \textbf{Speed}: classical verification of a BLS aggregate is ${\sim}$1 ms.
|
|
\item \textbf{Size}: a BLS aggregate is 48 bytes; 128 individual ML-DSA
|
|
signatures are $128 \times 2420 = 309{,}760$ bytes.
|
|
\item \textbf{Hedge}: if all lattice assumptions break simultaneously,
|
|
BLS still holds until a quantum attacker materialises.
|
|
\end{enumerate}
|
|
|
|
Against these we weigh:
|
|
\begin{itemize}
|
|
\item \textbf{False sense of security}: operators reading ``PQ cert''
|
|
may assume the cert is PQ when in fact it is only PQ conditional
|
|
on verifying the lattice component.
|
|
\item \textbf{Complexity cost}: three independent crypto stacks
|
|
(BLS pairing, plus two distinct Module-LWE instances --- ML-DSA
|
|
and Corona) to maintain, benchmark, and audit.
|
|
\item \textbf{PQ-first deployments}: networks that explicitly reject
|
|
any classical primitive (regulated finance, long-archival chains)
|
|
cannot use the BLS-inclusive cert at all.
|
|
\end{itemize}
|
|
|
|
We conclude the hedge argument does not justify the complexity and drop
|
|
BLS.
|
|
|
|
\section{Reduced Quasar Certificate}
|
|
|
|
\subsection{Per-block committee certificate (hot path)}
|
|
|
|
For each block at height $h$:
|
|
\begin{enumerate}
|
|
\item A committee $C_h \subset \mathcal{V}$ of size $k = 128$ is sampled
|
|
from the validator set $\mathcal{V}$ (of size $N$) via a
|
|
post-quantum VRF:
|
|
\[
|
|
C_h = \textsf{Sample}_{\textsf{VRF}}\!\left(\textsf{prev\_hash} \,\|\, h; \textsf{stake}\right).
|
|
\]
|
|
The VRF uses a lattice-based construction (or $\mathsf{ML\text{-}DSA}$
|
|
itself as a hash-based VRF, with unpredictability in the ROM).
|
|
\item Each $v_i \in C_h$ signs the block header $B_h$ with its individual
|
|
$\mathsf{ML\text{-}DSA}\text{-}65$ key:
|
|
\[
|
|
\sigma_i = \mathsf{ML\text{-}DSA.Sign}(sk_i, B_h).
|
|
\]
|
|
\item The block carries $\textsf{cert}_h = \big(C_h^{\textsf{bitmap}}, (\sigma_i)_{i \in C_h^{\textsf{signed}}}\big)$.
|
|
\item A block is considered \emph{locally final} iff
|
|
$|C_h^{\textsf{signed}}| \geq \lceil 2k/3 \rceil$.
|
|
\end{enumerate}
|
|
|
|
This cert is $\leq 128 \times 2420 = 309{,}760$ bytes and verifies in
|
|
$\sim 5$ ms on commodity hardware (measured below).
|
|
|
|
\subsection{Per-epoch Corona aggregate (warm path)}
|
|
|
|
An \emph{epoch} spans $E$ blocks (target: $E = 128$, one hour at 30-second
|
|
block times). At the end of each epoch, the committee that signed block
|
|
$h_{\text{end}}$ produces a $\mathsf{Corona}$ threshold signature over
|
|
the epoch tail Merkle root:
|
|
\[
|
|
\sigma_{\text{epoch}} = \mathsf{Corona.Combine}\!\Big(\big(\mathsf{Corona.Sign}_i(r_{\text{epoch}})\big)_{i \in C_{h_{\text{end}}}^{\textsf{signed}}}\Big),
|
|
\]
|
|
where $r_{\text{epoch}}$ is the Merkle root over $\{B_h\}_{h \in \text{epoch}}$.
|
|
$\sigma_{\text{epoch}}$ is $\sim 5$--$10$ kB regardless of epoch length.
|
|
|
|
Once an epoch aggregate is available, validators may prune the individual
|
|
block certs inside the epoch; archival nodes keep them for auditability.
|
|
|
|
\subsection{Per-era Z-chain ZK proof (cold path)}
|
|
|
|
An \emph{era} spans $R$ epochs (target: $R = 168$, one week at hourly epochs).
|
|
At the end of each era, a Groth16 or PLONK proof $\pi_{\text{era}}$ is
|
|
produced on the Z-chain proving:
|
|
\[
|
|
\pi_{\text{era}} : \exists\ (C_h, \sigma_h)_{h \in \text{era}}\ \ \text{s.t.}\ \ \bigwedge_h \mathsf{QuasarVerify}(B_h, C_h, \sigma_h) = 1.
|
|
\]
|
|
$\pi_{\text{era}}$ is $\leq 200$ bytes and verifies in $\sim 3$ ms.
|
|
Light clients sync by downloading era proofs, not block certs.
|
|
|
|
\section{Scheme-agnostic certificate and the signature registry}
|
|
\label{sec:scheme-agnostic}
|
|
|
|
The committee certificate of the previous section
|
|
is written with $\mathsf{ML\text{-}DSA}\text{-}65$ as the per-signer
|
|
primitive. In the shipped engine the primitive is \emph{not} baked into
|
|
the consensus rule: the engine defines only the \emph{quorum predicate}
|
|
(a stake-weighted $\tfrac23$ rule), and the node injects the per-signer
|
|
signature scheme as a wire-tagged parameter. This decoupling is what
|
|
makes the classical$\to$PQ migration a configuration flip rather than a
|
|
protocol change, and it is the object this section formalises.
|
|
|
|
\begin{definition}[Signature-scheme registry]
|
|
\label{def:sigscheme-registry}
|
|
A one-byte identifier $\mathsf{SigSchemeID} \in \{0,\dots,255\}$ names
|
|
the scheme that produced a signature slot of a Quasar certificate. The
|
|
registry (\texttt{config/pq\_mode.go}) is block-structured and
|
|
open-ended:
|
|
\[
|
|
\begin{array}{ll}
|
|
\texttt{0x00} & \text{none (BLS-only certs commit to no scheme)}\\
|
|
\texttt{0x10} & \mathsf{BLS12\text{-}381}\ \text{aggregate (classical, day-1)}\\
|
|
\texttt{0x20} & \text{Nasua / academic R\text{-}LWE threshold (BLAKE3 profile)}\\
|
|
\texttt{0x30} & \mathsf{Pulsar.R}\ \text{production R\text{-}LWE threshold}\\
|
|
\texttt{0x41/42/43} & \text{raw } \mathsf{ML\text{-}DSA}\text{-}44/65/87\ \text{(FIPS 204, single-party)}\\
|
|
\texttt{0x51/52/53} & \mathsf{Pulsar\text{-}M}\text{-}44/65/87\ \text{(M\text{-}LWE threshold)}\\
|
|
\end{array}
|
|
\]
|
|
$\texttt{0x52}$ ($\mathsf{Pulsar\text{-}M}\text{-}65$) is the production PQ
|
|
default. The $\texttt{0x40}$ and $\texttt{0x50}$ blocks are kept distinct
|
|
on purpose: both verify under the \emph{unmodified} FIPS 204
|
|
$\mathsf{ML\text{-}DSA.Verify}$ relation, but the producing protocol
|
|
differs (single-party vs.\ threshold), and the wire separates them so a
|
|
receiver knows which kernel emitted the bytes. New entries claim the
|
|
next free integer in their block and are pinned in a test vector before
|
|
any code references them; a retired id is never reused.
|
|
\end{definition}
|
|
|
|
\begin{definition}[Scheme-parametric quorum predicate]
|
|
\label{def:scheme-predicate}
|
|
Let $s = \mathsf{SigSchemeID}$ and let $\mathsf{Verify}_s$ be its
|
|
verification relation. A certificate
|
|
$\mathsf{cert} = (s, \mathsf{pos}, \{(\mathsf{id}_i, \sigma_i)\}_{i\in T})$
|
|
for position $\mathsf{pos}$ (chain, height, round, canonical commitment
|
|
$C$, set-root) is accepted iff
|
|
\[
|
|
\mathsf{Prism}_s(\mathsf{cert}) \;=\;
|
|
\Big[\ \textstyle\sum_{i\in T}\mathrm{stk}(\mathsf{id}_i)\ \ge\ \tau S\ \Big]
|
|
\ \wedge\
|
|
\bigwedge_{i\in T}\mathsf{Verify}_s\!\big(pk_{\mathsf{id}_i},\ \mu(\mathsf{pos},s),\ \sigma_i\big)
|
|
\ \wedge\ \Phi_{\mathrm{set}},
|
|
\]
|
|
where $\tau \ge 2/3$, $\Phi_{\mathrm{set}}$ asserts each $\mathsf{id}_i$
|
|
is a distinct, current member of the validator set committed by
|
|
$\mathsf{pos}$'s set-root, and $\mu(\mathsf{pos},s)$ is the signed
|
|
transcript of Definition~\ref{def:transcript-binding}. The
|
|
\emph{quorum rule} --- the bracketed stake test and $\Phi_{\mathrm{set}}$
|
|
--- is independent of $s$; only the per-signer relation
|
|
$\mathsf{Verify}_s$ and the transcript tag depend on it.
|
|
\end{definition}
|
|
|
|
\begin{definition}[Scheme-bound transcript]
|
|
\label{def:transcript-binding}
|
|
The message each signer signs binds the scheme id into the domain-
|
|
separated transcript:
|
|
\[
|
|
\mu(\mathsf{pos}, s) \;=\;
|
|
\mathsf{H}\big(\texttt{"LUX/chain/vote/v2"} \,\|\, \mathsf{chainID}
|
|
\,\|\, \mathsf{height} \,\|\, \mathsf{round} \,\|\, C
|
|
\,\|\, \mathsf{parentC} \,\|\, \mathsf{setRoot}
|
|
\,\|\, s \,\|\, \mathsf{hashSuite}\big),
|
|
\]
|
|
with $\mathsf{H}$ a domain-separated SHAKE256 sponge (FIPS 202). The
|
|
scheme id $s$ and the hash-suite id are covered bytes, not envelope
|
|
metadata.
|
|
\end{definition}
|
|
|
|
\begin{lemma}[Cross-suite confusion resistance]
|
|
\label{lem:cross-suite}
|
|
Let $s \ne s'$. An adversary who takes a certificate honestly produced
|
|
under scheme $s$ and re-labels it $s'$ (or splices a scheme-$s'$
|
|
signature into a scheme-$s$ position) produces a certificate that fails
|
|
$\mathsf{Prism}_{s'}$ except with probability at most the EUF-CMA
|
|
advantage against the underlying scheme.
|
|
\end{lemma}
|
|
\begin{proof}
|
|
$\mathsf{Prism}_{s'}$ recomputes the transcript as $\mu(\mathsf{pos}, s')$
|
|
and checks $\mathsf{Verify}_{s'}(pk_i, \mu(\mathsf{pos}, s'), \sigma_i)$.
|
|
The honest signers signed $\mu(\mathsf{pos}, s)$, and $s$ is a covered
|
|
input to $\mathsf{H}$, so $\mu(\mathsf{pos}, s') \ne \mu(\mathsf{pos}, s)$
|
|
except for a collision of $\mathsf{H}$ (negligible under FIPS 202
|
|
collision resistance). Thus $\sigma_i$ is a signature on a
|
|
\emph{different} message than the one $\mathsf{Verify}_{s'}$ checks;
|
|
producing a $\sigma_i$ that verifies on $\mu(\mathsf{pos}, s')$ under
|
|
$pk_i$ is exactly an EUF-CMA forgery against scheme $s'$. The confusion
|
|
attack therefore fails on \emph{signature verification}, not merely on a
|
|
byte-equality tag check --- the defense is cryptographic, not
|
|
syntactic.
|
|
\end{proof}
|
|
|
|
\begin{proposition}[PQ migration is a profile flip]
|
|
\label{prop:profile-flip}
|
|
Fix a validator set and stake distribution. Let
|
|
$\mathsf{Prism}_s, \mathsf{Prism}_{s'}$ be the predicates of
|
|
Definition~\ref{def:scheme-predicate} under schemes $s, s'$ (e.g.\
|
|
$s=\texttt{0x10}$ classical BLS, $s'=\texttt{0x42}$ raw
|
|
$\mathsf{ML\text{-}DSA}\text{-}65$, or $s'=\texttt{0x52}$
|
|
$\mathsf{Pulsar\text{-}M}\text{-}65$). Then the safety analysis --- the
|
|
quorum-intersection argument of Theorem~\ref{thm:soundness} and of the
|
|
no-double-finalization theorem
|
|
(\texttt{quasar-cert-soundness.tex}, \S``Finality Admission'') --- is
|
|
\emph{invariant} under the substitution $s \mapsto s'$; only the
|
|
per-signer forgery bound changes from $\epsilon_s$ to $\epsilon_{s'}$.
|
|
\end{proposition}
|
|
\begin{proof}
|
|
Both theorems use only two facts about the per-signer scheme: (i) that
|
|
$\mathsf{Prism}$ accepts iff signer stake $\ge \tau S$ over distinct
|
|
current set members --- the quorum rule, which
|
|
Definition~\ref{def:scheme-predicate} makes independent of $s$; and (ii)
|
|
that an honest validator's signature on one transcript cannot be forged,
|
|
i.e.\ $\mathsf{Verify}_s$ is EUF-CMA with advantage $\epsilon_s$. Fact
|
|
(i) is unchanged by the substitution. Fact (ii) holds for every scheme
|
|
in the registry (BLS under co-CDH; $\mathsf{ML\text{-}DSA}$ and
|
|
$\mathsf{Pulsar\text{-}M}$ under MLWE/MSIS; the threshold variants under
|
|
their SUF-CMA proofs), with the bound $\epsilon_{s'}$ substituted for
|
|
$\epsilon_s$. No other property of the primitive enters either proof.
|
|
Hence enabling the strict-PQ profile --- which pins the validator
|
|
identity/finality scheme to $\mathsf{ML\text{-}DSA}\text{-}65/87$ or
|
|
$\mathsf{Pulsar\text{-}M}\text{-}65/87$ and refuses classical schemes
|
|
--- is a re-parameterisation that preserves every safety invariant and
|
|
strictly improves the quantum-forgery bound (from the Shor-breakable
|
|
$\epsilon_{\mathrm{BLS}}$ to the lattice $\epsilon_{\mathrm{MLWE,MSIS}}$).
|
|
The flip is a \emph{value}, not a new protocol.
|
|
\end{proof}
|
|
|
|
\begin{remark}[Assumption diversity, honestly]
|
|
\label{rem:assumption-diversity}
|
|
$\mathsf{Pulsar}$ (R-LWE / M-LWE threshold) and $\mathsf{ML\text{-}DSA}$
|
|
(M-LWE, FIPS 204) both rest on \emph{lattice} assumptions; a single
|
|
sufficiently strong lattice cryptanalysis would dent both. The registry
|
|
therefore also reserves the hash-based $\mathsf{SLH\text{-}DSA}$
|
|
(FIPS 205) family for the recovery and high-value roots
|
|
(\texttt{RecoverySchemeID} $\texttt{0x05}$--$\texttt{0x07}$): a stateless
|
|
hash-based signature survives a total break of lattice assumptions and
|
|
is the genuine cross-family diversifier, not a second lattice leg. Two
|
|
lattice legs buy defense-in-depth against implementation faults, not
|
|
independent hardness.
|
|
\end{remark}
|
|
|
|
\section{Security}
|
|
|
|
\subsection{Threat model}
|
|
|
|
Let $f$ be the Byzantine fraction of $\mathcal{V}$. Classical Byzantine
|
|
thresholds require $f < 1/3$. Let the adversary $\mathcal{A}$ be any
|
|
probabilistic polynomial time quantum machine (BQP).
|
|
|
|
\subsection{Forgery reduction}
|
|
|
|
\begin{theorem}[PQ soundness of Quasar committee cert]
|
|
\label{thm:soundness}
|
|
Assume $\mathsf{ML\text{-}DSA}\text{-}65$ is existentially unforgeable under
|
|
the $\mathsf{MLWE}_{q,k,\ell,\chi}$ and $\mathsf{MSIS}$ assumptions, and
|
|
that the VRF output is pseudorandom in the quantum random oracle model.
|
|
|
|
Then an adversary $\mathcal{A}$ that produces a valid
|
|
$\textsf{cert}_h$ for a block $B_h$ not signed by $\geq 2k/3$ honest
|
|
committee members breaks $\mathsf{ML\text{-}DSA}$ or predicts the VRF
|
|
with non-negligible advantage.
|
|
\end{theorem}
|
|
|
|
\begin{proof}[Proof sketch]
|
|
By a standard hybrid argument:
|
|
\begin{itemize}
|
|
\item[\textbf{H0:}] Real game. $\mathcal{A}$ forges $\textsf{cert}_h$
|
|
containing $\geq 2k/3$ valid $\mathsf{ML\text{-}DSA}$ signatures
|
|
over $B_h$ from committee members.
|
|
\item[\textbf{H1:}] Replace VRF output with a uniform random sampling.
|
|
Indistinguishable by VRF PQ-pseudorandomness.
|
|
\item[\textbf{H2:}] Committee is independent of $\mathcal{A}$'s choice.
|
|
Probability of an unchallenged forgery on $\geq 2k/3$ honest
|
|
keys is at most $\binom{k}{2k/3} \cdot \varepsilon_{\text{ML-DSA}}^{2k/3}$
|
|
where $\varepsilon_{\text{ML-DSA}}$ is the per-signature forgery
|
|
advantage. For $k = 128$ and $\varepsilon_{\text{ML-DSA}} \leq 2^{-192}$
|
|
(Level III), this is $\leq 2^{-86} \cdot 2^{-192 \cdot 85} \approx 2^{-16 \cdot 10^3}$.
|
|
\end{itemize}
|
|
The adversary's overall advantage is bounded by
|
|
$\mathsf{Adv}^{\textsf{VRF}} + \binom{k}{2k/3} \varepsilon_{\text{ML-DSA}}^{2k/3}$,
|
|
which is negligible under our assumptions.
|
|
\end{proof}
|
|
|
|
\subsection{Independence of the two lattice instances}
|
|
|
|
Both lattice legs rest on Module-LWE (with Module-SIS for binding), so
|
|
this is \emph{not} family-disjoint diversity --- it is two independent
|
|
\emph{instances} of the same family.
|
|
$\mathsf{ML\text{-}DSA}$ is secure under $\mathsf{MLWE}_{q,k,\ell,\chi}$
|
|
and $\mathsf{MSIS}$ at the FIPS~204 parameters
|
|
($q = 8\,380\,417$, ring degree $256$, module rank $(k,\ell) = (6,5)$).
|
|
$\mathsf{Corona}$ is secure under $\mathsf{MLWE}$ and $\mathsf{MSIS}$ at
|
|
its own (Ringtail-derived) parameters: a much larger 48-bit modulus
|
|
$q = \mathtt{0x1000000004A01}$ over the same ring degree $256$, with
|
|
module dimensions $M=8$, $N=7$ and $\sigma_E = 6.108$.
|
|
|
|
No reduction relating the two concrete instances is known, and the two
|
|
parameter regimes, key formats, and codebases are disjoint, so a break
|
|
that exploits one parameterisation or one implementation need not affect
|
|
the other. This is implementation- and parameter-level defense in depth,
|
|
not a hedge across distinct hardness families: a structural break against
|
|
Module-LWE \emph{as a family} would threaten both legs simultaneously.
|
|
The only truly family-disjoint signature leg in the Lux stack is the
|
|
hash-based $\mathsf{Magnetar}$ (SLH-DSA / FIPS~205); cross-family hedging
|
|
requires adding that leg, not the second lattice instance.
|
|
|
|
\begin{proposition}[Hedged PQ security within Module-LWE]
|
|
Under the conjunction ``the ML-DSA Module-LWE instance is hard $\lor$
|
|
the Corona Module-LWE instance is hard,'' the combined per-epoch
|
|
certificate
|
|
$(\textsf{cert}_h \text{ for } h \in \text{epoch}, \sigma_{\text{epoch}})$
|
|
is unforgeable.
|
|
\end{proposition}
|
|
|
|
This gives us defense in depth against parameter- or implementation-specific
|
|
breaks strictly within the post-quantum setting, without relying on any
|
|
classical primitive; for cross-family assurance, compose the Magnetar
|
|
(hash) leg as in the Polaris profile.
|
|
|
|
\section{Why BLS contributes no PQ security}
|
|
|
|
\begin{lemma}
|
|
A BLS12-381 aggregate signature $\sigma_{\text{BLS}}$ can be forged
|
|
efficiently by a quantum adversary running Shor's algorithm on the
|
|
discrete log problem in the extension field $\mathbb{F}_{q^{12}}$
|
|
underlying the pairing target group.
|
|
\end{lemma}
|
|
|
|
Consequently, any certificate whose verification \emph{requires}
|
|
$\sigma_{\text{BLS}}$ to be valid can be broken by breaking BLS alone.
|
|
If the Quasar cert verification logic is
|
|
$\mathsf{Verify}_{\text{BLS}}(\cdot) \land \mathsf{Verify}_{\text{PQ}}(\cdot)$,
|
|
then forging the cert still requires breaking the PQ components, so
|
|
BLS adds a verification cost without adding an attack barrier.
|
|
If the verification is $\mathsf{Verify}_{\text{BLS}}(\cdot) \lor \mathsf{Verify}_{\text{PQ}}(\cdot)$,
|
|
then forging the cert requires breaking \emph{only} BLS, reducing PQ
|
|
security to zero.
|
|
|
|
In practice Quasar uses the $\land$-form, so BLS is safe but superfluous.
|
|
Since it does not strengthen the cert, we remove it.
|
|
|
|
\section{Scale invariance of fixed-committee signing}
|
|
|
|
\subsection{Claim}
|
|
|
|
For a fixed committee size $k$, the per-block cert generation and
|
|
verification cost is $O(k)$, independent of the total validator count $N$.
|
|
Only the VRF sampling is touched by $N$, and the VRF sampling cost
|
|
is $O(\log N)$ with a weighted-reservoir or alias-method implementation.
|
|
|
|
\subsection{Measured costs on MacBook M3 (10-core arm64)}
|
|
|
|
Using \texttt{mldsa-bench} at $\mathsf{ML\text{-}DSA}\text{-}44$:
|
|
|
|
\begin{center}
|
|
\begin{tabular}{rrrrrr}
|
|
\toprule
|
|
$N$ & $k$ & Keygen & Sign (parallel) & Verify (parallel) & Cert size \\
|
|
\midrule
|
|
$10^3$ & 128 & 14.8 ms & 3.8 ms & 4.4 ms & 310 kB \\
|
|
$10^4$ & 128 & 14.8 ms & 3.8 ms & 4.4 ms & 310 kB \\
|
|
$10^5$ & 128 & 14.8 ms & 3.8 ms & 4.4 ms & 310 kB \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
(Keygen is amortized across validator lifetime and only involves the
|
|
committee members for a given block; in practice keys are generated
|
|
once at validator registration. Sign and verify scale linearly with $k$
|
|
only.)
|
|
|
|
\subsection{Disk and bandwidth}
|
|
|
|
\begin{center}
|
|
\begin{tabular}{lrrr}
|
|
\toprule
|
|
& Per block & Per epoch (128 blocks) & Per era (168 epochs) \\
|
|
\midrule
|
|
Raw ML-DSA committee cert & 310 kB & 40 MB & 6.7 GB \\
|
|
After Corona roll-up & — & 5--10 kB & 1.2 MB \\
|
|
After Z-chain ZK proof & — & — & 200 bytes \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{center}
|
|
|
|
An archival node retains all raw certs (6.7 GB/era). A full node keeps the
|
|
current era's raw certs plus all past Corona epoch aggregates (${\sim}200$
|
|
MB/year). A light client synchronises from Z-chain era proofs only
|
|
(${\sim}10$ kB/year).
|
|
|
|
\section{Recommendation}
|
|
|
|
\begin{enumerate}
|
|
\item Adopt the reduced Quasar cert (ML-DSA + Corona + Z-chain ZK).
|
|
Remove BLS from Quasar cert generation and verification.
|
|
\item Keep BLS available as an \emph{opt-in} classical speed-up for
|
|
deployments that explicitly accept non-PQ security in exchange
|
|
for sub-millisecond verification of a 96-byte aggregate. Gate
|
|
via a chain-configuration flag, off by default.
|
|
\item Use $k = 128$ fixed committee size for all network sizes in
|
|
the range $10^3 \leq N \leq 10^5$.
|
|
\item Use $\mathsf{ML\text{-}DSA}\text{-}65$ (NIST Level III) for the
|
|
individual committee signatures.
|
|
\item Require a PQ VRF for committee sampling. Either a lattice VRF
|
|
(see Boneh--Dai 2024) or $\mathsf{ML\text{-}DSA}$ output used
|
|
as a pseudorandom source in the QROM.
|
|
\item Re-anchor every epoch via a $\mathsf{Corona}$ threshold
|
|
aggregate for space efficiency.
|
|
\item Re-anchor every era via a Z-chain $\mathsf{Groth16}$ or
|
|
$\mathsf{PLONK}$ proof for light-client succinctness.
|
|
\end{enumerate}
|
|
|
|
\section{Open questions}
|
|
|
|
\begin{itemize}
|
|
\item \textbf{PQ VRF}: which construction best balances cost and
|
|
PQ-security? Lattice VRFs are still an active research area.
|
|
\item \textbf{Stake-weighted sampling with liveness}: how do we
|
|
recover when $>1/3$ of stake is offline in a specific epoch?
|
|
Committee rotation helps but a formal liveness bound is needed.
|
|
\item \textbf{Corona parameter selection}: parameters for
|
|
$k = 128$ threshold Corona have not been published; we may
|
|
need a sensitivity analysis before adopting.
|
|
\end{itemize}
|
|
|
|
\section{Related work}
|
|
|
|
\begin{itemize}
|
|
\item Celi, del Pino, Espitau, Niot, Prest.
|
|
\emph{Efficient Threshold ML-DSA.} USENIX Security 2026.
|
|
\item Boschini, Kaviani, Lai, Malavolta, Takahashi, Tibouchi.
|
|
\emph{Ringtail: Practical Two-Round Threshold Signatures from
|
|
LWE.} IEEE S\&P 2025 (IACR ePrint 2024/1113). The construction
|
|
Corona forks.
|
|
\item Ethereum beacon chain attester committee design (BLS-based).
|
|
\item Avalanche / Snowman probabilistic sampling family.
|
|
\end{itemize}
|
|
|
|
\end{document}
|