Cryptoloop HOWTO
Cryptoloop HOWTO
Ralf Hölzer
<[email protected]>
2004−01−15
Revision History
Revision 1.2 2004−03−12 Revised by: rh
Added information on dm−crypt, updated loop−AES info, added more info on security
Revision 1.1 2004−01−24 Revised by: rh
Updated information on patching util−linux, Loop−AES, Best Crypt
Revision 1.0 2004−01−17 Revised by: rh
Initial release, reviewed by TM at LDP.
Revision v0.9 2004−01−15 Revised by: rh
Updated and converted to DocBook XML.
This document explains how to create encrypted file systems using the Cryptoloop functionality. Cryptoloop
is part of the CryptoAPI in the 2.6 Linux kernel series.
Cryptoloop HOWTO
Table of Contents
1. About this document.......................................................................................................................................1
1.1. Copyright and License......................................................................................................................1
1.2. Disclaimer.........................................................................................................................................1
1.3. Credits / Contributors........................................................................................................................1
1.4. Feedback...........................................................................................................................................2
2. Introduction.....................................................................................................................................................3
i
1. About this document
This HOWTO describes how to use the Cryptoloop loop device encryption in the 2.6 Linux kernel series.
Cryptoloop makes it possible to create encrypted file systems within a partition or another file in the file
system. These encrypted files can the be moved to a CD, DVD, USB memory stick, etc. Cryptoloop makes
use of the loop device. This device is a pseudo−device which serves as a "loop" through which each call to a
the file system has to pass. This way, data can be processed in order to encrypt and decrypt it. Since kernel
2.6, the Crypto API has been integrated into the main kernel, and setting up an encrypted file system has
become much easier. No additional kernel patches are required. An update of some userspace utilities is
necessary. Unfortunately, the use of Cryptoloop is not very well−documented so far. This HOWTO is an
attempt to make it easy everyone to create an encrypted file system using the standard Cryptoloop
functionality. Cryptoloop is based on the Crypto API in the 2.6 Linux kernel. It should not be confused with
Loop−AES, which is a completely separate project. Cryptoloop is similar to the Crypto API that was available
as a separate patch for the 2.4 kernel series. The new version is not compatible with the older one.
1.2. Disclaimer
No liability for the contents of this document can be accepted. Use the concepts, examples and information at
your own risk. There may be errors and inaccuracies, that could be damaging to your system. Proceed with
caution, and although this is highly unlikely, the author(s) do not take any responsibility.
All copyrights are held by their by their respective owners, unless specifically noted otherwise. Use of a term
in this document should not be regarded as affecting the validity of any trademark or service mark. Naming of
particular products or brands should not be seen as endorsements.
• Dennis Kaledin
• Binh Nguyen
• David Lawyer
• Tabatha Marshall
• Kian Spongsveen
1.4. Feedback
Feedback is most certainly welcome for this document. Send your additions, comments and criticisms to the
following email address : <[email protected]>.
In terms of security, Cryptoloop is doing ok. The key is usually generated from a password and its hash is
used as the key to AES. This leads to the possibility of a known−plaintext attack. Loop−AES is superior in
this regard, because it generates a random key and encrypts this key separately, making a known−plaintext
attack more difficult. Loop−AES also supports a multi−key mode, where sectors are encrypted with 64
separate AES keys. In general, a brute−force attack on your password can be very effective, if you choose a
weak password. To be on the safe side, your password should be at least 20 characters long. Otherwise a
brute−force attack on the password will be much easier than trying to brute−force the AES encryption
directly.
The Cryptoloop functionality in the standard kernel provides a stable and clean implementation without the
need for extra patches. Since it is still fairly new, it may not have gotten the necessary amount of review in
terms of security. You have to decide for yourself what is suitable for you.
IMPORTANT: Cryptoloop has been marked deprecated in the latest 2.6 kernel. This means that it will no
longer be maintained actively. The successor to Cryptoloop will be dm−crypt. Dm−crypt is available in the
main kernel since 2.6.4. Cryptoloop will still be available in the main kernel for a long time, but dm−crypt
will be the method of choice for disk encryption in the future. Dm−crypt is based on the device mapper and
offers pretty much the same functionality as Cryptoloop. It is still very new and there are no easy−to−use
userspace tools available yet. Dm−crypt is considered to be much cleaner code than Cryptoloop, but there are
some important differences. For example, creating an ecrypted filesystem within a file will still require to go
through a loop device, but this support is still in development.
There are other tools which allow you to create an encrypted file system. BestCrypt is a commercial product
from Jetico. It allows you to create encrypted containers and has a large choice of ciphers. It also offers some
nifty features such as hidden containers. It is available for Windows and Linux, which makes it suitable for
interchanging encrypted containers between Windows and Linux. BestCrypt now compiles on 2.6 kernels as
well. Cryptoloop can also create containers that can be moved around, by creating the encrypted file system
within a file as described below. I don't know of a way to access the Cryptoloop−encrypted files from other
operating systems such as Windows. In this case, BestCrypt may be your only choice.
There are other commercial disk encryption tools such as PGP disk, but to my knowledge there is no Linux
support for them.
2. Introduction 3
3. Configuring the kernel
In order to use Cryptoloop, you need to activate a few kernel options. You have the option to either compile
these requirements as modules or compile them directly into the kernel. The following steps enable them as
modules. If you are not familiar with building a 2.6 kernel, you should refer to the Linux Kernel HOWTO.
The following instructions just give the minimal steps.
1. Go to the directory that holds your kernel source tree (usually /usr/src/linux/) and start the
configuration:
make menuconfig
2. Enable general loop device support. Active "Loopback device support" under:
Device Drivers −> Block Devices −> Loopback device support
3. Enable Cryptoloop support in the same section. The option should show up as soon as you enable
general loopback support.
4. Enable the cryptographic API by going to "Cryptographic options" from the main menu. You can
safely enable most algorithms here. I would recommend that you enable the following:
−− Cryptographic API
<*> HMAC support
< > Null algorithms
<*> MD4 digest algorithm
<*> MD5 digest algorithm
<*> SHA1 digest algorithm
<*> SHA256 digest algorithm
<*> SHA384 and SHA512 digest algorithms
<*> DES and Triple DES EDE cipher algorithms
<*> Blowfish cipher algorithm
<*> Twofish cipher algorithm
<*> Serpent cipher algorithm
<*> AES cipher algorithms
<*> CAST5 (CAST−128) cipher algorithm
<*> CAST6 (CAST−256) cipher algorithm
<*> Deflate compression algorithm
< > Testing module
If you decide to make them as modules, make sure you load the appropriate modules (cryptoloop, aes,
etc.) at startup before you continue.
5. Make your kernel and modules and install them. For example, if you are using lilo on a x86 machine,
this can be done like this:
make
make modules_install
cp arch/i386/boot/bzImage /boot/kernel−2.6.1
lilo
6. Load the required modules at startup. This is handled differently on the various distributions. For
example, on Gentoo these modules can be added to /etc/modules.autoload/kernel−2.6.
If you have compiled Cryptoloop as a module, it will have to be loaded first. It will automatically load
the basic loop device module as well. You can manually load the module with:
modprobe cryptoloop
Download the util−linux package and the two patches above. First extract the util−linux package and then
apply the two patches:
cd util−linux−2.12
After applying the patches, compile and install util−linux according to the instructions in the INSTALL file.
I recommend to use Gentoo Linux, which automatically applies these patches when emerging the util−linux
patches. Other distributions may have versions of util−linux available, that have these patches aleady applied
as well.
1. It is recommended that you format your partition and fill it with random data before you create the
encrypted file system on it. This will make it harder for an attacker to detect patterns in your
encrypted partition.
WARNING!
Be careful what you type here for your partition. If you do make a mistake, you can easily overwrite
the wrong partition with random garbage!
You may get an error message that the device is full. You can ignore it.
2. Select a cipher and key size. A list of ciphers supported by your kernel can be obtained from
/proc/crypto. I recommend that you use AES with a 256−bit key.
3. Set up the loop device. This is done using the losetup command from the util−linux package. The
following command creates an encrypted filesystem using the loop device 0 using the AES cipher
with a 256−bit key on the device /dev/sda1:
losetup −e aes−256 /dev/loop0 /dev/sda1
The command prompts for a password. Select a strong password and try to remember it without
having to stick a Post−It note to your monitor. There is one big downside to using Cryptoloop. Since
the password is hashed to create the encryption key, it is not easy to change the password later on.
The most straight−forward way of changing the password is to create a new encrypted partition or file
and move all data into it. For this reason, make sure you select a strong password from the start. AES
may be a strong algorithm, but if you chose a weak password, that security goes down the drain.
If losetup fails with an INVALID ARGUMENT error message, there is a problem with your
util−linux package. Make sure you have followed the instructions above on how to install a patched
version of util−linux. Older and unpatched version use a different way of passing the key size, and do
not work with the 2.6 Crypto API.
4. Create a file system. You can chose whatever file system you like. The following creates an ext3 file
system using the loop device:
mkfs.ext3 /dev/loop0
5. Mount the encrypted file system. First you need to create a mount point, such as /mnt/crypto:
mkdir /mnt/crypto
Then you need to mount the file system. At this stage you need to tell mount explicitly which loop
device to use:
In order to mount the encrypted file system created above, you can use the standard mount command from
util−linux:
You will be prompted for the password and the file system will be mounted just as any other. Since the
encryption option implies that this is a Cryptoloop filesystem, it will automatically pick an available loopback
device.
umount /mnt/crypto
mount /mnt/crypto
To initially create a 100MB file containing random data use the following command:
If you want to change the size of the file, change the count value accordingly. The above command creates
100000 blocks of 1k in size, but you can change this to whatever you like. Just make sure it is not too small to
hold the file system you chose. You can choose any file name and path you want instead of /mystuff.aes
as long as there's enough space on the partition.
You can then create the encrypted file system within this file, similar to the way it is done above:
mkfs.ext3 /dev/loop0
umount /mnt/crypto
losetup −d /dev/loop0
If you want to move the file or burn it to a CD or DVD, make sure you unmount it first.