Files
zeekay fc9b2e03e1 papers: fix LaTeX/ref/typo errors from swarm review (42 papers)
Auto-fixes from the paper accuracy swarm: unambiguous build-breakers, broken
\ref/\cite/\input targets, and prose typos. Substantive accuracy findings
(dates, contradictory numbers, LP numbering) reported separately for review.
2026-06-27 02:02:47 +00:00

1085 lines
47 KiB
TeX

% PQSAFE-IL5-HYBRID-v1 — A crypto-agile post-quantum envelope for DoD file
% storage and transfer (a DoD SAFE-compatible replacement profile).
%
% Build:
% latexmk -pdf pqsafe-il5.tex
\documentclass[11pt,a4paper]{article}
\usepackage{../shared/luxcover}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{float}
\usepackage{enumitem}
\usepackage{array}
\usepackage{multirow}
\usepackage{tabularx}
\input{../shared/lstlang}
\usetikzlibrary{arrows.meta,positioning,shapes.geometric,fit,calc}
\hypersetup{colorlinks=true,linkcolor=black,citecolor=blue,urlcolor=blue}
\lstset{
basicstyle=\ttfamily\scriptsize,
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue!70!black}\bfseries,
commentstyle=\color{green!50!black}\itshape,
stringstyle=\color{red!60!black},
showstringspaces=false,
}
\newtheorem{definition}{Definition}
\newtheorem{remark}{Remark}
\title{\textbf{PQSAFE-IL5-HYBRID-v1}\\
\large A crypto-agile post-quantum envelope for DoD-grade\\
file storage and transfer (a DoD SAFE compatibility profile)}
\author{Lux Industries Inc.\\
\texttt{[email protected]}\\
\texttt{[email protected]} (proposed)}
\date{Draft \today}
\begin{document}
\luxcoverpage
\maketitle
\begin{abstract}
PQSAFE-IL5-HYBRID-v1 is a crypto-agile envelope encryption profile for
DoD file storage and transfer designed to sit \emph{above} any approved
back-end (DoD SAFE, S3-compatible object storage, SharePoint, MinIO,
content-addressed stores, or the Lux storage chain) while ensuring those
back-ends never see plaintext, sender identity, recipient identity,
filenames, or classified metadata. The profile uses
\emph{hybrid}~\cite{xwing2024} post-quantum cryptography:
NIST-standardised
\textbf{ML-KEM-768} (FIPS~203~\cite{fips203}) combined with
classical X25519 via the IETF \textbf{X-Wing} construction~\cite{xwing2024};
\textbf{ML-DSA-65} (FIPS~204~\cite{fips204}) combined with classical
Ed25519 for sender authentication; and either AES-256-GCM (NIST CNSA
2.0~\cite{cnsa2}) or ChaCha20-Poly1305~\cite{rfc8439} for bulk AEAD chunk
encryption with sequence-numbered nonces and per-message forward
secrecy. Bulk data is never wrapped under the PQ key directly: the PQ
layer protects the \emph{file encryption key} (DEK), which protects the
file. Sender identity is bound through a hybrid PQ signature over a
canonical CBOR/COSE manifest~\cite{rfc8949,rfc8152}. \textbf{All X-Wing
and hybrid-identity primitives in PQSAFE come from the canonical Lux
package luxfi/zwing}~\cite{luxzwing} --- the same package provides the
Z-Wing secure channel for TCP/IP transport, so the bytes that encrypt
a file and the bytes that protect a session ride the same vetted
code path (one and only one X-Wing implementation; one and only one
hybrid-signature surface). Optional Reticulum Network Stack
(RNS, LP-9701~\cite{lp9701}) routing covers disconnected, mesh, or
LoRa deployments via the PQ-RNS profile in luxfi/pqrns~\cite{pqrns},
which itself rides zwing for identity + signing. The whole stack is FIPS/CNSA-2.0
aligned where validated modules exist and is explicitly \emph{crypto-agile
by design}: every algorithm, parameter set, KDF, AEAD, signature, and
manifest schema is versioned, so the profile can evolve to PQ-only when
DoD policy and PKI catch up. For everything the stack cannot send
end-to-end (replication, backup, legacy ingest), the same envelope is
re-keyed at rest using \textbf{luxfi/age} (age + ML-KEM-768
recipients~\cite{luxage}).
\end{abstract}
\tableofcontents
% ===========================================================================
\section{Threat model and design principles}
\label{sec:threat}
The defensible architecture for DoD is not ``replace DoD SAFE with
blockchain/PQ magic.'' It is:
\begin{quote}
\emph{Encrypt the file before it enters any storage or transfer system.
Sign the manifest. Audit every custody event. Keep keys off the
storage system. Make the PQ layer hybrid until policy, FIPS modules,
and PKI catch up.}
\end{quote}
PQSAFE-IL5-HYBRID-v1 inverts the usual ``trust the transport'' design:
DoD SAFE, object storage, Lux storage, or any other back-end is a dumb
ciphertext bucket. The crypto boundary is the sender's client, not the
storage system's TLS terminator.
\subsection{Adversaries}
\begin{itemize}[leftmargin=*,itemsep=0pt]
\item \textbf{Network adversary}: passive recorder + active
store-and-decrypt-later attacker with future quantum computer.
Defeated by ML-KEM-768 hybrid key wrap (X-Wing) on the envelope and
ML-KEM-768 hybrid session establishment on the channel (Z-Wing).
\item \textbf{Storage adversary}: anyone with read access to the
back-end (DoD SAFE database admin, S3 reader, ledger reader). Sees
only ciphertext and minimal metadata. Cannot reconstruct plaintext
without the recipient's long-term private key.
\item \textbf{Insider with key material}: a recipient may decrypt
their own copy. The envelope binds recipient identity into the
signed manifest so an unauthorised re-distribution is detectable;
revocation is enforced through manifest expiry and a hash-only
revocation registry.
\item \textbf{Endpoint compromise}: out of scope for the envelope.
Mitigated by HSM-bound long-term keys, hardware roots of trust, and
unattended-decryption being forbidden.
\item \textbf{Quantum adversary (CRQC)}: the entire stack is
post-quantum on the confidentiality axis through ML-KEM-768. The
authenticity axis is post-quantum through ML-DSA-65 with an
SLH-DSA-192f long-term root option for high-assurance signing
(LMS/XMSS available where stateful signing can be safely managed,
per NIST SP~800-208~\cite{sp800208}).
\end{itemize}
\subsection{Non-goals}
\begin{itemize}[leftmargin=*,itemsep=0pt]
\item PQSAFE is \emph{not} a cross-domain solution. Classification
boundaries are enforced outside the envelope.
\item PQSAFE does \emph{not} authorise recipients. It encrypts \emph{to}
recipients chosen by an external ABAC/RBAC policy engine.
\item PQSAFE does \emph{not} store sensitive metadata on a public
ledger. The Lux chain holds only opaque hash commitments.
\end{itemize}
\subsection{Principles}
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item \textbf{Hybrid first.} Every PQ primitive is paired with a
classical primitive and combined with a KDF binding so the
composition is at least as strong as the stronger of the two. This
is the X-Wing construction~\cite{xwing2024} for KEMs and the
``classical + ML-DSA-65'' detached-signature pair for signatures.
\item \textbf{Symmetric for bulk.} Multi-GB files are encrypted with
AES-256-GCM (FIPS-aligned, hardware-accelerated) or
ChaCha20-Poly1305 (software-friendly fallback). The PQ primitive
never wraps the bulk content; it wraps the DEK.
\item \textbf{Crypto-agile.} Every primitive carries a wire-byte
identifier; manifests carry a profile-version field; the verifier
routes by version. No alternate suites within a profile.
\item \textbf{Keys off the storage layer.} HSM-bound KEKs wrap
per-file DEKs. Recipient public keys are certificate-bound.
Recovery is M-of-N threshold, never a universal master decrypt key.
\item \textbf{Audit is tamper-evident, not secret-bearing.} Only
hashes of envelope manifest, sender identity certificate, and the
ordered recipient set go on the audit log.
\item \textbf{Forward secrecy at the channel layer; explicit policy
for stored envelopes.} Z-Wing/PQ-RNS use ephemeral X-Wing per
session and AEAD nonce sequence numbers so past sessions cannot be
decrypted if a long-term identity key is later compromised.
Stored envelopes target long-term recipient keys and therefore
require complementary key-rotation, rewrap, revocation, and
recovery policies (see Section~\ref{sec:pfs}).
\item \textbf{Domain separation everywhere.} Every HKDF and every
signature carries an explicit context string identifying the
protocol layer and version (e.g.\ \texttt{PQSAFE-MANIFEST-SIG-v1},
\texttt{PQSAFE-DEK-WRAP-v1}, \texttt{PQSAFE-CHUNK-AEAD-v1}). No two
layers ever derive a key from the same transcript.
\end{enumerate}
% ===========================================================================
\section{Cryptographic suite}
\label{sec:suite}
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l l X}
\toprule
\textbf{Layer} & \textbf{Primitive} & \textbf{Standard / source} \\
\midrule
Bulk AEAD (FIPS profile) & AES-256-GCM & FIPS~197 + SP~800-38D~\cite{fips197} \\
Bulk AEAD (software profile) & ChaCha20-Poly1305 & RFC~8439~\cite{rfc8439} \\
Hash & SHA-384 / SHA-3-384 & FIPS~180-4 / FIPS~202 \\
Merkle hash & SHA-384 over 64-KiB chunks & this profile \\
KDF & HKDF-SHA-384 & RFC~5869 \\
Key wrap (hybrid KEM) & \textbf{X-Wing} = X25519 + ML-KEM-768 & IETF draft-connolly-cfrg-xwing-kem~\cite{xwing2024} \\
Key wrap (high-value) & X-Wing-1024 = X448 + ML-KEM-1024 & this profile \\
Sender signature (hybrid) & Ed25519 + ML-DSA-65 (detached pair) & RFC~8032 + FIPS~204~\cite{fips204} \\
Long-term root signature & SLH-DSA-SHA2-192f & FIPS~205~\cite{fips205} \\
Stateful root signature (option) & LMS-SHA-256-H10 & SP~800-208~\cite{sp800208} \\
Manifest format & CBOR/COSE & RFC~8949 + RFC~8152~\cite{rfc8949,rfc8152} \\
Channel (E2E PQ) & \textbf{Z-Wing} (X-Wing + Ed25519+ML-DSA-65 + ChaCha20-Poly1305) & luxfi/zwing~\cite{luxzwing} \\
File-at-rest envelope & luxfi/age + ML-KEM-768 recipient & age-encryption~\cite{age,luxage} \\
Mesh / LoRa transport (optional) & RNS hybrid PQ link & LP-9701~\cite{lp9701} \\
\bottomrule
\end{tabularx}
\caption{PQSAFE-IL5-HYBRID-v1 primitive stack.}
\end{table}
\subsection{Why X-Wing and not naive concatenation}
X-Wing~\cite{xwing2024} is a hybrid KEM that combines X25519 with
ML-KEM-768 through a SHA3-based KDF that binds the X25519 ephemeral
public key, the ML-KEM ciphertext, and a 6-byte label
\texttt{``\textbackslash{}.//\^{}'\textbackslash{}''} into the derived
secret. The construction is IND-CCA2 secure under \emph{either}
X25519's DH assumption or ML-KEM's M-LWE assumption: a break of one
component does not break the hybrid. Naive concatenation
$s = s_\text{X25519}\,\|\,s_\text{ML-KEM}$ is \emph{not} a KEM in the
strict KEM-API sense and is vulnerable to subtle re-encapsulation and
key-reuse pitfalls~\cite{xwing2024}. X-Wing fixes the API by emitting
a single ciphertext that captures both component ciphertexts and a
single 32-byte shared secret that's already KDF'd.
The IETF X25519MLKEM768 hybrid (IANA codepoint \texttt{0x11ec}) used
in TLS~1.3 is the same primitive at the cipher-suite level; the X-Wing
draft is the standalone construction for non-TLS protocols.
\subsection{Why ML-KEM-768 (not 1024) as the default}
ML-KEM-768 corresponds to NIST PQ Category~3 (security comparable to
AES-192) and is the production default for both Z-Wing and the file
envelope. ML-KEM-1024 (Category~5, AES-256-equivalent) is used for
high-value paths (recovery keys, KEK-wrapping-KEK, federation root).
Category~1 (ML-KEM-512) is not used: the marginal performance gain
does not justify diverging from the production default for an
operationally simple stack.
\subsection{Forward secrecy --- transport vs.\ stored envelopes}
\label{sec:pfs}
Transport forward secrecy and stored-envelope forward secrecy are
\emph{different problems with different solutions}. The paper makes the
distinction explicit so the security claim does not over-reach.
\paragraph{Transport (Z-Wing, PQ-RNS) --- full hybrid FS.}
For every session, both peers generate fresh X25519 and ML-KEM-768
ephemeral keypairs. After each session establishes its key, the
ephemeral private keys and any intermediate HKDF material are zeroed.
The session key derives from
$$K_\text{sess} = \textsf{HKDF-Extract-Then-Expand}\bigl(
\,\textsf{X25519}_\text{eph-eph}\,\|\,\textsf{ML-KEM-768}_\text{eph-eph}\,,\
\textsf{context}=\textsf{``ZWING-SESSION-v1''}\,\|\,H(\text{transcript})\bigr).$$
A future compromise of either long-term key (Ed25519 \emph{or}
ML-DSA-65) lets the adversary impersonate the identity going forward
\emph{but cannot decrypt previously recorded sessions}: the ephemeral
half is gone. Retrospective decryption requires recovering \emph{both}
classical and lattice ephemerals for every recorded link, which is
the hybrid FS contract. Long-term keys are used \emph{only} to
authenticate the ephemeral key-exchange transcript; they never directly
wrap session traffic.
\paragraph{Chunk AEAD --- intra-file FS via HKDF re-key.}
Each 64-KiB chunk is encrypted with a unique nonce
$(N_0\,\|\,\text{seq})$ where $N_0$ is a 12-byte random nonce-seed
bound into the manifest and $\text{seq}$ is a 4-byte big-endian chunk
index. The DEK itself is rotated every $2^{32}$ chunks (256~TiB) via
HKDF re-keying chained from the manifest's ratchet seed; compromise of
a re-keyed-DEK does not decrypt chunks emitted before the most recent
re-key. For interactive transfer this is irrelevant (files fit under
the rotation limit); for long-lived replication streams it prevents
one DEK compromise from leaking the entire history.
\paragraph{Stored envelopes --- DEK is wrapped to long-term recipient
keys, so naive FS does not apply.}
Each recipient's capsule wraps the per-file DEK under the recipient's
long-term X-Wing public key. If the recipient's long-term X-Wing
\emph{private} key is later compromised, every capsule that targeted
that recipient becomes decryptable, \emph{including capsules created
before the compromise}. This is the well-known property of any
recipient-targeted file-encryption scheme (PGP, age, S/MIME); it is
\emph{not} a defect of PQSAFE, but a property the operator must
manage. Five complementary controls reduce the residual risk:
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item \textbf{KMS/HSM-mediated unwrap.} Recipient long-term private
keys live inside an HSM (Hanzo KMS / luxfi/kms). The HSM enforces
policy at unwrap time (recipient identity, manifest TTL,
revocation status, optional dual-control authorisation). A leaked
recipient \emph{credential} (smartcard PIN) without HSM access
does not unwrap capsules. The HSM is itself audit-logged.
\item \textbf{Short-lived recipient wrapping keys.} Recipients
maintain a hierarchy: a long-term identity key (HSM-bound) and a
shorter-lived wrapping subkey (rotated daily/weekly). Capsules
target the wrapping subkey. Subkey expiry truncates the
retrospective-decryption window if the subkey leaks.
\item \textbf{Epoch keys.} The wrapping subkey is parameterised by a
monotonic epoch identifier $e$ ($1\text{ day}, 1\text{ week},
1\text{ month}$, by policy). Capsules embed the epoch. Verifiers
refuse capsules outside the active epoch window; the policy
registry rotates the active set. An attacker who recovers an
epoch-$e$ key can only decrypt envelopes sealed during epoch $e$.
\item \textbf{Rewrap-on-access (key rotation without re-encrypt).}
When the recipient's wrapping key rotates, the sender (or a
delegated rewrap service) re-encapsulates the DEK for each
outstanding capsule under the new recipient key. The bulk chunks
are untouched. Old capsules are deleted from storage; the
ciphertext is now only decryptable by the new wrapping key.
\item \textbf{Threshold release.} Sensitive historical envelopes
wrap the DEK under a Shamir-shared $(t, n)$ set of recipient
keys. No single compromised recipient unwraps the DEK; $t$
recipients must cooperate (see §\ref{sec:recovery}).
\end{enumerate}
\paragraph{Summary security statement.}
\emph{Confidentiality is provided by hybrid X-Wing key
establishment (X25519 + ML-KEM-768) with HKDF domain separation per
protocol layer. Authenticity is provided by detached hybrid
signatures (Ed25519 + ML-DSA-65) over canonical CBOR/COSE manifests
and transcript-bound capability negotiation. Bulk payload encryption
uses AES-256-GCM for the FIPS-oriented profile or ChaCha20-Poly1305
for the software profile, with sequence-numbered nonces, per-object
domain separation, and HKDF re-keying before nonce exhaustion.
Transport forward secrecy is provided when both classical and PQ
session secrets are ephemeral and erased after derivation; compromise
of long-term signing or identity keys does not decrypt prior sessions
but may enable impersonation until revocation. Stored envelopes use
DEK wrapping and require separate key-rotation, rewrap, revocation,
and recovery policy (see Section~\ref{sec:keys}).}
\subsection{Lamport / SLH-DSA / XMSS for the long-term root}
The profile signs every manifest with the sender's hybrid
Ed25519+ML-DSA-65 identity. The \emph{anchors} of that identity --
certificate authorities, policy registry roots, firmware signatures,
and the safe.apps.mil federation root -- are signed by SLH-DSA-192f
(stateless hash-based, FIPS~205) by default. SLH-DSA does not require
state tracking, which is operationally desirable for the federation
root. Where state tracking can be reliably enforced (e.g., an
air-gapped HSM with a counter), LMS-SHA-256-H10 or XMSS-SHA-256-H10
(SP~800-208) are alternates: smaller signatures, but stateful, so
each signing operation must be journaled or signatures will fly off
into compromise. For high-volume manifest signing we keep ML-DSA-65
(lattice, stateless, faster); for root-of-trust signing where the
signing rate is small, the stateless hash-based scheme is the
better fit.
% ===========================================================================
\section{Envelope format}
\label{sec:envelope}
A PQSAFE envelope is a directory or a single \texttt{.pqsafe} container
file containing:
\begin{verbatim}
report.pdf.pqsafe/
manifest.cbor - CBOR/COSE signed manifest
manifest.sig - Ed25519+ML-DSA-65 detached signature
capsules/ - one per recipient
01.cbor - X-Wing(recipient_pub_xwing) -> wrap(DEK)
02.cbor
...
chunks/ - bulk ciphertext
000001.bin - AEAD(DEK, nonce_seed||1, chunk_1)
000002.bin
...
proof/ - optional Z-Chain inclusion proof
inclusion.bin
\end{verbatim}
\subsection{Manifest schema (CBOR/COSE)}
\begin{lstlisting}[language=json,caption={Manifest schema (CBOR-decoded to JSON for readability).}]
{
"profile": "PQSAFE-IL5-HYBRID-v1",
"manifest_version": 1,
"created": "2026-05-12T22:00:00Z",
"ttl": "168h",
"policy_label": "CUI",
"policy_uri": "policy://safe.apps.mil/policies/CUI-IL5-HYBRID-PQ-v1",
"bulk_aead": "AES-256-GCM",
"hash": "SHA-384",
"kdf": "HKDF-SHA-384",
"kem": "X-Wing-MLKEM768",
"sig_classical": "Ed25519",
"sig_pq": "ML-DSA-65",
"chunk_size": 65536,
"chunks": [
{"index": 1, "len": 65536, "sha384": "..."},
{"index": 2, "len": 65536, "sha384": "..."},
...
{"index": 8421, "len": 14336, "sha384": "..."}
],
"merkle_root": "sha384:...",
"nonce_seed": "base64url:...",
"envelope_id": "sha384:...", % bound AEAD AAD (see below)
"sender": {
"x509_chain_hash": "sha384:...",
"did": "did:lux:...",
"pq_pub_mldsa65": "base64url:...",
"pub_ed25519": "base64url:..."
},
"recipients": [
{
"recipient_id": "alice.mil",
"pub_xwing": "base64url:...",
"capsule": "capsules/01.cbor",
"x509_chain_hash": "sha384:..."
},
{
"recipient_id": "bob.gov",
"pub_xwing": "base64url:...",
"capsule": "capsules/02.cbor",
"x509_chain_hash": "sha384:..."
}
],
"audit": {
"anchor_chain": "lux-q",
"audit_uri": "https://audit.safe.apps.mil/v1/commits",
"commit_hash": "sha384:..."
}
}
\end{lstlisting}
\subsection{Capsule format}
Each capsule wraps the per-file DEK for one recipient under that
recipient's X-Wing public key.
\begin{verbatim}
capsule.cbor = {
"v": 1,
"kem": "X-Wing-MLKEM768",
"kem_ct": <encoded X-Wing ciphertext (~1184 bytes)>,
"aad": sha384(manifest.cbor),
"wrap": AES-256-GCM(DEK, K_recipient, AAD=aad)
}
\end{verbatim}
The recipient executes:
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item Verify manifest signature (Ed25519 \emph{and} ML-DSA-65; both must
pass).
\item Look up own capsule by recipient ID.
\item $K_\text{recipient}\,\gets\,\textsf{X-Wing.Decap}(sk_\text{xwing},\,
\text{kem\_ct})$ -- this fails if either lattice or DH leg is corrupt,
guaranteeing hybrid security.
\item $\textsf{DEK}\,\gets\,\textsf{AES-256-GCM-Open}(\text{wrap},\,
K_\text{recipient},\,\text{aad})$.
\item Decrypt each chunk: $c_i\,\gets\,\textsf{AEAD.Open}(\textsf{DEK},
\,\text{nonce\_seed}\,\|\,i,\,\text{ct}_i)$.
\item Verify Merkle root over chunk hashes matches manifest.
\end{enumerate}
\subsection{Envelope identifier and AEAD AAD binding}
\label{sec:envelope-id}
The chunk AEAD takes \texttt{envelope\_id} as additional authenticated
data so that ciphertext chunks cannot be lifted from one envelope and
replayed inside another. To make this binding itself verifiable the
identifier is computed up-front from inputs that are fully determined
before chunk encryption and is then carried inside the signed manifest:
\[
\textsf{envelope\_id}\;=\;\textsf{SHA-384}\bigl(\,
\texttt{profile}\,\|\,
\texttt{version}_{32}\,\|\,
\texttt{pub\_ed25519}\,\|\,
\texttt{pq\_pub\_mldsa65}\,\|\,
\texttt{nonce\_seed}\,\|\,
\texttt{created}\,\|\,
\bigl\|_{i}\,(\texttt{recipient\_id}_i\,\|\,\texttt{pub\_xwing}_i)
\bigr).
\]
At Open time the verifier recomputes \texttt{envelope\_id} from the
signed manifest fields and refuses if the recomputed value does not
byte-match the \texttt{envelope\_id} carried inside the manifest. The
manifest signature already covers \texttt{envelope\_id}, so any
attempt to substitute a different AAD is caught either by the
recomputation check or by the hybrid signature check.
\subsection{Algorithm allow-list at verify}
\label{sec:allow-list}
The manifest fields \texttt{hash}, \texttt{kdf}, \texttt{kem},
\texttt{sig\_classical}, \texttt{sig\_pq}, and \texttt{chunk\_size}
are not advisory. PQSAFE-IL5-HYBRID-v1 verifiers MUST refuse any
envelope whose manifest carries values other than the canonical set:
\texttt{SHA-384}, \texttt{HKDF-SHA-384}, \texttt{X-Wing-MLKEM768},
\texttt{Ed25519}, \texttt{ML-DSA-65}, and a \texttt{chunk\_size} of
\(65536\) bytes. New parameter sets land as a new profile string
(\texttt{PQSAFE-IL5-HYBRID-v2}, \dots), not as parameters inside v1.
This eliminates downgrade as a class.
% ===========================================================================
\section{Key management}
\label{sec:keys}
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l l X}
\toprule
\textbf{Key} & \textbf{Role} & \textbf{Custody} \\
\midrule
DEK & per-file symmetric key (256 bits) & ephemeral, never persisted on storage system \\
KEK & wraps DEK at rest in storage layer (optional) & HSM/KMS (Hanzo KMS / luxfi/kms) \\
Recipient X-Wing & per-recipient hybrid PQ KEM keypair & user smart card / TPM / HSM; classical X25519 + ML-KEM-768 \\
Recipient signing & per-recipient hybrid sig keypair (Ed25519 + ML-DSA-65) & smart card / TPM; manifest counter-signatures, optional \\
Sender identity & per-sender hybrid sig keypair (Ed25519 + ML-DSA-65) & smart card / TPM; ALWAYS signs manifest \\
Federation root & SLH-DSA-192f keypair (FIPS~205) & air-gapped HSM; signs CA certs + policy registry \\
Recovery quorum & M-of-N threshold of recovery shares & distributed across agencies; rebuild DEK without single decryptor \\
\bottomrule
\end{tabularx}
\caption{Key roles and custody.}
\end{table}
\subsection{Recovery without a master key}
\label{sec:recovery}
PQSAFE forbids a universal master decrypt key. Recovery requires
threshold cooperation:
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item DEK is Shamir-shared $(t, n)$ at creation (typical: $t=3, n=5$ across
agency CISOs) over $\textsf{GF}(2^{256})$.
\item Shares are wrapped under each share-holder's recipient X-Wing
public key into capsules in the envelope's \texttt{recovery/}
subdirectory.
\item Reconstruction requires $t$ share-holders to participate; no one
party can decrypt unilaterally.
\item Audit log records every reconstruction event with the manifest
hash, share-holder hashes, and timestamp.
\end{enumerate}
This matches LP-019 (Threshold MPC)~\cite{lp019} and uses the same
threshold signing kernel that the Lux primary network deploys for
QuasarCert: luxfi/corona (Module-LWE, Ringtail-derived) and luxfi/pulsar (Module-LWE)
threshold ML-DSA. The \emph{file} recovery quorum and the \emph{chain}
finality quorum share no key material, but they share the same Pedersen
DKG + proactive resharing lifecycle.
% ===========================================================================
\section{Transport: Z-Wing and RNS}
\label{sec:transport}
PQSAFE envelopes can be transferred over any channel; the envelope is
self-protecting. Two transport profiles are recommended:
\subsection{Z-Wing (TCP / IP)}
Z-Wing (\texttt{luxfi/zwing}~\cite{luxzwing}) is the canonical Lux
post-quantum secure channel. It exposes a \texttt{net.Conn} so
application protocols (file transfer, ZAP RPC, HTTP/2, anything
that wants a stream) run unchanged on top.
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l X}
\toprule
\textbf{Layer} & \textbf{Z-Wing v1} \\
\midrule
KEM & X-Wing (X25519 + ML-KEM-768) per the IETF draft~\cite{xwing2024} \\
Identity & Ed25519 + ML-DSA-65 hybrid signatures (FIPS~204) \\
AEAD & ChaCha20-Poly1305 with sequence-numbered nonces \\
Replay protection & 64-bit sequence counter; per-direction key derivation \\
Forward secrecy & Ephemeral X-Wing per session; long-term keys do not encrypt \\
Negotiation & None. Z-Wing v1 is one suite. \\
Layering & Routes over plain TCP today; RNS in v2 \\
\bottomrule
\end{tabularx}
\caption{Z-Wing channel surface.}
\end{table}
The ``no negotiation'' choice is deliberate. Cipher negotiation has
been the source of every major TLS downgrade attack. Two endpoints
either speak Z-Wing v1 or they don't talk. A future Z-Wing v2 (e.g.,
ML-KEM-1024 + Ed448 + ML-DSA-87) is a new ALPN-style identifier, not a
parameter inside v1.
\subsection{Reticulum Network Stack (RNS)}
\label{sec:rns}
For deployments where TCP/IP isn't available -- mesh radio, LoRa,
disconnected networks, contested EW environments -- PQSAFE rides over
RNS (LP-9701~\cite{lp9701}). RNS is a cryptographic-mesh transport
that uses identity-based addressing and hop-by-hop authenticated
encryption, originally designed for amateur radio and now widely
adopted by survival-mesh communities.
The Lux RNS profile (see \texttt{node/network/dialer/rns\_*.go}) keeps
RNS's classical identity (Ed25519 + X25519) and adds a hybrid PQ
identity layer parallel to Z-Wing's:
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l X X}
\toprule
\textbf{Purpose} & \textbf{Classical (RNS native)} & \textbf{Post-quantum (Lux profile)} \\
\midrule
Identity signing & Ed25519 & ML-DSA-65 (FIPS~204) \\
Key exchange & X25519 & ML-KEM-768 (FIPS~203) \\
Session encryption & AES-256-GCM & -- \\
Key derivation & HKDF-SHA256 & -- \\
\bottomrule
\end{tabularx}
\caption{RNS hybrid PQ suite (LP-9701).}
\end{table}
Forward secrecy properties:
\begin{itemize}[leftmargin=*,itemsep=0pt]
\item Fresh X25519 + ML-KEM-768 keypairs per session.
\item Ephemeral private keys zeroed after the handshake completes.
\item Combined secret = $\textsf{HKDF}(\text{X25519 shared}\,\|\,
\text{ML-KEM shared})$ -- both components must break to
retrospectively decrypt.
\item AES-256-GCM session keys are rotated on RNS's standard ratchet
cadence; nonces are sequence-numbered.
\end{itemize}
Wire-format growth from classical RNS to the PQ-hybrid profile:
\begin{table}[H]
\centering
\small
\begin{tabular}{l r r r}
\toprule
\textbf{Component} & \textbf{Classical} & \textbf{Hybrid} & \textbf{$\Delta$} \\
\midrule
Public identity & 64 B & $\sim$3.2 KiB & +3.1 KiB \\
Signature & 64 B & $\sim$2.5 KiB & +2.4 KiB \\
Key exchange ct & 64 B & $\sim$1.2 KiB & +1.1 KiB \\
Handshake total & $\sim$256 B & $\sim$7.5 KiB & +7.2 KiB \\
\bottomrule
\end{tabular}
\caption{Wire-format growth (per LP-9701 measurements).}
\end{table}
A capability-exchange byte in the announce frame advertises PQ
support. A peer with \texttt{requirePostQuantum: true} refuses
classical-only peers; a peer with \texttt{requirePostQuantum: false}
falls back gracefully to classical RNS so mixed networks coexist
during the migration window.
% ===========================================================================
\section{Storage profile}
\label{sec:storage}
PQSAFE-IL5-HYBRID-v1 treats every back-end as ciphertext-only:
\begin{itemize}[leftmargin=*,itemsep=0pt]
\item \textbf{DoD SAFE (existing).} Upload the \texttt{.pqsafe}
envelope as a single file; SAFE never sees plaintext or recipient
identity (only opaque manifest hashes). Recipients pull the file
through SAFE, then decrypt locally.
\item \textbf{S3-compatible object storage.} Chunks become S3 objects
under a per-envelope prefix. The manifest is a small object alongside.
Server-side encryption is irrelevant -- the data is already encrypted
at the client.
\item \textbf{SharePoint.} The envelope uploads as a single
\texttt{.pqsafe} archive; SharePoint metadata stores only the
manifest hash (not recipient lists or labels).
\item \textbf{IPFS / content-addressed.} Each chunk is content-addressed
by SHA-384; the manifest carries the CIDs and the recipient list.
Loss of access control at the IPFS layer is irrelevant -- the data is
encrypted.
\item \textbf{Lux storage chain.} Envelopes are stored as opaque blobs;
the chain holds only audit hashes.
\end{itemize}
\subsection{File-at-rest with luxfi/age}
\label{sec:age}
When end-to-end transfer is not possible (offline replication, backup,
legacy ingest), the envelope is re-keyed at rest with
\textbf{luxfi/age}~\cite{luxage}. \texttt{age} is Filippo Valsorda's
modern file-encryption tool~\cite{age}; the Lux fork adds an
\texttt{age-mlkem768} recipient stanza that wraps the file key under
the recipient's ML-KEM-768 public key in addition to (or instead of)
the classical X25519 recipient stanza. The same hybrid policy as the
envelope applies: production deployments accept either the
\texttt{age-mlkem768} stanza alone (pure PQ) or both X25519 +
\texttt{age-mlkem768} stanzas (hybrid). The age binary format is
unchanged, so existing tooling and audit pipelines work without
modification.
\begin{lstlisting}[language=bash,caption={luxfi/age usage examples.}]
# Encrypt to a recipient's ML-KEM-768 public key
age -r mlkem1q5...4q3 -o report.pdf.age report.pdf
# Hybrid (X25519 + ML-KEM-768): both stanzas must decrypt
age -r age1lk...3qm -r mlkem1q5...4q3 -o report.pdf.age report.pdf
# Decrypt with an identity file containing both legs
age -d -i ~/.config/age/identity.txt report.pdf.age
\end{lstlisting}
\subsection{Replication: hanzo/replicate}
For data that crosses agency boundaries via replication rather than
point-to-point transfer, the same envelope flows through
\texttt{hanzo/replicate}'s compaction pipeline. Chunks are
content-addressed by SHA-384; the replication layer sees only hashes
and ciphertext. The Lux/Hanzo Virtual File System (\texttt{hanzo/vfs})
exposes the envelope as a mount-point at the recipient, decrypting
chunks lazily on read with the recipient's X-Wing private key. A
revocation in the manifest immediately blocks subsequent reads even
if the ciphertext chunks have been replicated.
% ===========================================================================
\section{Audit and revocation}
\label{sec:audit}
\subsection{Audit log content (what goes on-chain)}
\begin{lstlisting}[language=json]
{
"event": "sealed" | "transferred" | "opened" | "revoked",
"manifest_hash": "sha384:...",
"sender_cert_hash": "sha384:...",
"recipient_set_hash": "sha384:...", // ordered SHA-384 of recipient IDs
"policy_label": "CUI", // category only, no specific PII
"timestamp": "2026-05-12T22:00:00Z",
"anchor_chain": "lux-q", // Q-Chain (Quasar finality)
"profile_version": "PQSAFE-IL5-HYBRID-v1"
}
\end{lstlisting}
\textbf{What is NOT on-chain:} recipient emails, file names,
passphrases, claim IDs, PHI/PII, CUI descriptions, manifest contents,
DEK, or any cipher- or plaintext.
\subsection{Revocation}
A revocation event publishes the manifest hash to the policy
registry. Verifiers refuse to honour any capsule referencing a
revoked manifest. The capsule's $\textsf{kem\_ct}$ is content-bound to
the manifest, so a malicious actor cannot retroactively forge a
capsule referencing a different manifest.
Revocation is irreversible-by-design. To resume sharing after an
accidental revocation, a new manifest is created with a new DEK and a
fresh recipient set. Chunks are re-encrypted (cheap: $O(|\text{file}|)$
on the sender) and a new envelope is published.
\subsection{Expiry}
Every manifest carries a \texttt{ttl} field. Verifiers SHOULD refuse to
open envelopes past their TTL. The audit log records expiry events
implicitly through the timestamp.
% ===========================================================================
\section{Crypto agility}
\label{sec:agility}
Every parameter is versioned at the manifest layer:
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l l X}
\toprule
\textbf{Field} & \textbf{Wire identifier} & \textbf{Allowed values (v1)} \\
\midrule
\texttt{profile} & ASCII string & ``PQSAFE-IL5-HYBRID-v1'' only \\
\texttt{kem} & ASCII string & ``X-Wing-MLKEM768'' or ``X-Wing-MLKEM1024'' \\
\texttt{bulk\_aead} & ASCII string & ``AES-256-GCM'' or ``ChaCha20-Poly1305'' \\
\texttt{hash} & ASCII string & ``SHA-384'' or ``SHA-3-384'' \\
\texttt{kdf} & ASCII string & ``HKDF-SHA-384'' \\
\texttt{sig\_classical} & ASCII string & ``Ed25519'' or ``Ed448'' \\
\texttt{sig\_pq} & ASCII string & ``ML-DSA-65'' or ``ML-DSA-87'' or ``SLH-DSA-SHA2-192f'' \\
\bottomrule
\end{tabularx}
\caption{Versioned wire identifiers.}
\end{table}
When a primitive must be deprecated (e.g., FIPS validation status
changes, or a new attack reduces the security level), a new profile
identifier is minted (PQSAFE-IL5-HYBRID-v2). Verifiers route by
profile identifier; the v1 verifier does not attempt to parse v2
envelopes. The two-byte profile-identifier check is the entire
forward-compatibility surface, by design.
\subsection{The "PQ-only" exit ramp}
When DoD policy and PKI catch up to PQ-only operation, PQSAFE migrates
through three explicit profile versions:
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item \textbf{PQSAFE-IL5-HYBRID-v1} (this profile): X-Wing hybrid;
Ed25519+ML-DSA-65 hybrid signatures. Production today.
\item \textbf{PQSAFE-IL5-HYBRID-v2}: ML-KEM-1024; ML-DSA-87; SHA-3-384
default. Migration window.
\item \textbf{PQSAFE-IL5-PURE-PQ-v1}: ML-KEM-768/1024 (no X25519);
ML-DSA-65/87 only (no Ed25519). Activated when CNSA-3.0
/ equivalent policy permits classical-curve removal.
\end{enumerate}
The bulk AEAD path (AES-256-GCM, ChaCha20-Poly1305) survives all
three versions: it is symmetric, post-quantum-resistant for the
foreseeable future (Grover gives only $\sqrt{N}$ speed-up, leaving
AES-256 at 128-bit effective security), and FIPS-aligned.
% ===========================================================================
\section{DoD operational controls}
\label{sec:dodops}
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l X}
\toprule
\textbf{Area} & \textbf{Control} \\
\midrule
Classification boundary & No classified data unless the whole system is accredited for that domain. PQSAFE is NOT a cross-domain solution. \\
CUI / PII / PHI / IL5 & Client-side encryption before upload; recipient authorization verified outside the crypto layer (ABAC/RBAC + cert-bound identity). \\
Crypto module & Prefer FIPS~140-3 validated modules where available; algorithms restricted to NIST/CNSA set. No custom cryptography. \\
PQ mode & Hybrid classical + PQ in v1. Pure PQ only on the explicit exit-ramp profile (Section~\ref{sec:agility}). \\
Key custody & HSM/KMS-backed KEKs; per-file/per-chunk DEKs ephemeral; private keys never leave secure elements / smart cards. \\
Audit & Tamper-evident audit trail, but no secrets and no sensitive metadata on public ledgers. \\
Metadata minimisation & No filenames, recipients, CUI labels, passphrases, claim IDs, or mission data on-chain. \\
Crypto agility & Every algorithm, parameter set, KDF, AEAD, signature, manifest schema is versioned. \\
Revocation & Manifest hash blocked at policy registry; capsule content-bound to manifest. \\
Interop & CBOR/COSE envelope; deterministic test vectors; CLI; SDK; policy engine. \\
\bottomrule
\end{tabularx}
\caption{Operational controls required for a DoD-grade deployment.}
\end{table}
% ===========================================================================
\section{Lux stack integration}
\label{sec:lux}
PQSAFE-IL5-HYBRID-v1 is implemented by composing existing Lux
components. No new crypto primitives are introduced.
\begin{table}[H]
\centering
\small
\begin{tabularx}{\linewidth}{l X}
\toprule
\textbf{Lux component} & \textbf{Role in PQSAFE} \\
\midrule
\texttt{luxfi/crypto} & Primitive provider: ML-KEM, ML-DSA, SLH-DSA, AES-GCM, ChaCha20-Poly1305, HKDF, SHA-384/3. Single source of truth for parameter sets. \\
\texttt{luxfi/zwing} & Z-Wing secure channel. PQSAFE transfers ride on top; receives the \texttt{.pqsafe} envelope as opaque bytes. \\
\texttt{luxfi/age} & File-at-rest envelope when E2E transfer is impossible: replication, backup, legacy ingest. ML-KEM-768 recipient stanza. \\
\texttt{luxfi/corona} & Module-LWE threshold signature kernel (Ringtail-derived). Recovery quorum and federation root signing. \\
\texttt{luxfi/pulsar} & Module-LWE threshold signature kernel. Output byte-equal to FIPS~204 ML-DSA, so verifiers consume PQSAFE manifests with a single FIPS-validated ML-DSA library. \\
\texttt{luxfi/kms} & HSM-backed key custody: long-term identity keys, federation root, recovery-share KEKs. \\
\texttt{hanzoai/iam} & Identity provider: certificate issuance, recipient public-key lookup, revocation registry. \\
\texttt{hanzo/vfs} & Mount-point view of decrypted envelopes; lazy chunk decryption with the recipient's X-Wing private key. \\
\texttt{hanzo/replicate} & Replication of ciphertext chunks across storage back-ends; sees only SHA-384 content addresses. \\
\texttt{lux Q-Chain} & Audit anchor: opaque hash commitments only. No sensitive metadata. \\
\texttt{lux M-Chain} & MPC ceremonies for recovery-quorum DKG / proactive resharing (LP-134). \\
\bottomrule
\end{tabularx}
\caption{Lux components in the PQSAFE architecture.}
\end{table}
\subsection{Component CLI: \texttt{pqsafe}}
\begin{lstlisting}[language=bash]
# Seal a file with PQSAFE
pqsafe seal \
--in report.pdf \
--out report.pdf.pqsafe \
--recipient alice.mil \
--recipient bob.gov \
--label CUI \
--ttl 7d \
--hybrid mlkem768+x25519 \
--sign mldsa65+ed25519 \
--audit lux-q
# Open a sealed envelope
pqsafe open --in report.pdf.pqsafe --out report.pdf
# Verify only (no decrypt) - checks manifest signatures + Merkle root
pqsafe verify --in report.pdf.pqsafe
# Revoke
pqsafe revoke --manifest-hash sha384:abcd... --reason "recipient compromised"
# Re-wrap (rotate KEK without re-encrypting chunks)
pqsafe rewrap --in report.pdf.pqsafe --add-recipient charlie.gov
# Replicate via hanzo/replicate
pqsafe push report.pdf.pqsafe replicate://safe.apps.mil/cui/
\end{lstlisting}
% ===========================================================================
\section{Deployment for safe.apps.mil}
\label{sec:safe-apps-mil}
The proposed federated deployment at \texttt{safe.apps.mil} fronts the
existing DoD SAFE storage with the PQSAFE envelope layer.
\begin{figure}[H]
\centering
\begin{tikzpicture}[
node distance=10mm and 18mm,
every node/.style={font=\small},
box/.style={draw, rounded corners=2pt, minimum height=10mm,
minimum width=22mm, align=center},
cloud/.style={draw, rounded corners=4pt, fill=blue!5,
minimum height=10mm, minimum width=22mm, align=center},
arrow/.style={-Stealth, thick}
]
\node[box] (sender) {Sender\\(smart card)};
\node[box, right=of sender] (zwing) {Z-Wing\\TLS-equiv};
\node[cloud, right=of zwing] (safe) {DoD SAFE\\(ciphertext)};
\node[box, right=of safe] (zwing2) {Z-Wing\\TLS-equiv};
\node[box, right=of zwing2] (recipient) {Recipient\\(smart card)};
\node[cloud, below=of safe] (qchain) {Lux Q-Chain\\(audit hashes)};
\draw[arrow] (sender)--(zwing) node[midway,above,font=\tiny]{\texttt{.pqsafe}};
\draw[arrow] (zwing)--(safe);
\draw[arrow] (safe)--(zwing2);
\draw[arrow] (zwing2)--(recipient);
\draw[arrow] (sender.south) to[bend right=20] node[midway,left,font=\tiny]{commit} (qchain.west);
\draw[arrow] (recipient.south) to[bend left=20] node[midway,right,font=\tiny]{commit} (qchain.east);
\end{tikzpicture}
\caption{Sender and recipient hold the only plaintext. Z-Wing protects
the channel; DoD SAFE / object storage / SharePoint / etc.\ holds
ciphertext; Q-Chain holds audit hashes only.}
\end{figure}
\subsection{Migration from DoD SAFE today}
DoD SAFE currently provides TLS-protected file drop-off with sender-set
expiry. The migration path:
\begin{enumerate}[leftmargin=*,itemsep=0pt]
\item \textbf{Phase 1 (PQSAFE alongside SAFE).} Users upload PQSAFE
envelopes through SAFE unchanged. SAFE sees only ciphertext; the
existing SAFE infrastructure is untouched.
\item \textbf{Phase 2 (PQSAFE-native ingest).} A \texttt{safe.apps.mil}
endpoint accepts PQSAFE envelopes directly, fronted by Z-Wing for
endpoint-to-endpoint PQ confidentiality and an HSM-backed
certificate chain for ABAC enforcement.
\item \textbf{Phase 3 (legacy SAFE deprecation).} SAFE TLS-only mode is
retired; \texttt{safe.apps.mil} requires either Z-Wing or
PQSAFE-on-TLS-1.3-hybrid. Backward-compat preserved through the
hybrid TLS cipher suite (X25519MLKEM768, IANA \texttt{0x11ec}).
\end{enumerate}
% ===========================================================================
\section{What we don't do}
\label{sec:nondoers}
\begin{itemize}[leftmargin=*,itemsep=0pt]
\item Don't say ``blockchain makes files secure.'' The chain is an
audit anchor, nothing more.
\item Don't store plaintext, filenames, recipient identities, or
passphrases on-chain.
\item Don't use PQ-only before the hybrid migration is policy-accepted.
\item Don't invent a new KEM, signature, or AEAD.
\item Don't treat DoD SAFE as PQ just because it uses TLS.
\item Don't treat Lux primitive claims as DoD-approved without
FIPS~140-3 validation, code audit, SBOM, threat model, and ATO
evidence.
\item Don't use Pulsar/Corona threshold consensus signatures as if
they were file encryption.
\item Don't use smart contracts as a key manager for CUI/PII/PHI.
\end{itemize}
% ===========================================================================
\section{Conclusion}
PQSAFE-IL5-HYBRID-v1 is what DoD asks for when DoD says ``replace SAFE
with something post-quantum and crypto-agile.'' It is not a new
cryptosystem. It is a small layer of envelope discipline applied above
NIST-standardised primitives, with the Lux PQ stack supplying the
parts (Z-Wing for the channel, age + ML-KEM for at-rest, corona +
pulsar for threshold recovery, the Q-Chain for audit anchoring, KMS
for HSM-backed key custody). The win is not novelty -- it is that
\emph{every byte that leaves a DoD endpoint is encrypted with a hybrid
classical + post-quantum primitive that NIST has standardised, the
sender has signed, the manifest has bound, and the audit log has
witnessed, without trusting the storage system, the network, or the
auditor with anything beyond a hash}.
% ===========================================================================
\begin{thebibliography}{99}
\bibitem{fips203}
NIST. \emph{FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism
Standard.} August 2024.
\url{https://csrc.nist.gov/pubs/fips/203/final}
\bibitem{fips204}
NIST. \emph{FIPS 204: Module-Lattice-Based Digital Signature Standard.}
August 2024.
\url{https://csrc.nist.gov/pubs/fips/204/final}
\bibitem{fips205}
NIST. \emph{FIPS 205: Stateless Hash-Based Digital Signature Standard.}
August 2024.
\url{https://csrc.nist.gov/pubs/fips/205/final}
\bibitem{fips197}
NIST. \emph{FIPS 197: Advanced Encryption Standard (AES).} 2001 /
updated 2023.
\bibitem{sp800208}
NIST. \emph{Special Publication 800-208: Recommendation for Stateful
Hash-Based Signature Schemes.} October 2020.
\bibitem{cnsa2}
NSA. \emph{Commercial National Security Algorithm Suite 2.0
(CNSA 2.0).} September 2022.
\url{https://www.nsa.gov/Press-Room/Press-Releases-Statements/Press-Release-View/Article/3148990/}
\bibitem{xwing2024}
Manuel Barbosa, Deirdre Connolly, Jo\~ao Diogo Duarte, Aaron Kaiser,
Peter Schwabe, Karoline Varner, Bas Westerbaan.
\emph{X-Wing: The Hybrid KEM You've Been Looking For.}
IACR ePrint 2024/039 and
IETF \texttt{draft-connolly-cfrg-xwing-kem}.
\url{https://eprint.iacr.org/2024/039}
\bibitem{rfc8439}
Y. Nir, A. Langley. \emph{RFC 8439: ChaCha20 and Poly1305 for IETF
Protocols.} 2018.
\bibitem{rfc8949}
C. Bormann, P. Hoffman. \emph{RFC 8949: Concise Binary Object
Representation (CBOR).} 2020.
\bibitem{rfc8152}
J. Schaad. \emph{RFC 8152: CBOR Object Signing and Encryption (COSE).}
2017.
\bibitem{age}
Filippo Valsorda. \emph{age: A simple, modern and secure file
encryption tool, format, and Go library.}
\url{https://age-encryption.org/}
\bibitem{luxage}
Lux Industries Inc. \emph{luxfi/age: hybrid PQ recipient stanza for
age.}
\url{https://github.com/luxfi/age}
\bibitem{luxzwing}
Lux Industries Inc. \emph{luxfi/zwing: Z-Wing post-quantum secure
channel + canonical X-Wing / hybrid-identity primitives.}
\url{https://github.com/luxfi/zwing}
\bibitem{pqsafe}
Lux Industries Inc. \emph{luxfi/pqsafe: reference implementation of
PQSAFE-IL5-HYBRID-v1.}
\url{https://github.com/luxfi/pqsafe}
\bibitem{pqrns}
Lux Industries Inc. \emph{luxfi/pqrns: PQ-RNS hybrid post-quantum
profile for the Reticulum Network Stack.}
\url{https://github.com/luxfi/pqrns}
\bibitem{lp9701}
Lux. \emph{LP-9701: Reticulum Network Stack (RNS) — hybrid PQ profile.}
\url{https://github.com/luxfi/lps/blob/main/LPs/lp-9701-reticulum-network-stack.md}
\bibitem{lp019}
Lux. \emph{LP-019: Threshold MPC.}
\url{https://github.com/luxfi/lps/blob/main/LPs/lp-019-threshold-mpc.md}
\end{thebibliography}
\appendix
\section*{Reproducibility}
\textbf{Source code.} \texttt{github.com/luxfi/pqsafe} (envelope tool, commit \texttt{TBD}); \texttt{github.com/luxfi/age} (PQ-extended age fork); \texttt{github.com/luxfi/zwing} (identity / signing); \texttt{github.com/luxfi/pqrns} (Reticulum PQ profile).\\
\textbf{Build.} \texttt{go build ./...} for pqsafe / zwing / pqrns; \texttt{cargo build --release} for the age fork.\\
\textbf{Hardware tested.} TBD (commodity x86\_64 Linux with AES-NI; Apple Silicon).\\
\textbf{Standards referenced.} FIPS 140-3, FIPS 180-4 (SHA-2), FIPS 197 (AES), FIPS 202 (SHA-3/SHAKE), FIPS 203 (ML-KEM-768), FIPS 204 (ML-DSA-65), FIPS 205 (SLH-DSA-SHA2-192f), NIST SP 800-38D (GCM), NIST SP 800-56C (KDF), NIST SP 800-208 (stateful hash-based), RFC 8032 (Ed25519), RFC 9180 (HPKE), CNSA 2.0.\\
\textbf{Contact.} [email protected].
\end{document}