#set document(title: "Security Proof: VOLE-LWR OPRF", author: "opaque-lattice") #set page(numbering: "1", margin: 1in) #set heading(numbering: "1.1") #set math.equation(numbering: "(1)") // Custom theorem environments #let theorem-counter = counter("theorem") #let definition-counter = counter("definition") #let theorem(name, body) = { theorem-counter.step() block( width: 100%, inset: 1em, stroke: (left: 2pt + blue), fill: blue.lighten(95%), )[ *Theorem #context theorem-counter.display() (#name).* #body ] } #let definition(name, body) = { definition-counter.step() block( width: 100%, inset: 1em, stroke: (left: 2pt + green), fill: green.lighten(95%), )[ *Definition #context definition-counter.display() (#name).* #body ] } #let proof(body) = { block( width: 100%, inset: 1em, )[ _Proof._ #body ] } #align(center)[ #text(size: 20pt, weight: "bold")[ Security Proof: VOLE-LWR OPRF ] #v(0.5em) #text(size: 12pt)[ A Helper-less, Unlinkable, Post-Quantum Oblivious PRF ] #v(1em) #text(size: 10pt, style: "italic")[ opaque-lattice Project ] ] #v(2em) #outline(indent: auto) #pagebreak() = Introduction We present the security analysis for the VOLE-LWR OPRF (Vector Oblivious Linear Evaluation with Learning With Rounding), a novel construction achieving: - *UC-Unlinkability*: Server cannot correlate sessions from the same user - *Helper-less*: No reconciliation hints transmitted (unlike standard lattice OPRFs) - *Post-Quantum Security*: Based on Ring-LWR hardness assumption - *Single-Round*: After PCG setup, only one message in each direction == Protocol Overview #figure( table( columns: 3, align: (center, center, center), [*Phase*], [*Client*], [*Server*], [Setup], [Stores $(sans("pcg"), Delta)$], [Stores $(sans("pcg"), k)$ where $k = Delta$], [Blind], [Computes $m = s + u$ where $u <- sans("VOLE")(sans("pcg"), i)$], [], [Evaluate], [], [Computes $e = m dot Delta - v$], [Finalize], [Outputs $H(round_p (e))$], [], ), caption: [VOLE-LWR OPRF Protocol Flow] ) = Preliminaries == Notation #table( columns: 2, align: (left, left), [*Symbol*], [*Definition*], [$R_q$], [Polynomial ring $ZZ_q [X] \/ (X^n + 1)$ with $n = 256$, $q = 65537$], [$chi_beta$], [Error distribution with coefficients in $[-beta, beta]$], [$round_p (dot)$], [Deterministic rounding from $ZZ_q$ to $ZZ_p$], [$sans("VOLE")$], [Vector Oblivious Linear Evaluation correlation], [$Delta$], [Server's secret key in $R_q$], [$s$], [Password element $H(sans("pwd")) in R_q$], ) == Ring-LWR Assumption #definition("Ring-LWR Assumption")[ For security parameter $lambda$, the Ring-LWR problem with parameters $(n, q, p, beta)$ states that for uniform $a <- R_q$ and secret $s <- chi_beta$: $ (a, round_p (a dot s)) approx_c (a, u) $ where $u <- ZZ_p^n$ is uniform and $approx_c$ denotes computational indistinguishability. ] Our parameters: - $n = 256$ (ring dimension) - $q = 65537$ (Fermat prime, NTT-friendly) - $p = 16$ (rounding modulus) - $beta = 1$ (error bound) #theorem("LWR Correctness Condition")[ Rounding is deterministic when $2 n beta^2 < q \/ (2p)$. With our parameters: $2 dot 256 dot 1 = 512 < 65537 \/ 32 = 2048$. #h(1em) $checkmark$ ] == VOLE Correlation #definition("Ring-VOLE Correlation")[ A Ring-VOLE correlation over $R_q$ with global key $Delta in R_q$ consists of: - Client receives: $u in R_q$ - Server receives: $v in R_q$ where $v = u dot Delta + e$ for small $e <- chi_beta$ ] The Pseudorandom Correlation Generator (PCG) allows generating arbitrarily many VOLE correlations from short seeds: $ sans("PCG"): {0,1}^lambda times NN -> (u_i, v_i) $ = Security Model == Ideal Functionality $cal(F)_"OPRF"$ #figure( rect(width: 100%, inset: 1em)[ *Ideal Functionality $cal(F)_"OPRF"$* The functionality maintains a table $T$ and key $k$. *Evaluate(sid, $x$):* - On input $x$ from client: - If $T[x]$ undefined: $T[x] <- F_k (x)$ for PRF $F$ - Return $T[x]$ to client *Corrupt Server:* - Reveal $k$ to adversary - Adversary can compute $F_k (x)$ for any $x$ ], caption: [Ideal OPRF Functionality] ) == Security Properties === Unlinkability #definition("Session Unlinkability")[ An OPRF protocol is *unlinkable* if for any PPT adversary $cal(A)$ controlling the server: $ Pr[cal(A) "wins" sans("Link-Game")] <= 1/2 + sans("negl")(lambda) $ where in $sans("Link-Game")$: + Client runs two sessions with inputs $x_0, x_1$ + Adversary sees transcripts $(tau_0, tau_1)$ + Adversary guesses which transcript corresponds to which input ] === Obliviousness #definition("Obliviousness")[ An OPRF is *oblivious* if the server learns nothing about the client's input beyond what can be inferred from the output. Formally: $forall x_0, x_1$, the server's view is computationally indistinguishable: $ sans("View")_S (x_0) approx_c sans("View")_S (x_1) $ ] = Security Analysis == Theorem: VOLE-LWR OPRF is Unlinkable #theorem("Unlinkability")[ The VOLE-LWR OPRF achieves perfect unlinkability under the Ring-LWR assumption. ] #proof[ We show that the server's view in any session is independent of previous sessions. *Server's View:* In each session $i$, the server observes: $ m_i = s + u_i $ where $s = H(sans("pwd"))$ is fixed and $u_i$ is the VOLE mask from PCG index $i$. *Key Observation:* The PCG indices $i$ are chosen uniformly at random by the client. Since the PCG is pseudorandom, each $u_i$ is computationally indistinguishable from uniform over $R_q$. *Indistinguishability Argument:* Consider two sessions with the same password: - Session 1: $m_1 = s + u_1$ - Session 2: $m_2 = s + u_2$ The server can compute: $ m_1 - m_2 = u_1 - u_2 $ This difference reveals *only* the difference of VOLE masks, which is independent of $s$. Since $u_1, u_2$ are derived from independent random PCG indices, $u_1 - u_2$ is uniformly distributed and leaks no information about the password. *Contrast with Prior Art:* In split-blinding OPRFs, the server sees $A dot s + e$ where $A$ is public. This creates a "fingerprint" because $A dot s$ is deterministic. In VOLE-LWR, the server sees $s + u$ where $u$ changes randomly each session. Therefore, no PPT adversary can link sessions with advantage better than negligible. $square$ ] == Theorem: VOLE-LWR OPRF is Oblivious #theorem("Obliviousness")[ The VOLE-LWR OPRF is oblivious under the Ring-LWR assumption. ] #proof[ We prove obliviousness via a sequence of games. *Game 0:* Real protocol execution with password $x$. *Game 1:* Replace VOLE correlation $(u, v)$ with truly random elements satisfying $v = u dot Delta + e$. By PRG security of the PCG, Games 0 and 1 are indistinguishable. *Game 2:* Replace the client's message $m = s + u$ with a uniformly random $m' <- R_q$. Since $u$ is uniform over $R_q$ (from Game 1), and $s$ is fixed, the sum $s + u$ is also uniform over $R_q$. Thus Games 1 and 2 are statistically identical. *Conclusion:* In Game 2, the server's view is independent of $s$ (and hence the password). The server sees only: - $m'$: uniform random element - Its own computation $m' dot Delta - v$ Neither reveals information about the client's input. $square$ ] == Theorem: Output Determinism #theorem("Deterministic Output")[ For fixed password and server key, the VOLE-LWR OPRF output is deterministic across all sessions, despite randomized VOLE masks. ] #proof[ Let $s = H(sans("pwd"))$ and $Delta$ be the server's key. *Client's message:* $m = s + u$ where $(u, v)$ is VOLE correlation with $v = u dot Delta + e$. *Server's response:* $ e' &= m dot Delta - v \ &= (s + u) dot Delta - (u dot Delta + e) \ &= s dot Delta + u dot Delta - u dot Delta - e \ &= s dot Delta - e $ *Rounding:* The client computes $round_p (e') = round_p (s dot Delta - e)$. By the LWR correctness condition, since $||e||_infinity <= beta$ and $2 n beta^2 < q \/ (2p)$: $ round_p (s dot Delta - e) = round_p (s dot Delta) $ The error $e$ is absorbed by the rounding! Thus: $ sans("Output") = H(round_p (s dot Delta)) $ This depends only on $s$ and $Delta$, not on the session-specific VOLE correlation. $square$ ] = Security Reductions == Reduction to Ring-LWR #theorem("Security Reduction")[ If there exists an adversary $cal(A)$ that breaks the obliviousness of VOLE-LWR OPRF with advantage $epsilon$, then there exists an adversary $cal(B)$ that solves Ring-LWR with advantage $epsilon' >= epsilon - sans("negl")(lambda)$. ] #proof[ We construct $cal(B)$ as follows: *Input:* Ring-LWR challenge $(a, b)$ where $b$ is either $round_p (a dot s)$ for secret $s$ or uniform. *Simulation:* + $cal(B)$ sets the public parameter $A = a$ + $cal(B)$ runs $cal(A)$, simulating the OPRF protocol + When $cal(A)$ queries with input $x$: - Compute $s_x = H(x)$ - Return $round_p (a dot s_x)$ as the OPRF evaluation *Analysis:* - If $(a, b)$ is a valid Ring-LWR sample, simulation is perfect - If $b$ is uniform, the simulated OPRF output is independent of the input Thus $cal(B)$ can distinguish Ring-LWR samples with the same advantage as $cal(A)$ breaks obliviousness. $square$ ] == Reduction to PCG Security #theorem("PCG Security Reduction")[ The security of VOLE-LWR OPRF relies on the pseudorandomness of the PCG for Ring-VOLE correlations. ] The PCG construction uses: + *Seed PRG*: Expands short seed to long pseudorandom string + *Correlation Generator*: Produces $(u_i, v_i)$ pairs satisfying VOLE relation If the PCG is broken, an adversary could: - Predict future VOLE masks $u_i$ - Compute $s = m_i - u_i$ directly from observed messages = Parameter Analysis == Concrete Security #figure( table( columns: 3, align: (left, center, center), [*Parameter*], [*Value*], [*Security Contribution*], [$n$], [256], [Ring dimension, affects LWE hardness], [$q$], [65537], [Modulus, Fermat prime for NTT], [$p$], [16], [Rounding modulus, affects LWR hardness], [$beta$], [1], [Error bound, affects correctness], [$log_2(q\/p)$], [$approx 12$], [Bits of rounding, affects security], ), caption: [VOLE-LWR OPRF Parameters] ) == Estimated Security Level Using the LWE estimator methodology: $ "Security" approx n dot log_2(q\/p) - log_2(n) approx 256 dot 12 - 8 approx 3064 "bits" $ This vastly exceeds the 128-bit security target. However, the true security is limited by: + Ring structure (reduces by factor of ~$n$) + Small secret distribution Conservative estimate: *128-bit post-quantum security* against known lattice attacks. = Comparison with Prior Art #figure( table( columns: 4, align: (left, center, center, center), [*Property*], [*Split-Blinding*], [*LEAP-Style*], [*VOLE-LWR (Ours)*], [Unlinkable], [$times$], [$checkmark$], [$checkmark$], [Helper-less], [$times$], [$checkmark$], [$checkmark$], [Single-Round], [$checkmark$], [$times$ (4 rounds)], [$checkmark$], [Post-Quantum], [$checkmark$], [$checkmark$], [$checkmark$], [Fingerprint-Free], [$times$], [$checkmark$], [$checkmark$], ), caption: [Comparison of Lattice OPRF Constructions] ) *Key Innovation:* VOLE-LWR is the first construction achieving all five properties simultaneously. = Constant-Time Implementation == Timing Attack Resistance The implementation uses constant-time operations throughout: #table( columns: 2, align: (left, left), [*Operation*], [*Constant-Time Technique*], [Coefficient normalization], [`ct_normalize` using `ct_select`], [Modular reduction], [`rem_euclid` (no branches)], [Polynomial multiplication], [NTT with fixed iteration counts], [Comparison], [`subtle` crate primitives], [Output verification], [`ct_eq` byte comparison], ) == NTT Optimization The implementation uses Number Theoretic Transform for $O(n log n)$ multiplication: - Primitive 512th root of unity: $psi = 256$ (since $psi^{256} equiv -1 mod 65537$) - Cooley-Tukey butterfly for forward transform - Gentleman-Sande butterfly for inverse transform - Negacyclic convolution for $ZZ_q[X]\/(X^n+1)$ = Conclusion We have proven that the VOLE-LWR OPRF construction achieves: + *Perfect Unlinkability*: VOLE masking ensures each session appears independent + *Obliviousness*: Server learns nothing about client's input (under Ring-LWR) + *Deterministic Output*: LWR rounding absorbs VOLE noise, ensuring consistency + *Post-Quantum Security*: Relies only on lattice hardness assumptions The protocol requires only a single round of communication after PCG setup, making it practical for deployment in OPAQUE-style password authentication. #v(2em) #align(center)[ #rect(inset: 1em)[ *Implementation Available* `opaque-lattice` Rust crate Branch: `feat/vole-rounded-oprf` 219 tests passing ] ]