Is there any way to perform Private Information Retrieval when no computations can be executed on the server-side?
I would like to perform the computations on the client, and without having to download the whole database.
Cryptography Stack Exchange is a question and answer site for software developers, mathematicians and others interested in cryptography. It only takes a minute to sign up.
Sign up to join this communityIs there any way to perform Private Information Retrieval when no computations can be executed on the server-side?
I would like to perform the computations on the client, and without having to download the whole database.
Not when it comes to PIR. However, depending on your use case, have you considered using Oblivious RAM?
From Mayberry et al. (2013):
There are traditionally two ways to hide a user’s access pattern (given only a single server/cloud): Oblivious RAM (ORAM) and Private Information Retrieval (PIR). The traditional approach taken by ORAM is to arrange the data in such a way that the user never touches the same piece twice, without an intermediate “shuffle” which erases the correlation between block locations. [...]
Private Information Retrieval, in contrast with ORAM, hides the target of each individual query, independent of all previous queries. This can be accomplished by using a homomorphic encryption which the server uses to operate over the entire database, selecting out the block of data that the user has requested. The user generates encrypted requests and sends them to the server. Since PIR does not try to hide a sequence of accesses, but each access individually, the amortized cost is equal to the worst-case cost. Unfortunately, the requirement that the server computes over the entire database for each query is often impractical, especially for large databases.
So, for ORAM you generally have a single client, which holds some client storage. Of course it is possible to have multiple clients, but then they have to download/re-upload the client state before and after transferring blocks. One construction is Recursive Path ORAM, which for storing $N$ blocks has $O(\log N) \cdot \omega(1)$ blocks of client storage and $O(\log N)$ blocks of bandwidth, where we assume blocks are “moderately sized”, i.e. of size $\Omega(\log^2 N)$.