Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

Сегодня хранить важные данные в открытом виде стало как никогда опасно. И даже не столько из-за государственной слежки (захотят - найдут, к чему придраться, и так), сколько из-за желающих эти данные похитить. В принципе, для защиты информации имеется множество методов, но в статье будет описаны именно криптографические средства.


В отличие от некоторых других операционных систем, в Linux имеется множество средств для криптографической защиты информации - от шифрования почтовых переписок до шифрования файлов и блочных устройств. Нас интересует именно шифрование на уровне файловых систем, файлов и блочных устройств. Для начала стоит разобраться, в чем разница. Шифрование на уровне файловых систем предполагает наличие прослойки между основной файловой системой (если, конечно, файловая система сама по себе не поддерживает шифрование) и пользователем.

Преимущество у данного типа шифрования - то, что ключи для всех пользователей разные. Недостаток же - если включить шифрование имен файлов, длина допустимого имени уменьшится, кроме того, пользователь может сохранить файл в иное место на диске, что автоматически нивелирует пользу. И еще одно но - даже если включено шифрование имен, временные метки останутся прежними. Шифрование блочных устройств происходит на более низком уровне, под файловой системой. При этом сама файловая система, разумеется, не знает, что она находится на шифрованном томе.

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

В статье будет описана настройка следующих методов криптозащиты:
dm-crypt/LUKS - создание криптоконтейнера с помощью device-mapper и CryptoAPI ядра;
eCryptfs - шифрование на уровне файловых систем;
EncFS - аналогично описанному выше, но не требует загрузки модулей ядра.

DM-CRYPT/LUKS
Существует два вида настройки dm-crypt - plain и LUKS. Отличие в том, что в случае использования LUKS в начале криптотома присутствуют метаданные, позволяющие использовать несколько ключей и изменять их. В то же время наличие подобного заголовка в некоторых случаях само по себе компрометирующе - впрочем, в большинстве подобных случаев будет компрометирующей и область с высокой степенью энтропии. Настройка plain dm-crypt с файлом ключа и парольной фразой Посмотрим, как настроить комбинацию из тома plain dm-crypt, зашифрованного с помощью ключевого файла, в свою очередь содержащегося в LUKS-контейнере. Для начала стоит определиться, как именно будут размещаться разделы. Существует три основных варианта:
просто крипто-том;
сперва крипто-том, затем поверх него LVM;
сперва крипто-том, затем RAID, затем LVM.

И всяческие комбинации. Давай попробуем второй вариант. Первым делом создадим контейнер LUKS для хранения ключевого файла, чтобы использовать этот файл вместе с ключевой фразой. В этом случае вероятность криптоанализа тома, зашифрованного с помощью plain dm-crypt, снижается:

# dd if=/dev/zero of=/root/key.luks bs=512 count=2057

# cryptsetup --align-payload=1 luksFormat /root/key.luks

# cryptsetup luksOpen /root/key.luks cryptokey

# dd if=/dev/urandom of=/dev/mapper/cryptokey

Первая команда подготавливает файл контейнера, вторая этот контейнер создает, третья подключает, четвертая генерирует ключевую информацию. Стоит заметить, что опция –align-payload=1 нужна для того, чтобы размер метаданных LUKS составлял не 4096 512-байтовых блоков, а всего лишь 2056. Таким образом, на собственно ключевую информацию остается 512 байт.
Затем переходим к созданию криптотома. На этом этапе по желанию можно также заполнить диск псевдослучайными данными, чтобы затруднить криптоанализ, если он будет. Затем уже можно создавать криптотом. Команда для этого выглядит следующим образом (естественно, в иных случаях идентификаторы могут отличаться, так что нужно быть внимательным):

# cryptsetup --cipher=serpent-xts-plain64 --offset=0--key-file=/dev/mapper/cryptokey --key-size=512 open --type=plain/dev/disk/by-id/ata-VBOX_HARDDISK_VB05eadebe-f25e8d59 crypto0


При необходимости надо повторить аналогичную команду и на других устройствах, для которых требуется шифрование. Затем создадим на криптотомах LVM и ФС на нем:

Создадим файл /etc/initramfs-tools/hooks/cryptokeys примерно следующего содержания (служебная часть скрипта опущена):

И файл /etc/initramfs-tools/scripts/local-top/cryptokeys (служебная часть опять
же опущена):

# <...>

modprobe - b dm_crypt

while ! (/ sbin / cryptsetup luksOpen / etc / crypto / key . luks cryptokey

/ dev / disk / by - id / ata - VBOX_HARDDISK_VB05eadebe - f25e8d59 crypto0

&& / sbin / cryptsetup plainOpen -- key - file = / dev / mapper / cryptokey

/ dev / disk / by - id / ata - VBOX_HARDDISK_VBc2414841 - cfeccde5 crypto1

&& / sbin / cryptsetup luksClose cryptokey

) ; do

echo “Try again . . . ”

done

Эти два файла должны быть исполняемыми. Затем создаем initrd:

# update-initramfs -u -k all -v

При следующей перезагрузке будет запрошен пароль для LUKS-контейнера. В случае использования plain dm-crypt есть еще одна возможность - общий нижний слой, что позволяет сделать нечто наподобие скрытых томов TrueCrypt. Проще привести пример:

