PIR in one picture

A PIR protocol has two guarantees worth memorizing:

  1. Correctness. If you ask for row i, you get row i.
  2. Privacy. The server cannot learn which row you asked for — its view of the query is indistinguishable across all valid indices.

The mechanical implication of (2) is that the server must touch every row identically. If it could skip even one row, it would learn something about which row you didn't want. Every PIR backend differs in how it forces the server to touch all rows — but they all do.

Client wants row i DATABASE row 0 row 1 row 2 row 3 row 4 row 5 row 6 row 7 Server touches all every row flashes identically — server learns nothing about i
A query reaches the DB, every row is processed identically, a response returns. The server cannot tell which row the client wanted.

The animation above is a cartoon. Real PIR schemes achieve "touches every row identically" using clever cryptography: secret-shared indicator functions (DPF), homomorphic encryption (OnionPIR), or preprocessed hints (HarmonyPIR). The next three sections unpack each.