Files
zeekay 1430256d11 proofs: Lux liquidity protocol adoption + Quasar refs + Pulsar naming
Squashed batch covering:

- lux-adopts-liquidity-protocol.tex: protocol adoption proof artifact
- chronology updates aligning Quasar consensus references to LP-020
- pq-finality-no-bls.tex: Pulsar (Corona-derived lattice threshold)
  naming clarification; per-block / per-epoch / per-era cert language
- quasar-cert-soundness.tex: Pulsar (systems-layer composition with
  key-era lifecycle, resharing, activation cert, rollback) vs Corona
  (signing primitive); math notation and theorems unchanged
- INFRASTRUCTURE-STATUS-2026-04-20.md → INFRASTRUCTURE-STATUS.md
  (drop date stamp from filename)
- LP back-refs and chronology integration

quasar-cert-soundness.tex production-publishable depth (March 3 final):

  - NEW Section 6 (Pulsar Key-Era Lifecycle Lemmas): formal
    definitions for Pulsar share state, GroupKey hash, and Refresh /
    Reshare / Reanchor transitions. Four lifecycle lemmas with full
    proofs:
      Lemma 10 (Generation monotonicity)
      Lemma 11 (KeyEraID stability across Reshare)
      Lemma 12 (GroupKey byte-identity across Refresh and Reshare)
      Lemma 13 (Rollback-lineage forward reconstruction)
    Plus Theorem 14 (Activation-certificate soundness): VerifyActivation
    accepts iff the new committee shares Lagrange-recombine to the
    master secret under the unchanged GroupKey, except with negligible
    probability under MLWE/MSIS.
  - Lagrange-recombination identity written as a labelled display
    equation, citing
    Crypto.Threshold.Reshare.reshare_preserves_public_key in
    lean/Crypto/Threshold/Reshare.lean for the mechanised companion.
  - Bibliography additions: hjky97 (Herzberg--Jarecki--Krawczyk--Yung
    proactive secret sharing), desmedtjajodia97 (redistribution),
    wongwangwing02 (verifiable redistribution), lp073 (Pulsar paper).
  - LP-073 section pointers updated to text-form references that
    survive without LP-073 .aux file.

Naming evolution: throughout this work, "Corona" refers to the
lattice signing primitive (Sign1/Sign2/Combine math); "Pulsar" refers
to the Lux production fork at github.com/luxfi/pulsar that wraps it
with key-era lifecycle for permissionless validator-set rotation.

- proofs/fhe/ (NEW): canonical proof bucket for the Lux FHE
  dual-runtime stack (LP-167 companion):
    correctness.tex             — encrypt → evaluate → decrypt correctness.
    dual-runtime-equivalence.tex — Lux FHE-Go and Lux FHE-C++ produce
                                   byte-equal output on identical inputs
                                   and parameters; KAT closure witness.
    nebula-binding.tex          — FHE result roots bind into Nebula /
                                   Quasar transcripts; reduces a forged
                                   binding to hash collision + Pulsar
                                   SUF-CMA forgery.
    parameter-security.tex      — concrete LWE parameter security under
                                   the Albrecht estimator; ≥128-bit
                                   classical and ≥128-bit quantum for
                                   PN10QP27 / PN11QP54 / PN9QP28_STD128.
  Theorem statements + remarks; no proof bodies duplicated in the
  companion paper (papers/lux-fhe-runtime/) — the paper cites these.
2026-03-03 12:00:00 -08:00

140 lines
6.1 KiB
TeX