# cryptsetup --cipher=serpent-xts-plain64 --offset=0--size=2097152 --shared open --type=plain/dev/disk/by-id/ata-VBOX_HARDDISK_VBcda8398f-f1f1deec crypto

# cryptsetup --cipher=serpent-xts-plain64 --offset=2097152--size=2097152 --shared open --type=plain/dev/disk/by-id/ata-VBOX_HARDDISK_VBcda8398f-f1f1deec crypto_shared

Размер и смещение указываются в 512-байтовых блоках.


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

Наконец, добавляем новый ключ в систему:

Рассмотрим и процедуру восстановления томов LUKS. Самый простой вариант, разумеется, когда есть копия заголовка. В этом случае для восстановления требуется всего одна команда:

Самая длинная непрерывная строчка и будет мастер-ключом. Ее нужно скопировать в файл на нешифрованный том и после этого преобразовать в бинарную форму (перед этим следует убедиться, что в данном файле нет никаких
символов конца строки):

ENCFS
Посмотрим, как настроить EncFS для автоматического монтирования при входе в систему. Для начала поставим нужные пакеты:

При настройке в режиме эксперта будет задан ряд вопросов: тип шифра (доступны только AES и Blowfish), размер ключа, размер блока, как шифровать имена файлов - блочное шифрование (которое полностью скрывает имя файла, в том числе длину), потоковое (которое шифрует с максимально близкой длиной, что иногда удобно, если имена чересчур длинные и при использовании блочного шифра есть достаточно большая вероятность превысить максимально допустимую длину) или вовсе будет отсутствовать… В конце будет запрошен пароль, он должен совпадать с используемым для входа, в противном случае автомонтирование работать не будет.

Следом нужно отредактировать файл /etc/security/pam_encfs.conf:

И файл /etc/fuse.conf:

И добавим пользователя в группу fuse:

$ sudo usermod - a - G fuse $ USER

После выхода-входа каталог private можно будет использовать как хранилище для личных данных. Стоит, однако, отметить, что аудит выявил некоторые (достаточно серьезные) проблемы с безопасностью, из-за чего данную систему крайне не рекомендуется использовать для хранения действительно важных данных.

ECRYPTFS
Известно, что eCryptFS применяется в Ubuntu как средство по умолчанию для защиты домашних каталогов. Посмотрим, как оно работает, - создадим шифрованный каталог вручную. Установим пакеты:

СозданиеeCryptFS

И смонтируем ФС (при первом монтировании создаются все необходимые метаданные):

$ sudo mount - t ecryptfs / home / rom / . secret / home / rom / secret

Будет запрошена парольная фраза (всего один раз, повторный ввод не реализован, что выглядит не очень хорошим решением, учитывая, что она должна быть длинной), затем будет запрошен тип шифра (AES, Blowfish, 3DES, Twofish, CAST6 и CAST5), размер ключа, задан вопрос, разрешить или запретить нешифрованные файлы в каталоге с зашифрованными, шифровать ли имена файлов… и в финале спросит, действительно ли желаем подмонтировать и сохранить ли сигнатуру в определенный файл. Вопрос не настолько глупый, как может показаться сначала: в данном ПО при отсутствии сигнатуры не существует возможности отличить правильный пароль от неправильного.

Шифрование домашнего каталога пользователя

Во время первого запуска может понадобиться завершить несколько процессов. После шифрования необходимо немедленно зайти под пользователем, при этом будет предложено записать или распечатать парольную фразу, сгенерированную для шифрования и защищенную, в свою очередь, пользовательским паролем. Это необходимо для восстановления в случае нештатной ситуации.


Предупреждение о необходимости запомнить парольную фразу

Посмотрим, как его восстанавливать. Предположим, что парольная фраза не записана и восстановление идет с Live CD. Подразумевается, что ФС подмонтирована. Переходим в каталог home/.ecryptfs/rom/.ecryptfs и набираем команду:

dm-verify
Модуль dm-verify предназначен для проверки целостности блочных устройств. Верификация ведется с помощью hash tree, где «листья» - хеш-суммы блоков, а «ветви» - хеш-суммы наборов «листьев». Таким образом, для верификации блочного устройства (будь то раздел или диск) достаточно проверить всего одну контрольную сумму.
Этот механизм (вкупе с цифровой подписью) применяется в некоторых Android-устройствах для защиты от модификации системных разделов, а также в Google Chromium OS.

ЗАКЛЮЧЕНИЕ
Linux содержит действительно немало средств для криптографической защиты информации. Из трех описанных средств как минимум одно присутствует во всех современных дистрибутивах Linux. Но что же выбрать?
dm-crypt/LUKS стоит применять в тех случаях, когда есть возможность быстро отключить зашифрованный том и когда резервные копии либо не нужны, либо засекречиваются иным путем. В этом случае данное решение более чем эффективно, особенно с учетом того, что шифровать можно каскадом произвольной вложенности и типа (например, AES-Twofish-AES), - настоящий рай
для параноиков.
eCryptFS подходит в тех случаях, когда нужно шифрованные данные куда-то сохранять - к примеру, в облако. Она обеспечивает довольно надежноешифрование (хотя в 128-битном варианте, используемом по умолчанию, есть возможность снижения криптостойкости на два бита) и для конечного пользователя прозрачна.
EncFS же - старичок примерно десятилетней давности, базирующийся на еще более древних работах. К настоящему времени не рекомендован к использованию из-за потенциальных дыр в безопасности, но может применяться в качестве кросс-платформенного средства для защиты несенситивных данных в облаках.

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

