Encrypted Databases: a Private Low-Level Storage Model

We propose a model for database encryption such that user data remains private if the storage server peeks, and is tamper-evident if the storage server pokes, yet can be incrementally updated on a per-row basis. The only bad thing a storage server can do is deny data availability, which can be remediated by using multiple independent servers as redundant backup storage.

With the encryption protocol described below, a high-level database, that can have an arbitrarily complex schema with many tables, relations, indexes, etc., will be implemented on top of a low-level database, that can be a simple binary key-value store with fixed-size keys.

Row-Level Database Encryption

We want data to be encrypted as the level of every “row”, such that the database can be updated incrementally, i.e. each transaction only needs to modify the entries at stake (as well as corresponding index entries), and not other entries. In other words, local changes in the high-level database according to its abstract data model that users care about lead to local changes in the low-level data that is present in the encrypted data store.

Attack Model

Cryptographic Primitives

The protocol will assume the following cryptographic primitives: