mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
Pulsar (LP-073, LP-223): the dealer is DEAD AT BOTH ENDS. - Keygen: dealerless via Mithril short replicated secret sharing (Celi-del Pino-Espitau-Niot-Prest, ia.cr/2026/013, USENIX Sec 2026) -- the published escape from the naive-additive-S_eta wall; group key signs under the STOCK FIPS-204 verifier (compatibility PROVEN), per-subset mod-q reduction unblocks large committees (n=16,t=14). Replaces the old 'key generation stays trusted-dealer / provably unreachable' claim everywhere. - Signing: no-reconstruct hyperball 3-round signer (z_j=y_j+c*s1_(j); no party forms s1/s2/seed/sk; mask y never serialised), verifies under stock ML-DSA. CI invariant forbids trusted-dealer keygen in production files. - Claim discipline: (A) standard-FIPS-204-verifier-COMPATIBLE = PROVEN vs (B) full FIPS-204 KeyGen-distribution-EQUIVALENCE = labeled open residual; malicious-HARDENED != fully-malicious-secure-PROVEN. Versions -> pulsar v1.7.1, threshold v1.10.2, consensus v1.29.1, mlwe shared base. - Fixed pre-pivot staleness: Pulsar sig is byte-equal ML-DSA-65 (~3.3KB), not the ~33KB 48-bit (c,z,Delta) shared kernel; q=8380417 production. Corona (LP-220): Module-LWE (Ringtail/Raccoon, M=8 N=7, q=0x1000000004A01), natively dealerless (Pedersen-VSS noise-flooded), no-reconstruct signing, consumes shared luxfi/mlwe. Both lattice legs now dealerless -> Corona is defence-in-depth, NOT the sole permissionless-public carrier. P3Q kind-0x02 dispatch still abiFalse, but the library landed + dedicated 0x012206 wired. Dual-leg diversity (LP-020, LP-220, LP-magnetar): Corona + Pulsar BOTH Module-LWE -> distinct schemes/params, adversary must break BOTH, strictly stronger than either; NOT hardness-disjoint -- assumption-disjoint leg is hash-based Magnetar (SLH-DSA). Cite Mithril ia.cr/2026/013. Scan targets: lp-020 (Ring-LWE->Module-LWE, versions, residual B), lp-stricte2epq (canonical-status note: byte-equal FIPS-204, sampled small committees n=8/t=7/m=12/r=8 not single n=64; sig sizes), lp-magnetar (Corona Ring-LWE->Module-LWE). All 6 PDFs rebuilt clean (pdflatex+bibtex+pdflatex x2): lp-073 59pp, lp-220 8pp, lp-223 5pp, lp-020 32pp, lp-stricte2epq 47pp, lp-magnetar 13pp.
219 lines
10 KiB
TeX
219 lines
10 KiB
TeX
%% ====================================================================
|
|
\section{Pulsar Key-Era Lifecycle}
|
|
\label{sec:lifecycle}
|
|
%% ====================================================================
|
|
|
|
The static Pulsar signing primitive presupposes a one-shot key
|
|
generation followed by a fixed signing committee. Permissionless chains
|
|
do not have that luxury: validator sets rotate every epoch. Pulsar
|
|
extends the static primitive with a \emph{key-era lifecycle} that supports
|
|
validator rotation without reconstructing the master secret and without
|
|
requiring a trusted dealer --- not after genesis, and (with the dealerless
|
|
Mithril RSS keygen of \S\ref{sec:protocol:bcc:keydkg}) not at genesis
|
|
either.
|
|
|
|
The metaphor is load-bearing, not flavor. A pulsar (the cosmic object)
|
|
is a rotating neutron star: the body persists, the beam direction
|
|
rotates, observed pulses appear as the beam sweeps. In Pulsar:
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item \textbf{Persistent body}: the group public key
|
|
$(\mathbf{A}, \tilde{\mathbf{b}})$ and the hidden master
|
|
secret $\mathbf{s}$ persist within a key era.
|
|
\item \textbf{Rotating beam}: the share distribution
|
|
$\{\mathbf{s}_i\}_{i \in V}$ rotates each epoch with
|
|
validator-set changes.
|
|
\item \textbf{Observed pulse}: each Quasar bundle emits one
|
|
threshold certificate (a Pulsar \emph{pulse}) signed under the
|
|
unchanged group public key.
|
|
\end{itemize}
|
|
|
|
\subsection{Three lineage fields, kept distinct}
|
|
\label{sec:lifecycle:lineage}
|
|
|
|
Every Pulsar share state carries three lineage scalars that must not be
|
|
collapsed:
|
|
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item \textbf{KeyEraID} ($\eta$). The group-key lineage. Bumps
|
|
\emph{only} at Reanchor, when a new group public key is
|
|
established.
|
|
\item \textbf{Generation} ($g$). The LSS resharing version within a
|
|
key era. Bumps every Refresh or Reshare under the same
|
|
$(\mathbf{A}, \tilde{\mathbf{b}})$.
|
|
\item \textbf{RollbackFrom} ($r$). Audit lineage. $r=0$ on
|
|
ordinary forward transitions; $r > 0$ records the prior
|
|
generation reverted from when the chain rolls back.
|
|
\end{itemize}
|
|
|
|
A trajectory across one key era and one Reanchor:
|
|
\begin{verbatim}
|
|
KeyEraID=7, Gen=0, Rb=0 genesis state of era 7
|
|
KeyEraID=7, Gen=1, Rb=0 reshared to a new validator set
|
|
KeyEraID=7, Gen=2, Rb=0 refreshed (same set; HJKY zero-poly)
|
|
KeyEraID=7, Gen=3, Rb=0 reshared again
|
|
KeyEraID=7, Gen=4, Rb=2 activation @gen 3 failed; reverted to gen 2
|
|
KeyEraID=8, Gen=0, Rb=0 reanchor: fresh group key, new era
|
|
\end{verbatim}
|
|
|
|
\subsection{Three layers, one shipping path}
|
|
|
|
\begin{tabular}{@{}p{0.18\textwidth}p{0.32\textwidth}p{0.42\textwidth}@{}}
|
|
\toprule
|
|
\textbf{Layer} & \textbf{Operation} & \textbf{Trust} \\
|
|
\midrule
|
|
Bootstrap & Dealerless Mithril RSS keygen (\S\ref{sec:protocol:bcc:keydkg}) for the production FIPS-204 scheme; Pedersen DKG over $R_q$ (\S\ref{sec:lifecycle:dkg}) for the shared kernel & No trusted dealer; group key signs under the stock FIPS-204 verifier. \\
|
|
Reshare & Old qualified subset $Q \subseteq O$, $|Q| \geq t_{\text{old}}$, runs $g_i(x)$ with $g_i(0) = s_i$; new party $j$ computes $s'_j = \sum_{i \in Q} \lambda^Q_i \cdot g_i(\beta_j)$ \cite{desmedtjajodia97} & No new trust. Master secret preserved structurally. \\
|
|
Reanchor & Fresh ceremony with new $\eta$ & Same as Bootstrap; rare governance event. \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
\subsection{Refresh vs Reshare: distinct primitives}
|
|
|
|
Two primitives, never collapsed:
|
|
|
|
\paragraph{Refresh (HJKY97).}
|
|
Same committee, same threshold. Each party $i$ samples a degree-$(t-1)$
|
|
zero-polynomial $z_i(x)$ with $z_i(0) = 0$, distributes $z_i(\alpha_j)$,
|
|
and updates $s'_j = s_j + \sum_i z_i(\alpha_j)$. Defends against
|
|
mobile-adversary share accumulation across time \cite{hjky97}.
|
|
|
|
\paragraph{Reshare (Desmedt--Jajodia).}
|
|
New committee. Old qualified subset $Q$ samples $g_i(x)$ of degree
|
|
$t_{\text{new}}-1$ with $g_i(0) = s_i$. Each new party $j$ aggregates
|
|
contributions weighted by Lagrange coefficients evaluated at $0$ for
|
|
$Q$. New polynomial $G(x) = \sum_{i \in Q} \lambda^Q_i \cdot g_i(x)$
|
|
satisfies $G(0) = \sum_{i \in Q} \lambda^Q_i \cdot s_i = s$ by Lagrange
|
|
identity \cite{desmedtjajodia97}. Verifiability per
|
|
Wong--Wang--Wing \cite{wongwangwing02}.
|
|
|
|
Both primitives leave the public key unchanged: the lattice
|
|
Pedersen-style commits $\mathbf{C}_k = \mathbf{A}\cdot\mathrm{NTT}(c_k)
|
|
+ \mathbf{B}\cdot\mathrm{NTT}(r_k)$ bind shares to the polynomial
|
|
without revealing $\mathbf{s}$.
|
|
|
|
\subsection{Activation certificate: the consensus circuit-breaker}
|
|
\label{sec:lifecycle:activation}
|
|
|
|
After the resharing math finishes, the chain does \emph{not} accept the
|
|
new generation on faith. The new committee threshold-signs an
|
|
activation message under the \emph{unchanged} group public key:
|
|
|
|
\begin{verbatim}
|
|
QUASAR-PULSAR-ACTIVATE-v1 ||
|
|
chain_id || network_id ||
|
|
key_era_id || group_id ||
|
|
old_epoch || new_epoch ||
|
|
old_validator_set_hash || new_validator_set_hash ||
|
|
old_threshold || new_threshold ||
|
|
group_public_key_hash ||
|
|
reshare_transcript_hash ||
|
|
pairwise_material_commitment_hash ||
|
|
implementation_version
|
|
\end{verbatim}
|
|
|
|
If the threshold-aggregated signature verifies under
|
|
$(\mathbf{A}, \tilde{\mathbf{b}})$, the new shares actually reconstruct
|
|
$\mathbf{s}$ and the chain commits the new state. If verification
|
|
fails, the chain stays at the old generation; the LSS rollback
|
|
mechanism (\S\ref{sec:lifecycle:rollback}) restores the prior
|
|
snapshot.
|
|
|
|
\paragraph{What activation proves.}
|
|
Successful new signing capability under the unchanged GroupKey. That
|
|
is all.
|
|
|
|
\paragraph{What activation does \emph{not} prove.}
|
|
Which old party sent a bad contribution; which new party lied; whether
|
|
all contributions were polynomial-consistent; whether a malicious old
|
|
subset caused a failed activation. Those are responsibilities of the
|
|
complaint and disqualification pipeline (commit / share verification
|
|
under lattice Pedersen) and the slashing-evidence pipeline. Activation
|
|
is necessary but \emph{not sufficient} for full Byzantine attribution.
|
|
|
|
\subsection{Rollback and the no-slashing failure ladder}
|
|
\label{sec:lifecycle:rollback}
|
|
|
|
Pulsar's failure response is graded and \emph{non-punitive}. There is
|
|
no slashing dependency:
|
|
|
|
\begin{enumerate}[leftmargin=2em,nosep]
|
|
\item Coordinator timeout / unavailable
|
|
$\rightarrow$ next coordinator picked deterministically.
|
|
\item Resharing round fails (commit mismatch, bad share, etc.)
|
|
$\rightarrow$ emit signed evidence; retry under fresh
|
|
transcript binding next epoch.
|
|
\item Activation cert fails to verify under unchanged GroupKey
|
|
$\rightarrow$ \texttt{Rollback(targetGeneration = current - 1)};
|
|
chain stays at the previous generation; signing continues.
|
|
\item Multiple consecutive activation failures
|
|
$\rightarrow$ governance Reanchor: new $\eta$, fresh ceremony.
|
|
\end{enumerate}
|
|
|
|
This ladder works for chains, bridges, enterprise custody, and
|
|
validator committees alike, because none of the steps require
|
|
identifying a malicious actor. Slashing evidence is \emph{collected}
|
|
during steps 2--3 (the framework persists signed messages from the
|
|
failed run for forensic review), but the chain's liveness and safety
|
|
do not depend on attribution.
|
|
|
|
\subsection{Pedersen DKG over $R_q$: the shared-kernel dealerless path}
|
|
\label{sec:lifecycle:dkg}
|
|
|
|
For the \emph{production} FIPS-204 byte-equal scheme, the default Bootstrap
|
|
path is the dealerless Mithril RSS keygen of
|
|
\S\ref{sec:protocol:bcc:keydkg} --- no trusted dealer, no toxic-waste
|
|
assumption, and the group key signs under the stock FIPS-204 verifier. The
|
|
construction below is the dealerless keygen for the \emph{shared kernel}
|
|
(the $(c,z,\Delta)$ scheme shared with Corona): a Pedersen-style DKG over
|
|
$R_q$ (\texttt{pulsar/dkg2/}) that likewise requires no dealer:
|
|
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item Two uniform matrices $\mathbf{A}, \mathbf{B}$ derived
|
|
deterministically from public seeds.
|
|
\item Each party samples Gaussian polynomials $f_i, g_i$ and
|
|
broadcasts commits $\mathbf{C}_{i,k} = \mathbf{A}\cdot
|
|
\mathrm{NTT}(c_{i,k}) + \mathbf{B}\cdot\mathrm{NTT}(r_{i,k})$.
|
|
\item Hiding under MLWE on $\mathbf{B}$; binding under MSIS on
|
|
$[\mathbf{A}\,|\,\mathbf{B}]$.
|
|
\end{itemize}
|
|
|
|
This avoids the upstream Pulsar Feldman-style DKG, which is
|
|
pseudoinverse-recoverable: $(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T
|
|
\cdot \mathbf{C}_k = c_k$ when commits omit the noise term. The
|
|
Pedersen construction restores hiding by adding the
|
|
$\mathbf{B}\cdot\mathrm{NTT}(r_k)$ mask.
|
|
|
|
The Pedersen-DKG path solves an open distributed-construction problem:
|
|
jointly sampling $\tilde{\mathbf{b}} = \lfloor \mathbf{A}\cdot
|
|
\mathbf{s} + \mathbf{e} \rceil_\Xi$ with the correct small-noise
|
|
distribution, without any party learning $\mathbf{s}$ or $\mathbf{e}$,
|
|
and producing a publicly verifiable proof of public-key
|
|
well-formedness. Threshold Raccoon \cite{thresholdraccoon} and Hermine
|
|
\cite{hermine} are the closest related constructions for the shared
|
|
kernel. For the production FIPS-204 scheme this question is settled by
|
|
Mithril RSS \cite{mithril2026} (\S\ref{sec:protocol:bcc:keydkg}): the
|
|
joint key is dealerless, its group key signs under the stock FIPS-204
|
|
verifier (compatibility proven), and the only residual is full KeyGen
|
|
distribution-equivalence. Neither path requires a trusted dealer or a
|
|
toxic-waste assumption; the foundation-ceremony bootstrap of earlier
|
|
drafts is retired.
|
|
|
|
\subsection{What is preserved, what changes}
|
|
|
|
\begin{tabular}{@{}p{0.30\textwidth}p{0.65\textwidth}@{}}
|
|
\toprule
|
|
\textbf{Quantity} & \textbf{Status across resharing within an era} \\
|
|
\midrule
|
|
$\mathbf{A}$ (public matrix) & PRESERVED \\
|
|
$\mathbf{s}$ (master secret) & PRESERVED structurally; share distribution rotates \\
|
|
$\tilde{\mathbf{b}}$ (rounded public key) & PRESERVED \\
|
|
GroupKey pointer (byte-identical) & PRESERVED \\
|
|
$\mathbf{e}$ (LWE error) & NOT preserved; used at genesis to form $\tilde{\mathbf{b}}$, then erased with dealer state. Signers only need shares of $\mathbf{s}$. \\
|
|
Share distribution $\{\mathbf{s}_i\}$ & ROTATED \\
|
|
Pairwise PRF/MAC material & REGENERATED for the new committee via authenticated KEX (X25519 baseline; ML-KEM-768 hybrid recommended for PQ-aware deployments). \\
|
|
$\eta$ (KeyEraID) & PRESERVED until Reanchor \\
|
|
$g$ (Generation) & INCREMENTED \\
|
|
$r$ (RollbackFrom) & 0 on forward; $>0$ on rollback \\
|
|
\bottomrule
|
|
\end{tabular}
|