%% ============================================================
%% definitions/algorithms.tex
%% ============================================================
%%
%% Canonical algorithm definitions for the Lux PQ-threshold stack.
%% This file is the SINGLE SOURCE OF TRUTH for algorithm signatures.
%% Papers MAY summarize but MUST NOT redefine these algorithms.
%%
%% Use: \input{../../proofs/definitions/algorithms.tex}
%% or: \cite{lux:proofs:definitions:algorithms}
%% ============================================================
\subsection*{Pulsar core algorithms}
\begin{definition}[Pulsar.Setup]
\label{def:pulsar-setup}
$\mathsf{Pulsar.Setup}(1^\lambda) \to (\mathsf{params})$ deterministically
derives the lattice ring $R_q = \mathbb{Z}_q[X]/(X^{256}+1)$ with
$q = \texttt{0x1000000004A01}$ (48-bit NTT-friendly prime), the matrix
dimensions $(M, N_{\textrm{vec}}) = (8, 7)$, and the Gaussian sampling
parameters $(\sigma_E, \sigma^*, \sigma_u)$ from \texttt{pulsar/sign/config.go}.
\end{definition}
\begin{definition}[Pulsar.Gen]
\label{def:pulsar-gen}
$\mathsf{Pulsar.Gen}(\mathsf{params}, t, n; \rho) \to
(\mathsf{GroupKey}, \{\mathsf{Share}_i\}_{i \in [n]})$
where $\rho$ is one-time genesis randomness. Output:
\begin{itemize}[nosep]
\item $\mathsf{GroupKey} = (\mathbf{A}, \tilde{\mathbf{b}})$ with
$\mathbf{A} \in R_q^{M \times N_{\textrm{vec}}}$ uniform and
$\tilde{\mathbf{b}} = \lfloor \mathbf{A}\cdot\mathbf{s} +
\mathbf{e} \rceil_\Xi$ for Gaussian $\mathbf{s}, \mathbf{e}$.
\item Shares $\{\mathsf{Share}_i\}$ are a $(t, n)$-Shamir secret sharing
of $\mathbf{s}$ over $R_q$, in NTT-Mont form.
\end{itemize}
After ceremony close, $(\mathbf{s}, \mathbf{e})$ are erased.
\end{definition}
\begin{definition}[Pulsar.Sign1, Sign2, Combine]
\label{def:pulsar-sign}
The two-round MAC-authenticated signing protocol (per
\texttt{pulsar/sign/sign.go}):
\begin{align*}
\mathsf{Sign1}(\mathsf{Share}_i, \mathsf{sid}, \mathsf{prfKey}, T)
&\to (D_i, \{\mathsf{MAC}_{ij}\}_{j \in T \setminus \{i\}}) \\
\mathsf{Sign2}(\mathsf{Share}_i, \{D_j\}_{j \in T}, \{\mathsf{MAC}\},
m, \mathsf{sid}, \mathsf{prfKey}, T) &\to z_i \\
\mathsf{Combine}(\{z_j\}_{j \in T}) &\to \sigma = (c, z, \Delta).
\end{align*}
Round 1 is message-independent and offline-pre\-com\-pu\-tab\-le.
$\mathsf{prfKey}$ is the per-pair PRF seed from $\mathsf{Share}_i.\mathsf{Seeds}$.
\end{definition}
\begin{definition}[Pulsar.Verify]
\label{def:pulsar-verify}
$\mathsf{Pulsar.Verify}(\mathsf{GroupKey}, m, \sigma) \to \{0, 1\}$
checks that $\sigma = (c, z, \Delta)$ satisfies the Lyubashevsky-style
acceptance predicate:
$\|z\|_2^2 \leq B^2$,
$c = H_c(\mathbf{A}, \tilde{\mathbf{b}}, m, D)$,
$\mathbf{A}\cdot z = D + c\cdot\tilde{\mathbf{b}} + \Delta$.
\end{definition}
\subsection*{Pulsar lifecycle algorithms}
\begin{definition}[Pulsar.Refresh]
\label{def:pulsar-refresh}
$\mathsf{Pulsar.Refresh}(\{\mathsf{Share}_j\}_{j \in V}, t)
\to \{\mathsf{Share}'_j\}_{j \in V}$.
Each $i \in V$ samples a degree-$(t-1)$ zero-polynomial $z_i(X)$
with $z_i(0) = 0$ over $R_q^{N_{\textrm{vec}}}$, distributes
$z_i(\alpha_j)$ privately, and every $j$ updates
$\mathbf{s}'_j = \mathbf{s}_j + \sum_i z_i(\alpha_j)$. Master secret
$\mathbf{s}$ is unchanged. (HJKY97 \cite{hjky97}.)
\end{definition}
\begin{definition}[Pulsar.Reshare]
\label{def:pulsar-reshare}
$\mathsf{Pulsar.Reshare}(\{\mathsf{Share}_i\}_{i \in Q}, t_{\text{old}},
V_{\text{new}}, t_{\text{new}}) \to \{\mathsf{Share}'_j\}_{j \in V_{\text{new}}}$.
Each $i \in Q$ (qualified subset, $|Q| \geq t_{\text{old}}$) samples
$g_i(X)$ of degree $t_{\text{new}}-1$ with $g_i(0) = \mathbf{s}_i$,
delivers $g_i(\beta_j)$ privately to each new $j$, and each new $j$
computes $\mathbf{s}'_j = \sum_{i \in Q} \lambda^Q_i \cdot g_i(\beta_j)$
where $\lambda^Q_i$ are Lagrange coefficients for $Q$ evaluated at $0$.
Master secret unchanged by Lagrange identity. (Desmedt-Jajodia
\cite{desmedtjajodia97}; verifiable via Wong-Wang-Wing
\cite{wongwangwing02}.)
\end{definition}
\begin{definition}[Pulsar.Activate]
\label{def:pulsar-activate}
$\mathsf{Pulsar.Activate}(\{\mathsf{Share}'_j\}_{j \in V_{\text{new}}},
\mathsf{ActivationMsg}) \to \sigma_{\text{act}}$.
The new committee threshold-signs the canonical activation message
under the \emph{unchanged} $\mathsf{GroupKey}$. The chain accepts the
new committee iff $\mathsf{Pulsar.Verify}(\mathsf{GroupKey},
\mathsf{ActivationMsg}, \sigma_{\text{act}}) = 1$. (See
\texttt{pulsar/reshare/activation.go}; canonical signing prefix
\texttt{QUASAR-PULSAR-ACTIVATE-v1}.)
\end{definition}
\subsection*{LSS lifecycle algorithms}
\begin{definition}[LSS.SaveSnapshot, LSS.Rollback]
\label{def:lss-snap}
The snapshot manager persists $(\eta, g, V_t, t, \mathsf{State}_g)$
tuples. $\mathsf{Rollback}(g_{\text{target}})$ returns
$\mathsf{State}_{g_{\text{target}}}$ marked
$(g_{\text{current}}+1, \mathsf{rb} = g_{\text{current}})$. (Per
\texttt{threshold/protocols/lss/rollback.go} and
\texttt{lss\_pulsar.go: PulsarSnapshotManager}.)
\end{definition}
\begin{definition}[DynamicResharePulsar adapter]
\label{def:lss-pulsar-adapter}
$\mathsf{DynamicResharePulsar}(\{\mathsf{PulsarConfig}_i\}_{i \in V_{\text{old}}},
V_{\text{new}}, t_{\text{new}}) \to
\{\mathsf{PulsarConfig}'_j\}_{j \in V_{\text{new}}}$
validates lifecycle invariants (consistent $\eta$, $g$, GroupKey),
delegates lattice math to $\mathsf{Pulsar.Reshare}$, increments $g$,
preserves $\eta$, sets $\mathsf{rb}=0$, and persists snapshot. (Per
\texttt{threshold/protocols/lss/lss\_pulsar.go}.)
\end{definition}
\subsection*{Lens core algorithms (mirror)}
\begin{definition}[Lens.Sign1, Sign2, Aggregate]
\label{def:lens-sign}
The FROST 2-round Schnorr threshold signing protocol per RFC 9591
\cite{rfc9591}, instantiated over a prime-order group $\mathbb{G}$ of
order $\ell$ (Ed25519, secp256k1, or Ristretto255). Lens inherits the
RFC 9591 algorithm byte-equal; the Lux-specific contribution is the
\textbf{key-era lifecycle wrapping} identical to Pulsar's
(Definitions \ref{def:pulsar-refresh}--\ref{def:pulsar-activate}, with
$R_q$ replaced by $\mathbb{Z}_\ell$ and lattice Pedersen replaced by
curve Pedersen $g^s \cdot h^r$). (Per \texttt{lens/sign/sign.go}.)
\end{definition}