mirror of
https://github.com/lux-apps/papers.git
synced 2026-11-03 05:07:46 +00:00
Every rendered "T-Chain" / "ThresholdVM" / "teleportvm" reference across the paper corpus is rewritten to the correct canonical chain by concern: threshold signing / MPC / bridge custody / key recovery -> M-Chain (MVM); FHE / encrypted compute / threshold decryption -> F-Chain (FVM); teleport / cross-chain messaging -> B-Chain (bridgevm); consensus Pulsar stays Q-Chain. Section lux-trust-kernel/03-t-chain-threshold-governance.tex renamed -> 03-f-chain-encrypted-policy.tex (with \input + xref fixes). Braided "T-Chain" sections split by concern (M vs F). Only lp-020's chain-separation rationale and the shared lux/chains/thresholdvm library path retain the name, to record the removal. All changed papers rebuilt (pdflatex, rc=0, no undefined refs). ยง09 of lux-dao-governance-framework reframed: fabricated "production deployment" metrics ($50M/$240k/$12M, survey %s, "as of Oct 2024") relabeled as illustrative design configurations with no invented replacements; reality noted (DAO treasury is a 1/1 Safe); conclusion echo + one "first production" overclaim softened. This commit also captures concurrent corpus workstreams on the same tree. Co-authored-by: Hanzo Dev <[email protected]>
128 lines
7.8 KiB
TeX
128 lines
7.8 KiB
TeX
\section{The Corona Scheme}
|
|
|
|
\label{sec:scheme}
|
|
|
|
Corona is a two-round Module-LWE threshold signature over the module $R_q^{N'}$. The
|
|
public key is a matrix relation $\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e}$ with
|
|
public matrix $\mathbf{A} \in R_q^{M \times N'}$, secret $\mathbf{s} \in R_q^{N'}$, and
|
|
error $\mathbf{e} \in R_q^{M}$. We first describe the leaderless distributed key
|
|
generation (no trusted dealer), then the two-round signing protocol, then the
|
|
non-interactive combine and verification. Throughout, $\mathcal{S}$ denotes a signing
|
|
set with $|\mathcal{S}| \ge t$, and $\lambda_i \in \mathbb{Z}_q$ are the Lagrange
|
|
coefficients of~\eqref{eq:lagrange} for the set $\mathcal{S}$.
|
|
|
|
\subsection{Distributed Key Generation (Leaderless, No Trusted Dealer)}
|
|
|
|
The public matrix $\mathbf{A} \in R_q^{M \times N'}$ is a fixed, publicly derivable
|
|
parameter (a nothing-up-my-sleeve hash output expanded from the ceremony root), so no
|
|
party controls it. The secret $\mathbf{s} \in R_q^{N'}$ is generated jointly: each party
|
|
contributes an additive summand and a verifiable Shamir sharing of that summand, so the
|
|
group secret is $\mathbf{s} = \sum_{i} \mathbf{s}^{(i)}$ and no party ever sees
|
|
$\mathbf{s}$.
|
|
|
|
\begin{algorithm}[H]
|
|
\caption{Corona Distributed Key Generation}
|
|
\label{alg:keygen}
|
|
\begin{algorithmic}[1]
|
|
\Require Threshold $t$, parties $n$, parameters $(N, q, M, N', \sigma_e)$, ceremony root $\rho$
|
|
\State $\mathbf{A} \gets \mathrm{Expand}_{R_q^{M \times N'}}(\rho)$ \Comment{public matrix, derived (no dealer)}
|
|
\For{each party $i \in \{1, \ldots, n\}$} \Comment{run in parallel; leaderless}
|
|
\State $\mathbf{s}^{(i)} \stackrel{\$}{\leftarrow} D_{\sigma_e}^{N'}$, \quad $\mathbf{e}^{(i)} \stackrel{\$}{\leftarrow} D_{\sigma_e}^{M}$ \Comment{$i$'s short secret/error summands}
|
|
\State $\mathbf{f}^{(i)}(X') \gets \mathbf{s}^{(i)} + \sum_{\ell=1}^{t-1} \mathbf{a}^{(i)}_\ell (X')^\ell$, \quad $\mathbf{a}^{(i)}_\ell \stackrel{\$}{\leftarrow} R_q^{N'}$ \Comment{Shamir polys over $R_q$}
|
|
\State Broadcast Feldman/Pedersen commitments to $\mathbf{s}^{(i)}$ and $\{\mathbf{a}^{(i)}_\ell\}$
|
|
\State Send share $\mathbf{s}^{(i)}_j \gets \mathbf{f}^{(i)}(\mathrm{id}_j)$ privately to each party $j$
|
|
\EndFor
|
|
\For{each party $j$} \Comment{verify and aggregate}
|
|
\State \textbf{abort/identify} any party $i$ whose share $\mathbf{s}^{(i)}_j$ contradicts its commitments
|
|
\State $\mathbf{s}_j \gets \sum_{i} \mathbf{s}^{(i)}_j$ \Comment{$j$'s aggregate share of $\mathbf{s} = \sum_i \mathbf{s}^{(i)}$}
|
|
\EndFor
|
|
\State $\mathbf{b} \gets \mathbf{A}\mathbf{s} + \mathbf{e}$, \quad $\mathbf{e} = \sum_i \mathbf{e}^{(i)}$ \Comment{public key, recombined from commitments}
|
|
\State $\tilde{\mathbf{b}} \gets \mathrm{Round}(\mathbf{b}, \xi)$ \Comment{rounded for verification}
|
|
\State \Return pk $= (\mathbf{A}, \tilde{\mathbf{b}})$, \; shares $\{\mathbf{s}_j\}_{j=1}^{n}$ \Comment{group secret $\mathbf{s}$ never reconstructed}
|
|
\end{algorithmic}
|
|
\end{algorithm}
|
|
|
|
\noindent The public key $\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e}$ is a Module-LWE
|
|
sample (Definition~\ref{def:mlwe}): recovering $\mathbf{s}$ from $(\mathbf{A}, \mathbf{b})$
|
|
is the Module-LWE search problem. Because $\mathbf{A}$ is derived from the ceremony root
|
|
and every contribution is committed, the protocol is leaderless and robust against an
|
|
adversary controlling up to $t-1$ parties; corrupted shares are caught by commitment
|
|
verification (identifiable abort). Resharing for a changed validator set re-runs
|
|
Algorithm~\ref{alg:keygen} over the new set, with the group public key
|
|
$\tilde{\mathbf{b}}$ held fixed across generations (see~\S\ref{sec:integration}).
|
|
|
|
\subsection{Signing Protocol (2 Rounds)}
|
|
|
|
Round~1 is message-independent and can be precomputed. Each signer commits to a short
|
|
masking vector $\mathbf{y}_i \in R_q^{N'}$ via $\mathbf{w}_i = \mathbf{A}\mathbf{y}_i$;
|
|
correlated randomness with pairwise cancellation keeps the aggregate mask short, and
|
|
per-message MACs authenticate commitments against malicious injection.
|
|
|
|
\begin{algorithm}[H]
|
|
\caption{Corona Signing --- Round 1 (Message-Independent)}
|
|
\label{alg:sign-r1}
|
|
\begin{algorithmic}[1]
|
|
\Require Party $i$, signers set $\mathcal{S}$ with $|\mathcal{S}| \geq t$, session id $\mathsf{sid}$
|
|
\State $\mathbf{r}_i \gets \text{PRF}(\text{key}_i, \mathsf{sid} \| i) \bmod D_{\sigma^*}$ \Comment{$i$'s short mask $\in R_q^{N'}$}
|
|
\For{each party $j \in \mathcal{S} \setminus \{i\}$}
|
|
\State $\mathbf{r}_{i,j} \gets \text{PRF}(\text{seed}_{i,j}, \mathsf{sid})$ \Comment{pairwise correlated randomness $\in R_q^{N'}$}
|
|
\EndFor
|
|
\State $\mathbf{y}_i \gets \mathbf{r}_i + \sum_{j : j > i} \mathbf{r}_{i,j} - \sum_{j : j < i} \mathbf{r}_{j,i}$ \Comment{masked randomness, pairwise cancellation}
|
|
\State $\mathbf{w}_i \gets \mathbf{A}\mathbf{y}_i$ \Comment{commitment (matrix-vector product)}
|
|
\For{each $j \in \mathcal{S} \setminus \{i\}$}
|
|
\State $\text{mac}_{i \to j} \gets \text{HMAC}(\text{MACkey}_{i \to j}, \mathsf{sid} \| \mathbf{w}_i)$
|
|
\EndFor
|
|
\State \textbf{broadcast} $(\mathbf{w}_i, \{\text{mac}_{i \to j}\}_{j \in \mathcal{S}})$
|
|
\end{algorithmic}
|
|
\end{algorithm}
|
|
|
|
\begin{algorithm}[H]
|
|
\caption{Corona Signing --- Round 2 (Message-Dependent)}
|
|
\label{alg:sign-r2}
|
|
\begin{algorithmic}[1]
|
|
\Require Party $i$, message $\mu$, Round 1 data $\{(\mathbf{w}_j, \text{mac}_j)\}_{j \in \mathcal{S}}$
|
|
\For{each $j \in \mathcal{S} \setminus \{i\}$}
|
|
\State Verify $\text{mac}_{j \to i}$ using $\text{MACkey}_{j \to i}$; \textbf{abort} (identify $j$) if it fails
|
|
\EndFor
|
|
\State $\mathbf{w} \gets \sum_{j \in \mathcal{S}} \mathbf{w}_j$ \Comment{combined commitment $\in R_q^{M}$ (plain sum; Lagrange weight is carried in $\mathbf{z}_i$)}
|
|
\State $c \gets H(\mathbf{A}, \tilde{\mathbf{b}}, \mathbf{w}, \mu)$ \Comment{challenge: ternary polynomial in $R_q$, weight $\kappa$}
|
|
\State $\mathbf{z}_i \gets \mathbf{y}_i + c \cdot \lambda_i \cdot \mathbf{s}_i$ \Comment{partial response (ring multiplication)}
|
|
\If{$\|\mathbf{z}_i\|_\infty > B$} \Comment{Fiat--Shamir-with-aborts rejection sampling}
|
|
\State \textbf{abort} and restart with a fresh session id
|
|
\EndIf
|
|
\State \textbf{broadcast} $\mathbf{z}_i$
|
|
\end{algorithmic}
|
|
\end{algorithm}
|
|
|
|
\subsection{Combine and Verification}
|
|
|
|
The combine is non-interactive: any party or external aggregator sums the partial
|
|
responses into a single response vector
|
|
\[
|
|
\mathbf{z} \;=\; \sum_{i \in \mathcal{S}} \mathbf{z}_i \;\in\; R_q^{N'} ,
|
|
\]
|
|
and outputs the signature $(c, \mathbf{z})$. Because each partial already carries its
|
|
Lagrange weight ($\mathbf{z}_i = \mathbf{y}_i + c \lambda_i \mathbf{s}_i$), by linearity
|
|
and the Lagrange reconstruction of~\eqref{eq:lagrange},
|
|
$\mathbf{z} = \mathbf{y} + c \cdot \mathbf{s}$ where
|
|
$\mathbf{y} = \sum_{i} \mathbf{y}_i$ masks the short secret $\mathbf{s}$
|
|
(the pairwise correlated randomness of Algorithm~\ref{alg:sign-r1} cancels under this
|
|
plain sum), so
|
|
$\mathbf{A}\mathbf{z} - c \cdot \mathbf{b} = \mathbf{A}\mathbf{y} - c \cdot \mathbf{e} \approx \mathbf{w}$.
|
|
|
|
Verification of $(c, \mathbf{z})$ against pk $= (\mathbf{A}, \tilde{\mathbf{b}})$ and
|
|
message $\mu$ checks:
|
|
\begin{enumerate}[nosep]
|
|
\item $\|\mathbf{z}\|_\infty \leq B'$ (the response is short, for the combined bound $B'$);
|
|
\item recompute $\mathbf{w}' \gets \mathbf{A}\mathbf{z} - c \cdot \tilde{\mathbf{b}} \in R_q^{M}$ and check $c = H(\mathbf{A}, \tilde{\mathbf{b}}, \mathrm{Round}(\mathbf{w}', \xi), \mu)$.
|
|
\end{enumerate}
|
|
Both checks are one matrix-vector product over $R_q$ plus one hash, giving the
|
|
$\sim$1.6\,ms verification of \S\ref{sec:evaluation}. A successful forgery on a fresh
|
|
message yields a short $\mathbf{z}^*$ with $\mathbf{A}\mathbf{z}^* \approx \mathbf{w}^* + c^* \cdot \tilde{\mathbf{b}}$,
|
|
i.e.\ a short Module-SIS solution relative to $\mathbf{A}$ (Definition~\ref{def:msis});
|
|
this is the basis of the reduction in~\S\ref{sec:security}.
|
|
|
|
%% -----------------------------------------------------------------------
|
|
%% 4. SECURITY ANALYSIS
|
|
%% -----------------------------------------------------------------------
|