In most applications servers store information of requests made by clients. While often these logs are only used for analysis of traffic, they can be used to track all data retrieved by a certain client. Private Information Retrieval is a system which enables client to retrieve data from servers without the server knowing which data the client is interested in.
One simple way of achieving private information retrieval is to have the server simply send all messages to the client. This however is not desired as the amount of network traffic needed is the number of bytes of data the server stores (aka way too much). In an effort to reduce the number of bytes sent the client request the product of the xor operation of a random number of messages the server stores. By requesting the same xor product excluding the desired message from a different server the two results, after performing the xor operation again, return the desired message.
An in depth description can be found here or (in video form) here.
Follow the these steps:
git clone https://github.com/idahoenigmann/private_information_retrieval.git
cd private_information_retrieval/
mkdir build && cd build
cmake ..
make
To test communication try:
./server -p 1234 -f ../src/server/data.txt &
./server -p 1235 -f ../src/server/data.txt &
./client -i 0
To get more information on the command line parameters type:
./client --help
./server --help