Имейте в виду, автор данного труда рассказывает о методах шифрования разделов диска, которые использует сам, при .

Linux

В данном руководстве используется Linux dm-crypt (device-mapper ) на ядре 2.6 . Шифровать будем раздел /dev/sdc1 , это может быть любой раздел, диск, USB или файл, созданный losetup . Здесь мы будем использовать /dev/loop0 , смотрите . Device mapper использует метку для идентификации раздела, в данном примере sdc1 , но это может быть любая другая строка.

Шифрование разделов диска с помощью LUKS

LUKS с dm-crypt очень удобен для шифрования разделов диска, он позволяет иметь несколько паролей для одного раздела а так-же с легкостью менять их. Что-бы проверить доступно-ли у вас использование LUKS , наберите: cryptsetup --help , если насчет LUKS ничего не появилось, читайте ниже "dm-crypt без LUKS ". Для начала создайте раздел, если необходимо fdisk /dev/sdc .

Как создать зашифрованный раздел

# dd if=/dev/urandom of=/dev/sdc1 # Опционально. Только для параноиков # cryptsetup -y luksFormat /dev/sdc1 # Это уничтожит все данные на sdc1 # cryptsetup luksOpen /dev/sdc1 sdc1 # mkfs.ext3 /dev/mapper/sdc1 # Будет создана файловая система ext3 # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt # cryptsetup luksClose sdc1
Монтировать
# cryptsetup luksOpen /dev/sdc1 sdc1 # mount -t ext3 /dev/mapper/sdc1 /mnt
Размонтировать
# umount /mnt # cryptsetup luksClose sdc1

dm-crypt без LUKS

# cryptsetup -y create sdc1 /dev/sdc1 # Или любой другой раздел, типа /dev/loop0 # dmsetup ls # Проверить, покажет: sdc1 (254, 0) # mkfs.ext3 /dev/mapper/sdc1 # Только если делается впервые! # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt/ # cryptsetup remove sdc1 # Отсоединить зашифрованный раздел Делайте тоже самое, (без создания fs), что-бы переподключить раздел. При вводе некорректного пароля команда mount не будет выполнена. В таком случае просто удалите отображение sdc1 (cryptsetup remove sdc1 ) и создайте по новой.

FreeBSD

Пара популярных модулей для шифрования дисков в , это gbde и geli . Geli более быстрый т.к использует аппаратное ускорение. Смотрите FreeBSD handbook Chapter 18.6 для более подробного описания. Для работы, geli должен быть загружен как модуль ядра, или встроен в него на стадии компиляции. options GEOM_ELI device crypto # Или загрузить в качестве модуля ядра: # echo "geom_eli_load="YES"" >> /boot/loader.conf # Или kldload geom_eli

Использование пароля и ключа

Автор пользуется данными настройками для типичного шифрования разделов, он использует пароль и ключ для шифрования "Master key - основного ключа". Что-бы смонтировать зашифрованный раздел, понадобится и пароль и ключ /root/ad1.key . "Master key " хранится вутри раздела и невидим. Следующий пример типичен для USB или файлового образа.

Создаем шифрованный раздел

# dd if=/dev/random of=/root/ad1.key bs=64 count=1 # Этот ключ шифрует Master key # geli init -s 4096 -K /root/ad1.key /dev/ad1 # -s 8192 и OK для дисков # geli attach -k /root/ad1.key /dev/ad1 # DO создает резервную копию /root/ad1.key # dd if=/dev/random of=/dev/ad1.eli bs=1m # Опционально и занимает много времени # newfs /dev/ad1.eli # Создать файловую систему # mount /dev/ad1.eli /mnt # Монтирование шифрованного раздела
Attach
# geli attach -k /root/ad1.key /dev/ad1 # fsck -ny -t ffs /dev/ad1.eli # Если есть сомнения, проверьте файловую систему # mount /dev/ad1.eli /mnt
Detach
Процедура размонтирования производится автоматически при выключении. # umount /mnt # geli detach /dev/ad1.eli
/etc/fstab
Монтирование шифрованного раздела можно сконфигурировать через /etc/fstab . Пароль будет запрошен при загрузке. # grep geli /etc/rc.conf geli_devices="ad1" geli_ad1_flags="-k /root/ad1.key" # grep geli /etc/fstab /dev/ad1.eli /home/private ufs rw 0 0

Только по паролю

