1. Mask input \(\mathbf{x}_i\) as \(\mathbf{y}_i = \mathbf{A}\mathbf{s}_i + \mathbf{e}_i + \Delta\mathbf{x}_i \in \mathbb{Z}_q^L\)
2. Send large \(\mathbf{y}_i\) (O(L)) → Server 1
3. Send small seed \(\mathbf{s}_i\) (O(λ)) → Server 2
1. Collect \(\sum \mathbf{y}_i\) — all O(L) work stays here
2. Receive only \(\sum \mathbf{s}_i\) from Server 2 — O(λ)
3. Output \(\approx \operatorname{Decode}\!\bigl(\textstyle\sum\mathbf{y}_i - \mathbf{A}\sum\mathbf{s}_i\bigr)\)
Additive homomorphism: \(\sum_i \mathbf{y}_i = \mathbf{A}\sum_i\mathbf{s}_i + \sum_i\mathbf{e}_i + \Delta\sum_i\mathbf{x}_i\). Server 1 recovers \(\sum\mathbf{x}_i\) using only the aggregate seed — never individual inputs.
| Property | Prio | Prio+ | Elsa | Heli | TAPAS |
|---|---|---|---|---|---|
| S2 comm. independent of L | ✗ | ✗ | ✗ | ✗ | ✓ |
| No trusted setup | ✗ | ✗ | ✗ | ✗ | ✓ |
| Post-quantum (LWE / SIS only) | ✗ | ✗ | ✗ | ✗ | ✓ |
| Malicious server security | ✗ | ✗ | ✓ MP | ✓ MP | ✓ IA |
| Identifiable Abort | ✗ | ✗ | ✗ | ✗ | ✓ |
| Input validation / malicious clients | ✓ | ✓ | ✓ | ✓ | ✓ |
| Arbitrary integer inputs | ✓ | ✓ | ✓ | ✗ | ✓ |
MP = Malicious Privacy · IA = Identifiable Abort (stronger)
To guarantee clients' inputs satisfy norm constraints (L2 / L∞), TAPAS offers two proof systems with complementary trade-offs.
Responses must be over the integers, not modulo q. We must sample carefully and abort if the response violates a norm bound — to prevent leaking the secret.
Reducing rejection probability forces a smaller challenge space, which increases soundness error. More repetitions of the protocol are required to compensate.
The witness can only be extracted with an error margin. For monolithic proofs over dimension L:
This is the core bottleneck for large L.
Status:
Split L-dim witness into k blocks of size d = L/k.
Slack shrinks from √L → √d. Each block restarts independently → expected time O(k·M).
Target a bimodal distribution shaped like witness ± noise.
Requires much smaller \( \sigma \) while ensurng higher acceptance rate.
Each block performs rejection sampling independently. If block 5 fails, only block 5 restarts — all other blocks keep their accepted values.
Transforms exponential-in-k convergence into linear, restoring practical efficiency for high-dimensional witnesses.
Independent blocks open an attack: a malicious client could use different secrets sj per block to inject garbage. This breaks the global consistency guarantee.
Question: How do we enforce s1 = s2 = … = sk without reverting to O(L) communication for Server 2?
Answer: Cross-Server Digest Check
Server 2 re-derives responses using the client's single secret s, hashes them, and sends a 256-bit digest to Server 1 for verification. Communication overhead for S2 remains O(λ).
Status:
1. Expand seed ρ → masking vectors {rj}
2. Re-derive z′j = rj + cj · s per block j
3. Compute H = Hash({z′j, cj})
1. Verify ZK proof π on responses zj
2. Compute H′ = Hash({zj, cj}) locally
3. If H = H′: same s used across all k blocks ✓
A malicious Server 1 drops ciphertexts dynamically. The simulator must commit to honest ciphertexts before knowing which clients S1 will drop — but it cannot query the ideal functionality without knowing the final online set.
Add a secondary programmable mask derived from a seed ρi:
The simulator programs H′(ρi) after the online set is fixed, injecting a correction term into the sum.
Proving correctness of yi now requires proving inside the ZKP that H′(ρi) was computed correctly — expensive and incompatible with the Programmable Random Oracle Model used for simulation.
Commit directly to the raw mask w without proving its derivation. Use an equivocable commitment (Pedersen DL trapdoor or wide Ajtai SIS matrix) to re-open to wtarget after the online set is finalised.
Before exchanging any data, servers intersect their valid-client sets V1 ∩ V2 = V and each signs and broadcasts V. Neither server can later deny seeing a client's message.
If a digest fails, the server must produce the original signed message as evidence. Because signatures are non-repudiable:
False alarms reveal the server as the cheater — without exposing any client secret.
Non-repudiation prevents anonymous stalling attacks
L = 216 / 217 / 218 (seconds)
Prio
Elsa
TAPAS
L = 216 / 217 / 218 (seconds)
Prio
Elsa
TAPAS
L = 216 / 217 / 218 (seconds)
Prio (compute ≈ comm.)
Elsa (comm. dominates at large L)
TAPAS (comm. = 0.1 s flat, any L)
S2→S1 carries only n SHA-256 digests + one λ-field-element mask — bandwidth independent of L. Elsa/Prio send O(nL) data: at n=1000, L=217 that is terabytes per round; TAPAS sends kilobytes. The gap widens linearly as L grows.
TAPAS client cost is O(1) in n — clients prove independently, so cohort size doesn't affect per-client work. End-to-end times confirm the architecture advantage at n=1000:
Elsa grows 155× from n=100→1000.
TAPAS stays flat at 0.20 s regardless of cohort size.
55× vs Prio · 23× vs Elsa.
Prio / Elsa — S2 receives
O(nL) ciphertexts per round
n=1000, L=217: terabytes of traffic
TAPAS — S2 receives
n seeds (λ bits each)
n=1000, L=217: a few kilobytes
S2→S1 reply: n digests + 1 mask = 0.1 s flat, independent of L. This is 352× less comm. than Elsa at L=218.
TAPAS: Efficient Two-Server Asymmetric Private Aggregation
S2 costs O(nλ) in comm. and compute — independent of L.
First two-server protocol with pure post-quantum security (LWE + SIS only)
Block-wise ZK proofs: slack √d instead of √L; independent restarts keep runtime O(k·M)
Identifiable Abort: any misbehaving party (client or server) is cryptographically identified
93× faster than Prio, 17.5× than Elsa (client, L=218). End-to-end 6.9× faster at n=1000.
352× less inter-server traffic than Elsa at L=218 — kilobytes instead of terabytes per round