HiVE — Hidden Volume Encryption
as
presented in Toward Robust Hidden Volumes using Write-Only Oblivious
RAM
A short introduction for those who haven't read the full paper.
HiVE is a novel hidden volume encryption scheme built around the
principle of a powerful cryptographic construct called Oblivious
RAM. HiVE is resistant to an adversary who is able to observe the
contents of a disk on multiple, separate occasions, and is provably
secure against a powerful "chosen plaintext" attacker.
HiVE is implemented in a Linux kernel module, as a device-mapper
target. Encrypted HiVE volumes are exposed to the user as ordinary block
device nodes. A userland tool is also provided for easy management of
HiVE volumes.
For a more in-depth explanation of HiVE's capabilities, please
visit the official HiVE webpage,
or refer to the full paper
available here.
Downloads
HiVE kernel module for Linux kernel
version 3.13.6. (ver.2014.11.03)
HiVE userland tool to manage HiVE
volumes. (ver.2014.11.03)
Please see the included README files for detailed information on
setup and usage. By design, HiVE gives you many opportunities to
irreversibly destroy your data, so please make sure you understand how
the tool works before you start using it.
Usage
(1) To create a new HiVE instance on a block device:
hive create <block-device>
OR hive create <block-device> --single-volume
e.g. hive create /dev/sdb1
This operation will destroy all data on the device, and set it up for
two volumes.
(2) To open a HiVE instance created on a block device:
hive open <block-device> <hive-name>
OR hive open <block-device> <hive-name> --single-volume
e.g. hive open /dev/sdb1 my-hive-dev
The open command by default maps the public volume to
"/dev/mapper/hive-public" and the hidden volume to
"/dev/mapper/hive-hidden". You can specify different names using the
[--public-dev] and [--hidden-dev] (or [-p] and [-h], respectively)
options.
These mapped devices can then be formatted with a filesystem and used
just like any other block device.
(3) To close an open HiVE instance:
hive close <hive-name>
e.g. hive close my-hive-dev
(4) To list open HiVE instances:
hive list
(5) Use the [--single-volume] (or [-s]) option with
create/open commands to create/open only a single, public volume. Note
that if you have a hidden volume, this command will destroy the data in
that volume.
(6) Mapped HiVE devices that are assigned random names
prefixed with "map" are for internal use. Users should not write to
those devices.
(7) See "hive --help" for a summary of available options.
Troubleshooting
(1) Please make sure you compile and run HiVE with the
correct Linux kernel version (i.e., 3.13.6). HiVE is known NOT to
compile/work with earlier kernel releases. We have confirmed that
the current implementation works with certain newer kernel releases
(however, sometimes giving compiler warnings) but this requires further
testing, so proceed at your own risk. HiVE will no longer work
with recent kernels due to a number of changes made to the block I/O
layer. It is an easy fix, though. If you must run HiVE on a newer
kernel, and are interested in learning more about this issue, please
contact me.
(2) You need reasonably recent versions of libdevmapper
and GCC to compile the HiVE userland tool. If you are using a distro
that splits software into separate development packages (e.g., Debian,
Ubuntu) remember to install the libdevmapper headers as well (e.g.,
often found in the package device-mapper-dev).
(3) HiVE kernel module is known not to compile in
certain virtual machine environments, due to virtualization
limitations.
(4) HiVE volumes created on USB flash drives connected
to virtual machines may behave abnormally (e.g., HiVE may refuse to
open/close volumes).
Known Issues
Please contact me if you discover other problems.
(1) While the scheme conceptually supports any number
of hidden volumes on a given storage device, the current implementation
only allows for two volumes, one public (i.e., encrypted but presence is
known), and one hidden per HiVE device.
(2) Volume sizes are not user adjustable at the moment.
Change Log
ver.2014.11.03 (1) Random data generation in HiVE
kernel module now defaults to an AES-CTR-based scheme. ARC4 support can
still be enabled in the source code, but is known to be insecure. HiVE
I/O performance remains unaffected. (2) Userland tool bug that could
sometimes result in a segfault during volume creation fixed.
ver.2014.07.29 (1) Key derivation and password
verification got a complete overhaul. (2) Numerous additional bug fixes.
ver.2014.07.23 First release.
Credits
This software is based on the following research work carried out at
Northeastern University and NEU SecLab.
Toward Robust Hidden Volumes using Write-Only Oblivious RAM
Erik-Oliver Blass, Travis Mayberry, Guevara Noubir, Kaan Onarlioglu
Proceedings of the ACM Conference on Computer and Communications Security (CCS)
Scottsdale, AZ USA, November 2014
Authors' version of the full paper is
available here. If you
would like to acknowledge our research or software in your works, please
use the following citation information.
@inproceedings{ccs2014hive,
author = {Erik-Oliver Blass and Travis Mayberry and Guevara Noubir and Kaan Onarlioglu},
title = {{Toward Robust Hidden Volumes using Write-Only Oblivious RAM}},
booktitle = {ACM Conference on Computer and Communications Security (CCS)},
month = nov,
year = {2014},
}
HiVE kernel module is free software licensed under GPLv2. © 2014
Erik-Oliver Blass, Travis Mayberry, Guevara Noubir, Kaan Onarlioglu
HiVE userland tool is free software licensed under GPLv3.
© 2014 Erik-Oliver Blass, Travis Mayberry, Guevara Noubir, Kaan Onarlioglu