Это более подходящий способ для шифрования флэшки или образа на основе файла, запрашивается только пароль. В данном случае не нужно волноваться о файлах ключей. Процедура напоминает вышеописанную, за исключением создания файлов ключей. Зашифруем образ размером 1 Гб, созданный из файла /cryptedfile . # dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # Создаем 1Гб файл # mdconfig -at vnode -f /cryptedfile # geli init /dev/md0 # Зашифровать только по паролю # geli attach /dev/md0 # newfs -U -m 0 /dev/md0.eli # mount /dev/md0.eli /mnt # umount /dev/md0.eli # geli detach md0.eli Теперь этот образ можно примонтировать на другую машину, просто введя пароль. # mdconfig -at vnode -f /cryptedfile # geli attach /dev/md0 # mount /dev/md0.eli /mnt

: - Русский

Активная разработка страницы завершена

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

Шифрование данных в Debian

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

Шифрование при помощи cryptsetup

Установим необходимые компоненты:

# apt-get install cryptsetup

Стандартный синтаксис

/dev/sda2 . Введем команду:

# cryptsetup create sda2_crypt /dev/sda2

Данная команда создаст шифрованное подключение к нашему диску. В каталоге /dev/mapper появится новое устройство с запрошенным нами именем: /dev/mapper/sda2_crypt , обращаясь к которому мы используем шифрованный доступ к диску. В случае с LUKS имя будет /dev/mapper/sda2_crypt

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

# dd if=/dev/sda2 of=/dev/mapper/sda2_crypt

Если же создается новый диск на пустом разделе, то можно отформатировать его:

# mkfs.ext3 /dev/mapper/sda2_crypt

В последствии можно будет смонтировать этот диск куда угодно:

# mount /dev/mapper/sda2_crypt /path/to/mount/point

Проверить целостность данных (как обычно, лучше использовать только в размонтированном состоянии):

# fsck.ext3 /dev/mapper/sda2_crypt

И даже расшифровать обратно, если мы больше не хотим использовать шифрование:

# dd if=/dev/mapper/sda2_crypt of=/dev/sda2

LUKS синтаксис

Вышеуказанные действия можно выполнить в соответствии со стандартом LUKS

Инициализируем раздел:

cryptsetup luksFormat /dev/sda2

Подключаем в систему:

cryptsetup luksOpen /dev/sda2 sda2_crypt

Форматируем:

mkfs.ext4 -v -L DATA /dev/mapper/sda2_crypt

Монтируем:

mount /dev/mapper/sda2_crypt /mnt/data

Раздел можно вручную отключить о системы

cryptsetup luksClose sda2_crypt

Подключение при запуске

Для этой цели используется файл crypttab .

Для нашего диска пропишем в него следующую строку:

nano /etc/crypttab # имя mapper устройство ключ параметры/опции # При стандартном синтаксисе sda2_crypt /dev/sda2 none aes-cbc-plain:sha256 # и\или под стандарту LUKS sda2_crypt /dev/sda2 none luks

По умолчанию используется шифрование по паролю введенному пользователем. Таким образом каждый раз когда Вы загружаете Ваш компьютер система будет спрашивать каждый раз у Вас пароль для подключения каждого зашифрованного раздела. Даже если в fstab эти разделы не прописаны.

Если хотим монтировать вручную, то добавляем опцию noauto в поле "параметры/опции".

Подключение шифрованного раздела вручную по данным из /etc/crypttab

cryptdisks_start msda2_crypt

И отключение с заранее отмонтированной фс.

cryptdisks_stop sda2_crypt

Для автоматического монтирования фс на подключённом зашифрованном разделе добавляем строку в /etc/fstab

/dev/mapper/sda2_crypt /mnt/data ext4 defaults 0 0

Работа с ключами в LUKS

Раздел LUKS поддерживает 8 различных ключей, каждый из которых помещается в свой слот.

Cмотрим список используемых ключей

cryptsetup luksDump /dev/sda2

В LUKS могут использоваться 2 вида ключей – ключевые фразы и файлы.

Можно добавить ключевую фразу

cryptsetup luksAddKey /dev/sda2

Можно добавить ключевой файл (2048 bit) и выставить права доступа к нему.

dd if=/dev/urandom of=/root/ext2.key bs=512 count=4 cryptsetup luksAddKey /dev/sda2 /root/ext2.key chmod 400 /root/sda2.key cryptsetup -d /root/sda2.key luksOpen /dev/sda2 sda2_crypt

Для подключения при запуске по ключу правим /etc/crypttab

nano /etc/crypttab sda2_crypt /dev/sda2 /root/sda2.key luks

Можно удалить ключевую фразу или ключ из раздела

cryptsetup luksKillSlot /dev/sda2 1

Аварийное монтирование в "чужом" дистрибутиве

От проблем никто не застрахован и иногда нужно получить доступ к зашифрованному разделу из аварийного LiveCD диска.

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

cryptsetup luksOpen /dev/sda2 sda2_crypt mount -t ext4 /dev/mapper/sda2_crypt /mnt/backup

После работы отмонтируем фс и отключим зашифрованный раздел от системы

umount /mnt/backup cryptsetup luksClose sda2_crypt

Сообщения об ошибках при выключении

Если корневой раздел зашифрован, то при выключении будет выдаваться сообщение

stopping early crypto disks... failed

