mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
Restructured from flat .tex/.pdf files into per-paper subdirectories. Added Antje Worring as co-author on all papers. Synced PDFs to pdfs/ for download site.
44 lines
2.4 KiB
TeX
44 lines
2.4 KiB
TeX
\section{Replay Protection}
|
|
|
|
|
|
We identify five distinct classes of replay attack. Each is closed by an independent mechanism.
|
|
|
|
\subsection{Class 1: Cross-Network Replay}
|
|
|
|
\textbf{Attack:} A valid message on mainnet is submitted on testnet (or vice versa).
|
|
|
|
\textbf{Defense:} The domain separator includes \texttt{networkID}. Mainnet and testnet have different network IDs. The domain separator mismatch causes rejection at verification step 1.
|
|
|
|
\subsection{Class 2: Cross-Chain Replay}
|
|
|
|
\textbf{Attack:} A valid message destined for chain $B$ is submitted on chain $B'$.
|
|
|
|
\textbf{Defense:} The \texttt{dstChain} field is bound to the intended destination. Verification step 2 checks $\text{msg.dstChain} = \text{local.chainID}$. Chain $B'$ rejects the message.
|
|
|
|
\subsection{Class 3: Same-Chain Double Spend}
|
|
|
|
\textbf{Attack:} A valid message is submitted twice on the same destination chain.
|
|
|
|
\textbf{Defense:} The destination chain maintains a consumed-nonce mapping per source chain: $\text{consumed}[\text{srcChain}][\text{nonce}] \in \{0, 1\}$. Verification step 7 checks this bitmap. The second submission is rejected.
|
|
|
|
\subsection{Class 4: Nonce Skip}
|
|
|
|
\textbf{Attack:} An attacker submits nonce $k+2$ before nonce $k+1$, blocking $k+1$ permanently.
|
|
|
|
\textbf{Defense:} Nonces are strictly monotonic per source chain: $\text{msg.nonce} = \text{lastNonce}[\text{srcChain}] + 1$. Out-of-order nonces are rejected. The relayer must submit messages in nonce order.
|
|
|
|
\subsection{Class 5: Stale Message Replay}
|
|
|
|
\textbf{Attack:} After MPC key rotation, an attacker replays a message signed by the old key set.
|
|
|
|
\textbf{Defense:} The \texttt{expiry} field enforces a time-to-live. Verification step 5 checks $\text{msg.expiry} > \text{block.timestamp}$. Additionally, the MPC attestation includes the key generation epoch; messages signed by a deprecated key set are rejected.
|
|
|
|
\begin{theorem}[Replay Completeness]
|
|
The five replay protection mechanisms are complete and independent. Every possible replay attack falls into exactly one class, and the corresponding defense prevents it.
|
|
\end{theorem}
|
|
|
|
\begin{proof}
|
|
We enumerate all replay dimensions: network identity, chain identity, message identity (nonce), temporal validity, and key validity. Each dimension is protected by exactly one mechanism. The mechanisms are orthogonal: disabling any single mechanism enables exactly one class of replay, not multiple.
|
|
\end{proof}
|
|
|