mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
![Milan Broz](/assets/img/avatar_default.png)
dm-crypt can already activate TCRYPT (TrueCrypt compatible) containers in LRW or XTS block encryption mode. TCRYPT containers prior to version 4.1 use CBC mode with some additional tweaks, this patch adds support for these containers. This new mode is implemented using special IV generator named TCW (TrueCrypt IV with whitening). TCW IV only supports containers that are encrypted with one cipher (Tested with AES, Twofish, Serpent, CAST5 and TripleDES). While this mode is legacy and is known to be vulnerable to some watermarking attacks (e.g. revealing of hidden disk existence) it can still be useful to activate old containers without using 3rd party software or for independent forensic analysis of such containers. (Both the userspace and kernel code is an independent implementation based on the format documentation and it completely avoids use of original source code.) The TCW IV generator uses two additional keys: Kw (whitening seed, size is always 16 bytes - TCW_WHITENING_SIZE) and Kiv (IV seed, size is always the IV size of the selected cipher). These keys are concatenated at the end of the main encryption key provided in mapping table. While whitening is completely independent from IV, it is implemented inside IV generator for simplification. The whitening value is always 16 bytes long and is calculated per sector from provided Kw as initial seed, xored with sector number and mixed with CRC32 algorithm. Resulting value is xored with ciphertext sector content. IV is calculated from the provided Kiv as initial IV seed and xored with sector number. Detailed calculation can be found in the Truecrypt documentation for version < 4.1 and will also be described on dm-crypt site, see: http://code.google.com/p/cryptsetup/wiki/DMCrypt The experimental support for activation of these containers is already present in git devel brach of cryptsetup. Signed-off-by: Milan Broz <gmazyland@gmail.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
83 lines
2.8 KiB
Text
83 lines
2.8 KiB
Text
dm-crypt
|
|
=========
|
|
|
|
Device-Mapper's "crypt" target provides transparent encryption of block devices
|
|
using the kernel crypto API.
|
|
|
|
For a more detailed description of supported parameters see:
|
|
http://code.google.com/p/cryptsetup/wiki/DMCrypt
|
|
|
|
Parameters: <cipher> <key> <iv_offset> <device path> \
|
|
<offset> [<#opt_params> <opt_params>]
|
|
|
|
<cipher>
|
|
Encryption cipher and an optional IV generation mode.
|
|
(In format cipher[:keycount]-chainmode-ivmode[:ivopts]).
|
|
Examples:
|
|
des
|
|
aes-cbc-essiv:sha256
|
|
twofish-ecb
|
|
|
|
/proc/crypto contains supported crypto modes
|
|
|
|
<key>
|
|
Key used for encryption. It is encoded as a hexadecimal number.
|
|
You can only use key sizes that are valid for the selected cipher
|
|
in combination with the selected iv mode.
|
|
Note that for some iv modes the key string can contain additional
|
|
keys (for example IV seed) so the key contains more parts concatenated
|
|
into a single string.
|
|
|
|
<keycount>
|
|
Multi-key compatibility mode. You can define <keycount> keys and
|
|
then sectors are encrypted according to their offsets (sector 0 uses key0;
|
|
sector 1 uses key1 etc.). <keycount> must be a power of two.
|
|
|
|
<iv_offset>
|
|
The IV offset is a sector count that is added to the sector number
|
|
before creating the IV.
|
|
|
|
<device path>
|
|
This is the device that is going to be used as backend and contains the
|
|
encrypted data. You can specify it as a path like /dev/xxx or a device
|
|
number <major>:<minor>.
|
|
|
|
<offset>
|
|
Starting sector within the device where the encrypted data begins.
|
|
|
|
<#opt_params>
|
|
Number of optional parameters. If there are no optional parameters,
|
|
the optional paramaters section can be skipped or #opt_params can be zero.
|
|
Otherwise #opt_params is the number of following arguments.
|
|
|
|
Example of optional parameters section:
|
|
1 allow_discards
|
|
|
|
allow_discards
|
|
Block discard requests (a.k.a. TRIM) are passed through the crypt device.
|
|
The default is to ignore discard requests.
|
|
|
|
WARNING: Assess the specific security risks carefully before enabling this
|
|
option. For example, allowing discards on encrypted devices may lead to
|
|
the leak of information about the ciphertext device (filesystem type,
|
|
used space etc.) if the discarded blocks can be located easily on the
|
|
device later.
|
|
|
|
Example scripts
|
|
===============
|
|
LUKS (Linux Unified Key Setup) is now the preferred way to set up disk
|
|
encryption with dm-crypt using the 'cryptsetup' utility, see
|
|
http://code.google.com/p/cryptsetup/
|
|
|
|
[[
|
|
#!/bin/sh
|
|
# Create a crypt device using dmsetup
|
|
dmsetup create crypt1 --table "0 `blockdev --getsize $1` crypt aes-cbc-essiv:sha256 babebabebabebabebabebabebabebabe 0 $1 0"
|
|
]]
|
|
|
|
[[
|
|
#!/bin/sh
|
|
# Create a crypt device using cryptsetup and LUKS header with default cipher
|
|
cryptsetup luksFormat $1
|
|
cryptsetup luksOpen $1 crypt1
|
|
]]
|