Это техническая ошибка. При выключении в первую очередь всегда демонтируется файловые системы и лишь потом происходит отключение раздела. В итоге получается что утилита cryptsetup находящаяся на корневом отмонтированном разделе уже недостуна для запуска, о чём нам INIT и сообщает. Без костылей такую проблему не решить, т.к. для этого нужно рассматривать варианты с переносом cryptsetup в RAM диск

Аналогичная ситуация складыватеся и при использовании программного RAID содержащего корневой раздел. 8)

Шифрование при помощи модуля loop-aes

Шифрование раздела винчестера, флешки с помощью пароля

В данном howto описан метод шифрования AES256 , другие методы можно применять аналогично (заменив название метода на соответствующее). Нам понадобятся следующие пакеты:

# apt-get install loop-aes-utils loop-aes-modules-`uname -r`

Примечание : если Вы используете ядро для которого в репозитарии нет нужного loop-aes-modules, Вы можете установить модули следующими командами:

# apt-get install module-assistant loop-aes-source # module-assistant a-i loop-aes

Начальный этап

На начальном этапе мы готовим диск к тому чтобы работать с ним, используя шифрование.

Выберем раздел диска (или флешки) который мы хотим зашифровать, например это будет /dev/sda2 . Введем команду:

# losetup -e AES256 -T /dev/loop0 /dev/sda2

После выполнения данной команды, все обращения к девайсу /dev/loop0 будут шифроваться и в шифрованном виде перенаправляться в девайс /dev/sda2 . Теперь мы имеем одновременно шифрованный и нешифрованный каналы к устройству хранения данных. Шифруются данные при помощи пароля который вы указали при выполнении losetup.

Теперь мы можем например отформатировать девайс:

# mkfs.ext3 /dev/loop0

Можем смонтировать его:

# mount /dev/loop0 /path/to/mount

можем отключить шифрование:

# losetup -d /dev/loop0

и самое главное, можем зашифровать раздел без потери данных :

# dd if=/dev/sda2 of=/dev/loop0

а так же расшифровать, если решаем что шифрование не наш метод:

# dd if=/dev/loop0 of=/dev/sda2

Ну и самое приятное, мы можем делать проверки файловой системы на целостность:

# fsck.ext3 /dev/loop0

Данная возможность доступна далеко не во всех методах шифрования разделов.

Повседневное использование

Если у Вас уже была запись о разделе /dev/sda2 в Вашем /etc/fstab , то Вам нужно просто добавить опции, а если не было то прописать примерно следующее:

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256 0 0

Теперь при загрузке операционной системы у Вас будет запрошен пароль для монтирования.

Если Вы не хотите чтобы процесс загрузки прерывался запросом пароля, то можно добавить опции noauto ,user в запись /etc/fstab :

/dev/sda2 /path/to/mount ext3 loop,encryption=AES256,noauto,user 0 0

Разумеется можно монтировать вручную (или из скрипта):

# mount /dev/sda2 /path/to/mount -o loop,encryption=AES256

Монтирование нескольких файловых систем

Иногда хочется зашифровать одновременно несколько разделов с данными, но так чтобы не вводить море паролей на каждый mount . Например у Вас есть флешка, которую вы таскаете из дома на работу, переносной винчестер и т.п. Или же просто несколько разделов/винчестеров.

Допустим мы имеем зашифрованный раздел /dev/sda2 , который мы при каждой загрузке монтируем в каталог /mnt1 . Появился новый винчестер /dev/sdb1 и мы хотим чтобы он автоматически монтировался в каталог mnt2 при монтировании первого. Можно конечно создать общую систему на чем-то вроде LVM , однако можно и более простым путем пойти:

прописываем в fstab примерно следующую строку:

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0 /dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,cleartextkey=/mnt1/key.txt 0 0

Система при загрузке монтирует точки в том же порядке, который описан в fstab , таким образом, если первый раздел не будет смонтирован, то ключ для монтирования второго раздела останется недоступным и второй раздел так же не будет смонтирован.

Пароль хранится в виде plain/text это конечно не очень красиво, но он хранится на зашифрованном разделе (который можно и отмонтировать). Можно вместо этого использовать gpg -ключ, однако много безопасности это не добавит (если уж смогут спереть ключ, то большой разницы какой этот ключ не будет), вариант шифрования с gpg -ключом описан в man losetup , здесь я лишь приведу пример записи в fstab :

/dev/sda2 /mnt1 ext3 noatime,exec,loop,encryption=AES256 0 0 /dev/sdb1 /mnt2 ext3 noatime,exec,loop,encryption=AES256,gpgkey=/mnt1/key.gpg 0 0

Примечания

Дополнительную информацию о поддерживаемых алгоритмах шифрования смотри в man losetup , там же можно посмотреть описание других опций программы losetup .

Если у Вас возникнут проблемы при установке модулей AES, то читайте документацию идущую с пакетом loop-aes-source .

GRUB и шифрованный корневой диск

При установке корневого раздела на зашифрованный диск GRUB может в главном меню показывать кракозябры. Это происходит из-за недоступности стандартного шрифта /usr/share/grub/unicode.pf2. Копируем шрифт

cp /usr/share/grub/unicode.pf2 /boot/grub/

Указываем настройку

