Files
proofs/fhe/dual-runtime-equivalence.tex
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

87 lines
4.3 KiB
TeX

%% ============================================================
%% fhe/dual-runtime-equivalence.tex
%% ============================================================
%%
%% Canonical Lux FHE-Go <-> Lux FHE-C++ byte-equivalence theorem.
%% Papers cite this; do not redefine.
%% ============================================================
\subsection*{Lux FHE-Go and Lux FHE-C++ byte-equal output}
\begin{theorem}[FHE dual-runtime equivalence]
\label{thm:fhe-dual-runtime-equivalence}
Let $\mathcal{R}_{\mathsf{Go}}$ denote the Lux FHE-Go reference runtime
(\texttt{github.com/luxfi/fhe}) and let $\mathcal{R}_{\mathsf{C++}}$ denote the
Lux FHE-C++ production runtime (\texttt{github.com/luxfi/luxcpp/crypto/fhe}).
For every operation $\mathsf{op} \in \{\mathsf{KeyGen}, \mathsf{Enc}, \mathsf{Dec},
\mathsf{Eval}\}$, every parameter set $\mathsf{ps} \in
\{\mathsf{PN10QP27}, \mathsf{PN11QP54}, \mathsf{PN9QP28\_STD128}\}$, and every
input tuple $(\mathsf{seed}, x_1, \ldots, x_n)$ on which both runtimes accept
the inputs:
\[
\mathcal{R}_{\mathsf{Go}}.\mathsf{op}(\mathsf{ps}, \mathsf{seed}, x_1, \ldots, x_n)
\;=\;
\mathcal{R}_{\mathsf{C\!+\!\!+}}.\mathsf{op}(\mathsf{ps}, \mathsf{seed}, x_1, \ldots, x_n)
\]
where equality is byte-equal under the Lux FHE-Core wire format
(\texttt{luxcpp/crypto/fhe/cpp/include/lux\_fhe/serialization.hpp}). The wire
format is parameter-set-tagged; the equality holds across every backend
$\mathcal{R}_{\mathsf{C\!+\!\!+}}.\mathsf{Backend} \in \{\mathsf{CPU},
\mathsf{CUDA}, \mathsf{HIP}, \mathsf{SYCL}\}$ that the runtime reports as
$\mathsf{available}(\cdot) = \mathsf{true}$.
\end{theorem}
\begin{proof}[Proof sketch]
The proof decomposes by operation:
\paragraph{KeyGen.} Both runtimes derive secret-key coefficients from the
same SHA-256 counter-mode PRNG keyed by $\mathsf{seed}$; the domain tags are
fixed (\texttt{"lwe"}, \texttt{"br"}) and the digest reduction is
identical. Public-key and evaluation-key derivations chain from the same
deterministic PRNG. Byte-equality follows from byte-equality of SHA-256
under the FIPS 180-4 specification.
\paragraph{Enc.} Both runtimes encode the bit as $b \in \{0, 1\} \mapsto
\pm q/8$ and apply the same NTT and rejection-sampled noise distribution
keyed by the same seed. Byte-equality of NTT across runtimes is the
canonical NTT byte-equivalence already established for
\texttt{luxcpp/crypto/poly\_mul} and \texttt{luxcpp/crypto/ntt}.
\paragraph{Dec.} Decryption is the inverse map of encryption. Equality of
the decoded plaintext bit follows from equality of the encrypted form and
the fixed centered-decoding rule.
\paragraph{Eval.} Each FHE gate decomposes into linear LWE combination plus
a programmable bootstrap. Linear combination is bytewise modular addition
modulo $q_{\mathrm{LWE}}$; both runtimes use the same modulus reduction
rule. Programmable bootstrapping is implemented via blind rotation; the
blind-rotation accumulator initial state, the gadget decomposition, and
the bootstrap-key indexing all match the Lux FHE-Go reference. The CUDA /
HIP / SYCL backends implement the same arithmetic; the LP-167
\texttt{Required claims for GPU-native credibility} \S 4 and \S 5 require
GPU outputs to be byte-equal to the CPU oracle on every input.
\paragraph{KAT closure.} The Lux FHE-KAT corpus (regenerated by
\texttt{lux/fhe/scripts/regen-kats.sh} and replayed by
\texttt{luxcpp/crypto/fhe/test/cpp/fhe\_kat\_replay\_test.cpp}) is the
empirical witness for byte-equality on every shipped parameter set. The
manifest digest is committed alongside the regen script.
\end{proof}
\begin{remark}[CPU fallback as semantic oracle]
\label{rem:cpu-fallback-oracle}
The C++ CPU fallback (\texttt{cpp/backends/cpu/}) is the semantic oracle:
GPU backends are byte-equal to it. If a GPU backend deviates, the GPU
backend is wrong --- the CPU fallback (which itself is byte-equal to the
Go reference under this theorem) is canonical.
\end{remark}
\begin{remark}[Scaffold milestone status]
\label{rem:fhe-scaffold-status}
On the v0.1.0-rc1-fhe-scaffold milestone this theorem holds for $\mathsf{op}
\in \{\mathsf{KeyGen}, \mathsf{Enc}, \mathsf{Dec}\}$ and the structural
fields of $\mathsf{Eval}$ (linear combination, NOT). Production
$\mathsf{Eval}$ byte-equality through programmable bootstrapping lands in
v0.1.0-rc2-fhe-gpu in lockstep with Lux FHE-Go's blind-rotate path.
\end{remark}