From: Mark Silinio <silinio(at)mail.ru>
Newsgroups: http://silinio.webhost.ru
Date: Mon, 25 Jan 2006 14:31:37 +0000 (UTC)
Subject: Работа с зашифрованными дисками в Linux, FreeBSD, NetBSD, OpenBSD
В данной заметке рассказывается про создание и использование
зашифрованного флэш-диска в операционных системах
Linux/FreeBSD/NetBSD/OpenBSD. Рассматриваются только низкоуровневые
методы шифрования дисков встроенные в ядра операционных
систем(рассматриваемых версий). Для использования дополнительных опций
и расширенных возможностей(использование нескольких ключей, шифрование
корневой файловой системы, шифрование файла подкачки и пр.) см.
документацию и ссылки в конце статьи.
Использовались следующие операционные системы:
* Gentoo Linux (ядра 2.4.32 и 2.6.15)
* FreeBSD 6.0-RELEASE
* NetBSD 2.0-RELEASE
* OpenBSD 3.8-RELEASE
Содержание:
* Linux
+ CryptoLoop (Linux 2.4)
+ dm-crypt: a device-mapper crypto target (Linux 2.6)
+ LUKS - Linux Unified Key Setup (Linux 2.6)
* FreeBSD
+ GBDE - GEOM Based Disk Encryption (FreeBSD >= 5.0)
+ GELI (FreeBSD >= 6.0)
Поддержка CryptoLoop(крипрографического loopback-устройства) появилась
в Linux впервые в ядрах серии 2.4, причём для ранних версий должена
была устанавливаться в виде отдельного патча в связи с действующими в
то время ограничениями на экспорт криптографических систем в США.
Работа с устройствами зашифрованными CryptoLoop в Windows возможна с
помощью программ FreeOTFE и TrueCrypt. На сегодняшний день
рекомендуется использовать систему dm-crypt ядер 2.6 заместо
CryptoLoop.
Использование журналируемых файловых систем(EXT3, ReiserFS, XFS, JFS)
с CryptoLoop устройствами небезопасно и может привести к потере
данных.
Для работы с CryptoLoop ваше ядро должно быть скомпилировано с его
поддержкой. Прежде чем запускать компиляцию модулей проверьте
следующие пункты в menuconfig:
Block devices --->
<M> Loopback device support
<M> Cryptoloop support
- в данном случае CryptoLoop скомпилируется в виде модулей.
...также вам потребуются собственно сами криптоалгоритмы. Выберите
необходимые через menuconfig, например:
Cryptographic options --->
<M> DES and Triple DES EDE cipher algorithms
<M> Blowfish cipher algorithm
<M> AES cipher algorithms
- таким образом выбранные криптоалгоритмы будут собраны в виде
модулей.
После компиляции модулей, загрузите их:
Теперь создаём ассоциацию устройства sda(флэшка) с loop-устройсвом
loop0, используя для шифрования алгоритм AES:
# losetup -e aes /dev/loop0 /dev/sda
- при выполнении команды у вас попросят ввести пароль для этого
устройства.
Создаём файловую систему FAT32 на устройстве(FAT используется для
возможности работы в Windows):
# mkfs.vfat -F 32 /dev/loop0
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount -t vfat /dev/loop0 /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/loop0
Отключение зашифрованного устройства:
# losetup -d /dev/loop0
всё, теперь флэшка может быть извлечена.
dm-crypt: a device-mapper crypto target (Linux 2.6)
Device-mapper представляет собой новую систему работы с mapping'ом
устройсв в Linux 2.6 и шифрование устройств является лишь одной из её
возможностей,- LVM2 , EVMS2 также используют подсистему
device-mapper. Dm-crypt возможно использовать также для шифрования
раздела подкачки, а также поверх иного mapping'а, такого как LVM2,
например.
Для работы с dm-crypt ваше ядро должно быть скомпилировано с его
поддержкой. Прежде чем запускать компиляцию модулей проверьте
следующие пункты в menuconfig:
Device Drivers --->
Multi-device support (RAID and LVM) --->
<M> Device mapper support
<M> Crypt target support
- в данном случае dm-crypt скомпилируется в виде модулей.
...также вам потребуются собственно сами криптоалгоритмы. Выберите
необходимые через menuconfig, например:
Cryptographic options --->
<M> DES and Triple DES EDE cipher algorithms
<M> Blowfish cipher algorithm
<M> AES cipher algorithms
- таким образом выбранные криптоалгоритмы будут собраны в виде
модулей.
После компиляции модулей, загрузите их:
- при выполнении команды у вас попросят ввести пароль для этого
устройства.
Создаём файловую систему FAT32 на устройстве(FAT используется для
возможности работы в Windows):
# mkfs.vfat -F 32 /dev/mapper/flashcrypt
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount -t vfat /dev/mapper/flashcrypt /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/mapper/flashcrypt
Отключение зашифрованного устройства:
# cryptsetup remove flashcrypt
всё, теперь флэшка может быть извлечена.
LUKS - Linux Unified Key Setup (Linux 2.6)
LUKS использует улучшенную версию программы cryptsetup, и обладает
рядом преемущест по сравнению с ней.
Преемущества LUKS:
* возможность смены пароля без перешифрования раздела;
* возможность иметь несколько паролей;
* работа с зашифрованными дисками в Windows-системах с помощью
FreeOTFE и TrueCrypt
LUKS использует dm-crypt с которым должно быть скомпилировано ваше
ядро. Прежде чем запускать компиляцию модулей проверьте следующие
пункты в menuconfig:
Device Drivers --->
Multi-device support (RAID and LVM) --->
<M> Device mapper support
<M> Crypt target support
- в данном случае dm-crypt скомпилируется в виде модулей.
...также вам потребуются собственно сами криптоалгоритмы. Выберите
необходимые через menuconfig, например:
Cryptographic options --->
<M> DES and Triple DES EDE cipher algorithms
<M> Blowfish cipher algorithm
<M> AES cipher algorithms (i586)
- таким образом выбранные криптоалгоритмы будут собраны в виде
модулей.
- при выполнении команды у вас попросят ввести пароль для этого
устройства.
Подключение зашифрованного устройства(нужно будет ввести пароль):
# cryptsetup luksOpen /dev/sda flashcrypt
Создаём файловую систему FAT32 на устройстве(FAT используется для
возможности работы в Windows):
# mkfs.vfat -F 32 /dev/mapper/flashcrypt
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount -t vfat /dev/mapper/flashcrypt /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/mapper/flashcrypt
Отключение зашифрованного устройства:
# cryptsetup luksClose flashcrypt
всё, теперь флэшка может быть извлечена.
FreeBSD
GBDE - GEOM Based Disk Encryption (FreeBSD >= 5.0)
GBDE шифрует содержимое секторов при помощи 128-битного AES в режиме
CBC. Каждый сектор диска шифруется различным ключом AES. Код GBDE не
проанализирован в достаточной степени квалифицированными
криптографами, кроме того, разработчики не гарантируют что формат
хранения данных GBDE не изменится в результате исправлений ошибок или
иных изменений кода. Потенциальные пользователи GBDE должны быть
готовы к возможной миграции их данных с помощью утилит dump(8)/restore(8) в будущем.
Для работы с GBDE ваше ядро должно быть скомпилировано с его
поддержкой. Добавте следующи строки в конфигурационных файл ядра:
options GEOM_BDE
После необходимо перекомпилировать ядро.
Либо подгружать модуль gbde во время загрузки системы. Добавьте
следующую строку в /boot/loader.conf:
geom_bde_load="YES"
после этого устройства gbde(4) должны поддерживаться системой.
Первичная инициализация раздела GBDE (флэшки) с помощью gbde(8):
# gbde init /dev/da0
при выполнении команды у вас попросят два раза ввести пароль.
Подключение зашифрованного устройства к системе(нужно ввести пароль):
# gbde attach /dev/da0
создадим новую файловую систему командой newfs(8):
# newfs /dev/da0.bde
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount /dev/da0.bde /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/da0.bde
Отключение зашифрованного устройства:
# geli detach /dev/da0
всё, теперь флэшка может быть извлечена.
GELI (FreeBSD >= 6.0)
GELI - это новый GEOM класс для шифрования диска. Он имеет ряд новых
функций, отличающих его от уже существующего класса GBDE. Сам автор не
утверждает, что GELI лучше или хуже GBDE, он просто другой.
Пользователям предлагается самим выбирать, какой модуль им больше
подходит по функциональности.
Некоторые возможности GELI:
* использование специализированного оборудования для шифрования
(если доступно);
* поддержка нескольких алгоритмов шифрования (AES, Blowfish и 3DES);
* возможность шифрования корневого раздела файловой системы;
* возможность использования двух независимых ключей;
* возможность использования для временных разделов и разделов
подкачки
Для работы с GELI ваше ядро должно быть скомпилировано с его
поддержкой. Добавте следующи строки в конфигурационных файл ядра:
options GEOM_ELI
device crypto
После необходимо перекомпилировать ядро.
Либо подгружать модуль geli во время загрузки системы. Добавьте
следующую строку в /boot/loader.conf:
geom_eli_load="YES"
после этого geli(8) должен поддерживаться системой.
Первичная инициализация раздела GELI (флэшки):
# geli init /dev/da0
при выполнении команды у вас попросят два раза ввести пароль.
Подключение зашифрованного устройства к системе(нужно ввести пароль):
# geli attach /dev/da0
создадим новую файловую систему командой newfs(8):
# newfs /dev/da0.eli
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount /dev/da0.eli /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/da0.eli
Отключение зашифрованного устройства:
# geli detach /dev/da0
всё, теперь флэшка может быть извлечена.
NetBSD
CGD - Cryptographic Device Driver (NetBSD >= 2.0)
Начиная с версии 2.0, NetBSD имеет собственную систему шифрования
дисков CGD - Cryptographic Device Driver. Данная система также
портирована под OpenBSD 3.2, но не интегрирована в основную ветвь.
Некоторые возможности CGD:
* обеспечивает такие алгоритмы кодирования как AES, Blowfish и 3DES
в режиме CBC;
* различные методы верификации для проверки правильности ключевой
фразы:
+ none: без проверки. Это опасно, так как ключ не проверяется
вообще. cgdconfig примонтирует cgd устройство нормально, но
данные окажутся разрушенными в случае ввода неправильного
ключа (расшифровка блоков с неправильным ключом приведет к
появлению совершенно передсказуемых данных),
+ disklabel: cgdconfig сканирует сответствие раздела. Если и
раздел и ключ верны, то верификация будет пройдена,
+ ffs: cgdconfig сканирует файловую систему. Если файловая
система и ключ верны, то верификация будет пройдена;
* возможность использования для временных разделов и разделов
подкачки
Для работы с устройствами cgd, ядро должно быть скомпилированно с
поддержкой хотя бы одного(далее возьмём четыре):
pseudo-device cgd 4 # cryptographic disk driver
Создаём файл конфигурации(/etc/cgd/sd0) cgd для устройства
sd0(флэшка):
- используем алгоритм Blowfish и проводим верификацию по FFS.
Конфигурируем устройство cgd:
# cgdconfig -V none cgd0 /dev/sd0
при выполнении команды у вас попросят ввести пароль для этого cgd
устройства.
создадим новую файловую систему командой newfs(8):
# newfs /dev/cgd0
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount /dev/cgd0 /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/cgd0
после окончания работы cgd устройство должно быть расконфигурировано:
# cgdconfig -u cgd0
всё, теперь флэшка может быть извлечена.
OpenBSD
SVND - Safe Vnode Disk Driver (OpenBSD >= 2.1)
Вместо добавления криптографии поверх существующей семантики файловой
системы, виртуальная шифрованная файловая система была добавлена в
существующую в OpenBSD систему vnode(9) через vnd(4), Vnode
Disk Driver.
SVND имеет следующие ограничения:
* использование единственного криптоалгоритма Blowfish
(blowfish(3));
* ограничение на максимальный размер шифрованной файловой системы
(около 8.2Гб);
* отсутствие поддержки HMAC;
* опасность повреждения шифрованной файловой системы при
ненормальном размотировании
Для работы с устройствами vnd, ядро должно быть скомпилированно с
поддержкой хотя бы одного(далее возьмём четыре):
pseudo-device vnd 4
следует заметить что поддержка vnd устройств присутствует в GENERIC
ядре.
Для работы с vnd устройствами используется утилита vnconfig(8).
Далее создадим зашифрованную файловую систему на устройстве
sd0(флэш-диск):
# vnconfig -ck -v /dev/svnd0c /dev/sd0
при выполнении команды у вас попросят ввести пароль для этой
зашифрованной файловой системы.
создадим новую файловую систему командой newfs(8):
# newfs /dev/svnd0c
Создадим каталог для монтирования:
# mkdir /mnt/cryptoflash
примонтируем эту файловую систему:
# mount /dev/svnd0c /mnt/cryptoflash
размонтируем файловую систему по окончании работы с ней:
# umount /dev/svnd0c
отключим ассоциацию vnd-устройства с реальным устройством(sd0):
# vnconfig -u -v /dev/svnd0c
всё, теперь флэшка может быть извлечена.
Ссылки
* Encrypted Root Filesystem HOWTO
* dm-crypt wiki
* Encrypt devices using dm-crypt and LUKS
* Руководство FreeBSD: 16.15. Шифрование дисковых разделов
* OpenBSD Encrypted Virtual Filesystem Mini-HOWTO
* Операционная система NetBSD. Руководство. Глава 21. Драйвер
криптографического устройства
* The NetBSD Guide: Chapter 13. The cryptographic device driver (CGD)
* The CryptoGraphic Disk Driver(PDF)
* FreeOTFE - позволяет монтировать под Windows разделы созданные
через cryptoloop, dm-crypt и LUKS
* TrueCrypt - бесплатное и открытое средство для создания
шифрованных разделов доступных под Windows и Linux
* Использование CFS, криптографической файловой системы
* Шифрование пользовательских данных с помощью EncFS
1324 Прочтений • [Работа с зашифрованными дисками в Linux, FreeBSD, NetBSD, OpenBSD (crypt disk freebsd netbsd openbsd linux)] [08.05.2012] [Комментариев: 0]