nano /etc/default/grub GRUB_FONT=/boot/grub/unicode.pf2

Применяем настройку:

update-grub
Автор: Nitish Tiwari
Дата публикации: 04 febriary 2015
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.

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

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

В мае этого года остановилась разработка приложения TrueCrypt, известного инструментального средства с открытым исходным кодом, предназначенного для шифрования дисков. Как многие из вас знают, это был один из весьма надежных инструментов, предназначенных для шифрования дисков. Прискорбно видеть исчезновение инструмента такого калибра, но величие мира с открытым исходным кодом таково, что есть несколько других инструментов с открытым исходным кодом, которые помогут вам достичь безопасности с помощью шифрования дисков, у которых, к тому же, есть много конфигурационных настроек. Мы рассмотрим два из них - dm-crypt и LUKS - в качестве альтернативы TrueCrypt для платформы Linux. Давайте начнем с краткого рассмотрения dm-crypt, а затем - LUKS.

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

Ресурсы

Шаг 01: Рассматриваем Dm-crypt

Название приложения dm-crypt является сокращением от device mapper- crypt (шифрование при отображении устройства). Как следует из названия, оно базируется на отображении устройств — фреймворке ядра Linux, предназначенном для отображения блочных устройств на виртуальные блочные устройства более высокого уровня. При отображении устройств можно пользоваться несколькими функциями ядра, такими как dm-cache (создает гибридные тома), dm-verity (предназначена для проверки целостности блоков, является частью Chrome OS) и также очень популярным Docker. Для криптографических целей в dm-crypt применяется фреймворк ядра Linux Crypto API.

Итак, если подвести итог, то приложение dm-crypt является подсистемой шифрования на уровне ядра, предлагающее прозрачное шифрование диска: это означает, что файлы доступными сразу после монтирования диска - для конечного пользователя нет видимой задержки. Чтобы шифровать с использованием dm-crypt вы можете просто указать один из симметричных шифров, режим шифрования, ключ (любого допустимого размера), режим генерации IV, а затем в /dev создать новое блочное устройство. Теперь при любой записи на это устройство будет происходить шифрование, а при чтении — расшифровка. Вы можете как и обычно смонтировать на этом устройстве файловую систему, либо можете использовать устройство dm-crypt для создания других конструкций, таких как RAID или том LVM. Таблица соответствия для dm-crypt задается следующим образом:

Здесь значение start-sector (начальный сектор), как правило, равно значению 0, значение size (размер) равно размеру устройства, указываемую в секторах, а target name является именем, которое вы хотите присвоить зашифрованному устройству. Таблица целевого отображения target-mapping table состоит из следующих разделов:

