mirror of
https://github.com/luxfi/proofs.git
synced 2026-10-30 15:21:05 +00:00
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.
87 lines
4.3 KiB
TeX
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}
|