mirror of
https://github.com/lux-apps/papers.git
synced 2026-11-03 05:07:46 +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.
67 lines
2.4 KiB
TeX
67 lines
2.4 KiB
TeX
\section{FHE for Private Computation}
|
|
|
|
\label{sec:fhe}
|
|
|
|
\subsection{Motivation}
|
|
|
|
Some computations require operating on data from multiple parties without
|
|
revealing individual values. Examples in the securities domain:
|
|
\begin{itemize}[nosep]
|
|
\item Accreditation verification: does an investor's income exceed
|
|
a threshold without revealing the exact amount?
|
|
\item Private voting: aggregate votes without revealing individual choices.
|
|
\item Compliance checks: verify aggregate investment limits across
|
|
multiple accounts.
|
|
\end{itemize}
|
|
|
|
\subsection{Implementation}
|
|
|
|
The FHE module in \texttt{lux/transfer/pkg/crypto/fhe.go} uses lattice-based
|
|
fully homomorphic encryption from the \texttt{luxfi/fhe} library:
|
|
|
|
\begin{lstlisting}[language=Go,caption={fhe.go: parameter initialization}]
|
|
func NewFHEKey() (*FHEKey, error) {
|
|
params, err := fhe.NewParametersFromLiteral(fhe.PN10QP27)
|
|
intParams, err := fhe.NewIntegerParams(params, 2)
|
|
kg := fhe.NewKeyGenerator(params)
|
|
sk, pk := kg.GenKeyPair()
|
|
return &FHEKey{
|
|
params: params, intParams: intParams,
|
|
sk: sk, pk: pk,
|
|
}, nil
|
|
}
|
|
\end{lstlisting}
|
|
|
|
The parameter set \texttt{PN10QP27} provides approximately 128-bit security.
|
|
Integer operations support 64-bit unsigned values, sufficient for monetary
|
|
amounts and share counts.
|
|
|
|
\subsection{Encrypted Comparison}
|
|
|
|
The core operation is homomorphic comparison, enabling threshold checks
|
|
on encrypted data:
|
|
|
|
\begin{lstlisting}[language=Go,caption={fhe.go: encrypted comparison}]
|
|
func CompareEncrypted(a, b *FHECiphertext,
|
|
key *FHEEvalKey) (int, error) {
|
|
// Computed homomorphically, then single-bit
|
|
// results are decrypted.
|
|
// In production the final decryption would
|
|
// be done via MPC.
|
|
}
|
|
\end{lstlisting}
|
|
|
|
The comparison result is a single encrypted bit. In the sovereign model,
|
|
the final decryption is distributed via MPC among user-controlled signers,
|
|
so no single party learns the underlying values.
|
|
|
|
\subsection{Integration with Sovereign Keys}
|
|
|
|
FHE ciphertexts are encrypted under the vault's FHE public key (generated
|
|
alongside the ML-KEM key pair). The FHE secret key is held by the user
|
|
or split via MPC among user-designated parties. The provider stores
|
|
ciphertexts and can perform homomorphic operations, but cannot decrypt
|
|
the results.
|
|
|
|
% ======================================================================
|