[<#opt_params> ]

Шаг 02: Рассматриваем LUKS

Как мы уже видели на предыдущем шаге, приложение dm-crypt может самостоятельно шифровать / расшифровывать данные. Но у него есть несколько недостатков - если приложением dm-crypt пользоваться непосредственно, то оно не будет создавать на диске метаданные, и это может стать серьезной проблемой в случае, если вы хотите обеспечить совместимость между различными дистрибутивами Linux. Кроме того, приложение dm-crypt не поддерживает использование несколько ключей, тогда как в реальных ситуация очень важно пользоваться несколькими ключами.

Именно по этим причинам на свет появилась методика LUKS (Linux Unified Key Setup — Унифицированная настройка ключей в Linux). LUKS является в Linux стандартом шифрования жестких дисков и стандартизация позволяет обеспечить совместимость различных дистрибутивов. Также поддерживается использование нескольких ключей и парольных фраз. В рамках такой стандартизации к зашифрованным данным добавляется заголовок LUKS и в этом заголовке присутствует вся информация, необходимая для настройки. Когда есть такой заголовок с данными, то пользователи могут легко перейти на любой другой дистрибутив. Сейчас в проекте dm-crypt рекомендуется использовать LUKS в качестве предпочтительного способа настройки шифрования диска. Давайте рассмотрим, как установить утилиту cryptsetup и как ее использовать для создания томов на основе LUKS.

Шаг 03: Установка

Функциональные возможности уровня ядра, которые применяются в dm-crypt, уже есть во всех дистрибутивах Linux; нам нужно к ним только интерфейс. Мы будем пользоваться утилитой cryptsetup, с помощью которой можно создавать тома с использованием dm-crypt, стандарта LUKS, а также старого и доброго приложения TrueCrypt. Для того, чтобы установить cryptsetup на дистрибутивах Debian / Ubuntu, вы можете воспользоваться следующими командами:

$ sudo apt-get update $ sudo apt-get install cryptsetup

Первая команда синхронизирует индексные файлы ракета с содержимым их репозиториев: она получает информацию о последних версиях всех доступных пакетов. Вторая команда загрузит и установит на ваш компьютер пакет cryptsetup. Если вы используете дистрибутив RHEL/Fedora/CentOS, то для установки утилиты cryptsetup вы можете воспользоваться командой yum.

$ yum install cryptsetup-luks

Шаг 04: Создание целевого файла

Теперь, когда утилита cryptsetup успешно установлена, мы должны создать целевой файл, в котором будет храниться контейнер LUKS. Хотя есть много способов создания такого файла, при его создании необходимо выполнить ряд условий:

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

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

$ dd if=/dev/random of=/home/nitish/basefile bs=1M count=128

В результате в каталоге /home/nitish будет создан файл с именем basefile, имеющий размер в 128 МБ. Однако, учтите, что на выполнение этой команды может потребоваться достаточно большое время; в системе, которой пользовался наш эксперт, на это потребовался час времени.

Шаг 05: Создаем dm-crypt LUKS

После того, как вы создали целевой файл, в этом файле необходимо создать раздел LUKS. Этот раздел служит в качестве основного слоя, на базе которого строится все шифрование данных. Кроме этого, в заголовке этого раздела (LUKS header) содержится вся информация, требуемая для совместимости с другими устройствами. Чтобы создать раздел LUKS применяется команда cryptsetup:

$ cryptsetup -y luksFormat /home/nitish/basefile

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

$ file basefile

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

Шаг 06: Создаем и монтируем файловую систему

Контейнер LUKS, который мы создали на предыдущем шаге, теперь доступен в виде файла. В нашем примере, это /home/nitish/basefile. Утилита cryptsetup позволяет открывать контейнер LUKS как независимое устройство. Чтобы сделать это, сначала отобразите файл контейнера на имя устройства, а затем смонтируйте устройство. Команда, осуществляющая отображение, выглядит следующим образом:

После того как вы успешно введете парольную фразы, созданную на предыдущем шаге, контейнер LUKS будет отображен на имя volume1. Фактически происходит открытие файла как локального устройства типа loopback, так что остальная часть системы теперь может обрабатывать файл, как если бы это было реальное устройство.

Шаг 07: Файловая система - продолжение

Файл контейнера LUKS теперь доступен в системе в виде обычного устройства. Прежде, чем мы сможем использовать его для обычных операций, мы должны его отформатировать и создать на нем файловую систему. Вы можете пользоваться любой файловой системой, которая поддерживается в вашей системе. В моем примере, мы использовали ext4, поскольку это самая новая файловая система для систем Linux.

$ mkfs.ext4 -j /dev/mapper/volume1

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

$ mkdir /mnt/files

Теперь выполняем монтирование:

Для перекрестной проверки воспользуйтесь командой df –h - вы в конце списка смонтированные устройств увидите устройство "/dev/mapper/volume1". Видно, что заголовок LUKS уже занимает в устройстве уже некоторое место.

Благодаря этому шагу, вы теперь можете использовать устройство LUKS с файловой системой ext4. Просто используйте это устройство для хранения файлов - все, что вы будет записывать на это устройство, будет шифроваться, а все, что вы будете читать с него, будет расшифровано и показано вам.

Шаг 08: Использование шифруемого диска

Мы выполнили несколько шагов для того, чтобы достичь этого результата, и если вам не очень понятно, как все это работает, вы, скорее всего, запутаетесь в том, что нужно сделать только один раз (требуется для установки), и в том, что нужно делать регулярно при использовании шифрования. Давайте рассмотрим следующий сценарий: вы успешно выполнили все описанные выше шаги, а затем выключили компьютер. На следующий день, когда вы запускаете ваш компьютер, вы не в состоянии найти смонтированное устройство - куда оно делось? Чтобы со всем этим разобраться, нужно иметь в виду, что после запуска системы нужно смонтировать контейнер LUKS, а перед остановкой компьютера - размонтировать.

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

Откройте файл LUKS (т.е. /home/nitish/basefile) и введите пароль. Команда выглядит следующим образом:

$ cryptsetup luksOpen /home/nitish/basefile volume1

После того, как файл будет открыт, смонтируйте его (если он не монтируется автоматически):

$ mount /dev/mapper/volume1 /mnt/files

Теперь вы можете использовать смонтированное устройство как обычный диск и читать с него или записывать на него данные.

После того, как все сделаете, размонтируйте устройство следующим образом:

$ umount /mnt/files

После успешного размонтирования, закройте файл LUKS:

$ cryptsetup luksClose volume1

Шаг 09: Резервное копирование

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

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

$ sudo cryptsetup luksHeaderBackup /home/nitish/basefile --header-backup-file /home/nitish/backupfile

Или, если вы хотите восстановить файл из резервной копии, то укажите в команде параметр luksHeaderRestore:

$ sudo cryptsetup luksHeaderRestore /home/ nitish/basefile --header-backup-file /home/nitish/backupfile

Для проверки файла заголовка LUKS и проверки того, что файл, с которым вы имеете дело, соответствует действительно существующему устройству LUKS, вы можете воспользоваться параметром isLuks.

$ sudo cryptsetup -v isLuks /home/nitish/basefile

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

$ cat /home/nitish/basefile > basefile.img

Шаг 10: Различные настройки

Есть несколько других настроек, которые при использовании шифрования dm-crypt LUKS могут оказаться полезными. Давайте их рассмотрим.

Чтобы сделать дамп заголовка LUKS, в команде cryptsetup есть параметр luksDump. Он позволит вам сделать снимок файла заголовка LUKS того устройства, которое вы используете. Пример команды выглядит следующим образом:

$ cryptsetup luksDump /home/nitish/basefile

В начале данной статьи мы упоминали о том, что LUKS поддерживает работу с несколькими ключами. Давайте сейчас это увидим в действии, добавив новый слот ключа (прим.пер.: слот ключа — место под ключ ):

$ cryptsetup luksAddKey --Key-slot 1 /home/nitish/basefile

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

Вы можете удалить слоты с ключами следующим образом:

$ cryptsetup luksRemoveKey /home/nitish/basefile

В результате будет удален слот с ключом с самым большим номером слота. Будьте аккуратны и не удаляйте все слоты, иначе ваши данные будут навсегда потеряны.

Шифрование домашнего каталога обеспечивает надежную защиту данных, хранящихся на жёстком диске или ином носителе. Шифрование особенно актуально на переносных ПК, на компьютерах с множественным доступом, а также в любых других условиях. Шифрование домашнего каталога предлагается при установке Linux Mint.

Основная загвоздка при полном шифровании домашнего каталога состоит в том, что необходимо «вынести» каталог с зашифрованными данными за пределы точки монтирования.

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

Не шифровать SWAP при шифрованном домашнем каталоге – потенциально опасно, так как там могут оказаться данные из шифрованных файлов в открытом виде – весь смысл шифрования теряется. Начиная с 14-ой версти Linux Mint, при установке есть возможность выбрать вариант шифрования всего диска. Этот вариант наиболее подходит для сохранения персональных данных на переносных устройствах (у которых, как правило, только один пользователь).

1.3 Шифрование в gnome – Seahorse

В Linux Mint есть встроенная утилита «Пароли и ключи» или же Seahorse. Используя её возможности пользователь может оперировать всеми ключами, паролями, а также сертификатами которые имеются в данной ОС.

По сути Seahorse – это приложение для GNOME (GNOME – свободная среда рабочего стола для Unix-подобных операционных систем), являющееся фронтэндом к GnuPG (свободная программа для шифрования информации и создания электронных цифровых подписей) и предназначенное для управления ключами шифрования и паролями. Пришел на замену GNOME Keyring, которого полностью заменил в GNOME 2.22, хотя был анонсирован еще в GNOME 2.18. Позволяет производить все операции которые ранее необходимо делать в командной строке и объединяя их под едиными интерфесом:

    управлять безопасностью своей рабочей среды и ключами OpenPGP и SSH;

    шифровать, расшировывать и проверять файлы и текст;

    добавлять и проверять цифровые подписи к документам;

    синхронизировать ключи с ключевыми серверами;

    создавать и публиковать ключи;

    резервировать ключевую информацию;

    добавлять к изображениями в любом поддерживаемом GDK как OpenGPG photo ID;

1.4 TrueCrypt

TrueCrypt обладает достаточно удобным графическим интерфейсом, но, к сожалению, разработчики жестко зашили в код интеграцию с файловым менеджером Nautilus.

Для шифрования данных можно использовать разные методы.

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

Создание зашифрованных разделов/файлов

Создание файл ключа:

truecrypt -create-keyfile /home/user/test/file , где file – название файла-ключа.

Создание контейнера, в данном случае раздела:

sudo truecrypt -k /home/user/test/file -c /dev/sda9

Вместо раздела /dev/sda9 вполне можно указать и файл, например /home/user/test/cryptofile, но в этом случае необходимо будет указать его размер, это делается параметром -size=5G до параметра -c. В указанном примере создастся файл cryptofile размером 5 Гбайт. Иногда TrueCrypt принимает размер только в байтах, для 5 Гбайт можно или высчитать значение заранее и указать -size=5368709120, или же записать следующим образом: -size=`echo 1024^3*5 | bc`.

Для шифрования будет использоваться сделанный уже файл-ключ.

При создании будет предложен выбор типа контейнера (нормальный / скрытый), файловой системы (FAT, ext2/3/4 или без ФС), в данном примере был выбран режим без использования ФС. Также будет предложен выбор алгоритма шифрования (например, AES), а так же hash-алгоритм (например, SHA-1) для шифрования потоков данных.

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

Шифрованный раздел/файл был создан. Теперь, если необходимо его внутреннюю файловую систему (далее ФС) отформатировать под нужную, следует сделать следующее.

Выбрать необходимый раздел используя Truecrypt:

truecrypt -k /home/user/test/file /dev/sda9

По умолчанию будет задействован созданный Truecrypt девайс /dev/mapper/truecrypt0. По обращению к этому девайсу, можно менять, например ФС в шифрованном контейнере. В данном случае это нужно сделать.

sudo mkfs.ext4 -v /dev/mapper/truecrypt0

Этим самым была сделана ФС ext4 внутри данного шифрованного контейнера.

Далее, так как данный контейнер уже «прикреплён» к девайсу /dev/mapper/truecrypt0, то осталось его просто примонтировать к какой-нибудь директории. Эта директория для монтирования должна уже существовать в системе.

sudo mount /dev/mapper/truecrypt0 /mnt/crypto , где /mnt/crypto – директория, к которой примонтирован шифрованный контейнер.

truecrypt -d

Теперь без знания файла-ключа и пароля никто не сможет прочесть спрятанную информацию.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: