logo
Main | Project presentation | Architecture | Data Structures | Security | References | Project Page

Data Structures in SecCubes

SecCube records

From a high level view, a SecCube can be seen as a collection of records. There are three different type of records:

An important fact about record's is that their size is variable. For INIT and MAP records, their size is fixed at initialization time, and cannot be changed (well, it's possible, but that requires offline conversion tools). For DATA records, obviously, their size depends on end-user's payload's size.

SecCube blocks

Physical media usually do not operate on variable size data units such as records. They rather use fixed size data units such as sectors on hard disks, or cells in Flash memories. In this project, we generally name fixed size data units as blocks. All SecCube records (INIT, MAP and DATA records) are encapsulated in SecCube blocks. A simplified explanation is that they are cut into blocks, so that all blocks concatenated build a record. This is slightly oversimplified, because actually, all blocks begin with a block header. So, this means that actually a given record is mapped on several blocks such that block 1 has a block header + the beginning of the record, block 2 has a block header + some more data of the record etc.

Blocks are identified by block identifiers. The implementation of block identifiers depends on the underlying support. It can be a physical address on the media, or an offset for instance.

The structure of a block is detailed in blockcube.h. Basically, it contains:

INIT record

The structure of INIT record is detailed in blockcube.h. It consists of :

The size of an INIT record depends on selected algorithms and public key length specified in the INIT record header. The location of each variable size field (public key, encryption key, MAC key and MAC) is specified by parameters of the INIT record header.

MAP record

A MAP record maps a given record identifier to the identifier of the first block that contains it. See below for SecCube blocks. It consists of :

A MAP record always fits in a single block, so it is also called a MAP block. The reason a MAP record does not span over several blocks, is that then, it'd be necessary to keep a list of all MAP records. The reason we don't have a single MAP record is that, when new data is added to the SecCube and that requires a new MAP entry, we do not want to recompute the entire MAC record, because that would mean re-writting the MAP record too often (and might damage the corresponding underlying cell).

DATA record

A DATA record contains end-user's payload. It consists of:

Chaining blocks

A SecCube consists of :

Note that all blocks begin with a generic header, but only the first 'DATA' block of a given record begins with record identifier and payload size (etc). This means that the record structure is actually encapsulated in DATA blocks, and concatenating each content of 'DATA' blocks (except headers) builds a record structure.