Oblivious RAM (ORAM)
Oblivious RAM (ORAM) was first introduced by GO96. It is a primitive that provides a generic compilation of any random-access memory (RAM) program to one which hides the accesses pattern of the underlying RAM.
Note: Oblivious RAM schemes can provide statistical or unconditional security against adversaries who only know which array indices are accessed. However, in practice one almost always needs to deploy ORAM together with standard symmetric encryption.
Definition
Throughout, we use the following notation. All oblivious RAM schemes are defined with respect to a key space , state space , virtual array size and blocks , and physical array size and blocks . We additionally assume and . Furthermore, we define the sets:
- These are the allowed operations for the virtual array () and the physical array ().
Syntax
An -round Oblivious RAM (ORAM) is a tuple of efficient functions such that: TODO The above functions describe the processing of the Oblivious RAM query. They are used in the following way to process a query at index , for a physical array :
Correctness
TODO
Security
TODO An ORAM is secure if for all efficient , there exists a negligible function , such that
Variations
TODO: offline ORAM like in BN16