HarmonyPIR — stateful PIR against one server

HarmonyPIR is a single-server stateful PIR scheme. There is one honest-but-curious server holding the database, and no non-collusion assumption. The scheme's leverage comes from a different direction: the client is willing to do work once, up front, to make every later query cheap.

The protocol splits into two phases. In the offline phase, the client streams the whole database from the server once and condenses it into a short list of hints that it keeps locally. In the online phase, each query is small in both directions — roughly √N entries in the request, √N entries in the response — and the client recovers the target row by combining the response with one of its hints. After about √N queries the hints are used up and the offline phase has to run again.

OFFLINE — once per epoch Client builds hints O(N) in Server streams DB full database, one pass ONLINE — every query Client + local hints O(√N) Server same one small, frequent — each hides q Online queries per offline phase After ~N/T queries, all the empty cells in the hint table are used up. Rerun offline with a fresh permutation and stream the database again. The next page unpacks what the hint table actually looks like, and how one online query extracts a single row out of a √N-wide batch.
One-time streaming pass during offline; short symmetric round-trips for every online query, each reusing the precomputed hint table.

One subtlety worth flagging up front: the online-phase request is not an encrypted version of the query index q. It's a batch of √N plain database indices — a slice of the client's private hint table — with one of them swapped for a freshly sampled random index so the server can't pick out which slot the client actually cares about. The server just looks up those indices and sends back their values. All of the privacy comes from how the client chose the batch, not from any cryptography on the wire. The rest of this section is about that choice.