Dm-crypt/ru

dm-crypt – это система шифрования дисков с использованием платформы ядра crypto API и подсистемы определения устройств. С помощью dm-crypt администраторы могут зашифровать весь диск, логические тома, разделы, а также отдельные файлы.

Подсистема dm-crypt поддерживает структуру Linux Unified Key Setup (LUKS), которая позволяет с помощью различных ключей получать доступ к зашифрованным данным, а также управлять ключами (например, изменять ключи, добавлять дополнительные пароли, и др.) Хотя dm-crypt поддерживает установку без LUKS, данная статья будет в основном посвящена функционалу LUKS, в силу её гибкости, управляемости, а также широкой поддержки в обществе.

Конфигурация
Существует два условия, необходимых для использования dm-crypt:


 * 1) Настройка ядра Linux
 * 2) Установка пакета

Конфигурация ядра
Для использования dm-crypt необходимо настроить несколько параметров конфигурации.

Прежде всего, должна быть включена поддержка инфраструктуры device mapper и crypt target:

Далее, ядро Linux должно поддерживать набор криптографических функций, которые администратор хочет использовать для шифрования. Они могут быть найдены в разделе Cryptographic API:

Если также будет зашифрована корневая файловая система, необходимо создать initramfs, в которой корневая файловая система будет расшифрована перед монтированием. Таким образом, требуется поддержка initramfs:

Установка Cryptsetup
Пакет предоставляет команду, которая используется для открытия или закрытия зашифрованного хранилища, а также для управления паролями и связанными с ними ключами.

Ключевой файл или пароль
Чтобы начать работу с зашифрованным хранилищем, администратор должен решить, какой метод использовать для создания ключа шифрования. Если используется, можно выбрать пароль или ключевой файл. Ключевой файл может быть любым файлом, но рекомендуется использовать надлежащим образом защищённый (ввиду того, что доступ к ключевому файлу подразумевает доступ к зашифрованным данным) файл с случайными данными.

Для создания ключевого файла, можно использовать команду :

В следующих разделах мы будем указывать каждую команду для обоих случаев: пароля и ключевого файла. Конечно, необходим только один метод.

Создание платформы зашифрованного хранилища
Чтобы создать платформу защищённого хранилища (которое может быть диском, разделом, файлом, ...) вызовите команду с параметром.

For instance, to have as the storage medium for the encrypted data:

To use a keyfile instead of a passphrase:

The  tells  which keylength to use for the real encryption key (unlike the passphrase or keyfile, which are used to access this real encryption key).

Открытие зашифрованного хранилища
In order to open up the encrypted storage (i.e. make the real data accessible through transparent decryption), use the  action.

If a keyfile is used, then the command would look like so:

When the command finishes successfully, then a new device file called will be made available.

If this is the first time this encrypted device is used, it needs to be formatted. The following example uses the Btrfs file system but of course any other file system will do:

Once the file system is formatted, or the formatting was already done in the past, then the device file can be mounted on the system:

Закрытие зашифрованного хранилища
In order to close the encrypted storage (i.e. ensure that the real data is no longer accessible through transparent decryption), use the  action:

Of course, make sure that the device is no longer in use.

Manipulating LUKS keys
LUKS keys are used to access the real encryption key. They are stored in slots in the header of the (encrypted) partition, disk or file.

Listing the slots
With the  action, information about the encrypted partition, disk or file can be shown. This includes the slots:

In the above example, two slots are used. Note that  does not give away anything sensitive - it is merely displaying the LUKS header content. No decryption key has to be provided in order to call.

Adding a keyfile or passphrase
In order to add an additional keyfile or passphrase to access the encrypted storage, use the  action:

To use a keyfile to unlock the key (but still add in a passphrase):

If a keyfile is to be added (say ):

Or, to use the first keyfile to unlock the main key:

Removing a keyfile or passphrase
With the  action, a keyfile or passphrase can be removed (so they can no longer be used to decrypt the storage):

Or to remove a keyfile:

Make sure that at least one method for accessing the data is still available. Once a passphrase or keyfile is removed for use, this cannot be recovered again.

Emptying a slot
Suppose the passphrase or keyfile is no longer known, then the slot can be freed. Of course, this does require prior knowledge of which slot that the passphrase or keyfile was stored in.

For instance, to empty out slot 2 (which is the third slot as slots are numbered starting from 0):

This command will ask for a valid passphrase before continuing. Or one can pass on the keyfile to use:

Automate mounting encrypted file systems
Until now, the article focused on manual setup and mounting/unmounting of encrypted file systems. An init service exists which automates the decrypting and mounting of encrypted file systems.

Configuring dm-crypt
Edit the file and add in entries for each file system. The supported entries are well documented in the file, the below example is just that - an example:

Configuring fstab
The next step is to configure to automatically mount the (decrypted) file systems when they become available. It is recommended to first obtain the UUID of the decrypted (mounted) file system:

Then, update the file accordingly:

Add initscript to bootlevel
Don't forget to have the init service launched at boot:

Дополнительные ресурсы

 * Dm-crypt full disk encryption on the Gentoo Wiki provides supplementary information on using encrypted file systems for Gentoo Linux installations
 * The cryptsetup FAQ hosted on GitLab covers a wide range of frequently asked questions.