Oblivious RAM (O-RAM) is a useful primitive that allows a client to hide its data access patterns from an untrusted server in storage outsourcing applications.

Oblivious RAM (O-RAM) is a useful primitive that allows a client to hide its data access patterns from an untrusted server in storage outsourcing applications.

Roughly speaking, the adversary model for Oblivious RAM is as follows: an adversary can not distinguish between equal length sequence of queries made by the client to the server. Early solutions required the server to store $O(N*log(N))$ data items and each access to a data item actually required $O(log^3(N))$ data requests. Later work of Pinkas & Reinman brought this down to $O(N)$ storage and $O(log^2(N))$ requests, but their solution was insecure but an improvement later made this secure. Interestingly there is a theoretical lower bound on the number of requests of $log(N)$ because essentially, the overhead arises out of which data oblivious sorting algorithm one chooses.