Как надежно зашифровать файлы в Linux с помощью Dm-crypt ?

Зашифровать файлы в Linux с помощью Dm-crypt

Хотите спрятать свои данные от посторонних глаз? Мы научим вас приемам шифрования жёсткого диска.

За последний год тема безопасности интернет-данных всплывала часто: сначала в связи с откровениями Сноудена, потом — с уязвимостью в OpenSSL (Heartbleed bug). Незадолго до последней была обнаружена и менее заметная ошибка в GnuTLS. В результате мы стали уделять больше внимания безопасности удалённых данных; но как насчёт тех, что хранятся у нас на диске?

Ранее мы рассматривали TrueCrypt, которая отлично подходит для шифрования съемных носителей, в особенности потому, что доступна и для Windows, и для Маc, но при необходимости вы можете зашифровать и всю свою домашнюю папку, или даже весь диск. Речь не только о том, как защититься от взломщиков-хакеров: что если ноутбук с вашей личной, деловой или другой конфиденциальной информацией будет потерян или украден?

Ядро Linux поддерживает два популярных типа шифрования, dm-crypt и ecryptfs. Второй — это зашифрованная файловая система, являющаяся «надстройкой» над стандартной. Смонтировав «нижнюю» файловую систему, вы увидите все файлы, но их содержание, как и имена, будут представлены в шифрованном виде. Работает она на уровне каталога, так что прочие каталоги на той же файловой системе можно оставить в открытом виде или зашифровать отдельно. Этот метод, среди прочих, используется в Ubuntu, для шифрования домашних папок пользователей.

Другой метод, который нам хотелось бы рассмотреть подробнее, называется dm-crypt, и он работает на более низком уровне, обеспечивая шифрование блочного устройства, на котором расположена файловая система. Недавний тест, проведённый Phoronix, показал более высокую производительность в случае, когда диск был полностью зашифрован dm-crypt, чем при использовании ecryptfs на домашних каталогах.

Еще по теме: Средства шифрования для Linux

Стек блочных устройств

Прежде чем рассматривать шифрование, важно осознать, как работают блочные устройства. Они являются системными интерфейсами для устройств хранения данных, например, /dev/sda! Внутри блочного устройства находится аппаратный драйвер, например, SATA, и собственно оборудование. Затем операционная система взаимодействует с блочным устройством для создания на нем файловой системы.

Блочные устройства обычно рассматриваются именно в этом качестве, хотя у них есть и другие функции. В частности, подобное устройство может быть интерфейсом для ряда других блочных устройств — они могут составлять стек. И вы такое уже делали: у вас есть файловая система на /dev/sda1 (раздел диска), а это блочное устройство ссылается на /dev /sda (весь диск).

Такие технологии, как RAID и LVM (Logical Volume Management), также представляют собой стеки блочных устройств. У вас может быть LVM поверх массива RAID, который, в свою очередь, также расположен на блочных устройствах отдельных дисков или их разделов.

Шифрование всего устройства с помощью dm-crypt работает следующим образом: на базе вашего носителя информации создаётся блочное устройство, которое шифрует данные при сохранении и дешифрует при чтении. Затем вы монтируете стандартную файловую систему поверх зашифрованного устройства, и она функционирует так же, как и на обычном разделе диска.

Многие дистрибутивы можно установить на зашифрованный диск, но мы рассмотрим непосредственно создание и работу устройств dm-crypt, не касаясь чёрной магии, которую творит установщик. Dm-crypt использует подсистему ядра для отображения устройств [device mapper] для управления блочными устройствами криптографическими функциями ядра в целях шифрования.

Всё делается за счёт ядра, но на уровне пользователя нам необходимо программное обеспечение для создания устройств dm-crypt и управления ими; таким стандартным инструментом выступает cryptsetup. Вероятно, он уже установлен в вашем дистрибутиве; а если нет, то уж точно будет в основных репозиториях.

Шифрование

Cryptsetup может создавать два типа зашифрованных устройств: простые dm-crypt и LUKS. Если вы знаете, как пользоваться простыми dm-crypt, то вы знаете о шифровании больше, чем мы сможем здесь рассказать; поэтому мы остановимся только на LUKS, которые в большинстве случаев являются лучшим вариантом. Экспериментировать с файловыми системами, шифрованными или нет, значит в процессе обучения рисковать данными на диске.

Как с помощью Dm-crypt надежно зашифровать файлы в Linux?
Запустив cryptsetup -help, вы увидите список не только доступных команд, но также хэшей и шифров.

Во всех примерах мы используем /dev/sdb, который, как мы полагаем, является внешним или иным запасным устройством (имеющим резервную копию) — но не пытайтесь ничего менять на своём системном диске, пока не разберётесь как следует. Все эти команды должны быть запущены с правами администратора, поэтому войдите в терминал от имени root через su, или перед каждой командой добавляйте sudo.

Для начала создадим зашифрованное устройство: cryptsetup luksFormat /dev/sdb1 После запроса на ввод пароля создастся шифрованный раздел на /dev/sdb1. Вы можете открыть зашифрованное устройство с помощью

cryptsetup luksOpen /dev/sdb1 name Вновь последует запрос пароля, а затем в /dev/mapper создастся устройство с именем, заданным в командной строке. Далее /dev/mapper/name можно использовать как любое блочное устройство:

mkfs.ext4 /dev/mapper/name mount /dev/mapper/name/ /mnt/encrypted Для паролей действуют обычные правила: они должны быть длинными и вариативными, чтобы их было трудно угадать, но легко запомнить. Утратив пароль, вы теряете содержимое устройства.

Dm-crypt надежно зашифровать файлы в Linux
По cryptsetup luksDump можно получить информацию о зашифрованном разделе LUKS. Там же находятся команды резервного копирования и восстановления, чтобы продублировать информацию LUKS.

Безопасное хранение ключей

Устройство, зашифрованное LUKS, содержит восемь ключевых слотов. Ключи — то же, что и пароли, и их можно назначить несколько на одно устройство, что актуально при наличии нескольких систем, когда вы хотите иметь мастер-пароль, который знаете только вы. При использовании LuksFormat пароль хранится в слоте 0, затем вы можете добавить ещё, используя cryptsetup luksAddKey /dev/sdb1 Вам предложат ввести текущий пароль, а затем новый.

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

dd if=/dev/urandom of=/path/to/keyfile bs=1k count=4 chmod 0400 /path/to/keyfile cryptsetup luksAddKey/dev/sdb1 /path/to/keyfile cryptsetup luksOpen -key-file /path/to/keyfile /dev/sdb1 name

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

Дополнительные опции

До сих пор мы разбирались с вариантами шифрования по умолчанию, но cryptsetup включает также опции -hash и -cipher. Первая определяет способ хэширования паролей, а вторая задаёт метод шифрования.

Значений по умолчанию, как правило, более чем достаточно, а все доступные опции можно просмотреть с помощью cryptsetup -help Эти параметры необходимы только с LuksFormat. При создании защищенного устройства cryptsetup автоматически использует правильные настройки для его открытия.

Лучше всего придерживаться популярных шифров и хэшей, если только у вас нет более веской причины выбрать что-то другое. У методов, используемых реже, могут быть скрытые недостатки, просто потому, что они менее протестированы, что и произошло недавно с реализацией хэша Whirlpool в библиотеке libcgrypt, используемой cryptsetup. При внесении исправлений пострадали те системы, где уже использовались дефектные хэши.

Еще одна причина придерживаться общепринятых методов — портативность. Для внутреннего диска это не важно, но если вы хотите использовать шифрованный диск на другой системе, там тоже должны быть установлены те же хэши и шифры.

LUKS

LUKS — Linux Unified Key Setup был создан ради предоставления стандартного, кросс-платформенного (несмотря на название) формата хранения шифрованных данных на дисках. Он касается не методов шифрования, а способа хранения информации о них.

Он также является более надёжным способом хранения ключей или паролей, так как метод с dm-crypt подвержен взлому. Поскольку LUKS кроссплатформенный, доступ к зашифрованным устройствам можно получить и из Windows, с помощью FreeOTFE.

ВКонтакте
OK
Telegram
WhatsApp
Viber

Один комментарий

  1. Jegor

    каким образом dm-crypt подвержен взлому? Где пруфы?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *