Mark Silinio <silinio(at)mail.ru>
последнее обновление 19/01/06
| В данной заметке рассказывается про создание и использование зашифрованного флэш-диска в операционных системах Linux/FreeBSD/NetBSD/OpenBSD. Рассматриваются только низкоуровневые методы шифрования дисков встроенные в ядра операционных систем(рассматриваемых версий). Для использования дополнительных опций и расширенных возможностей(использование нескольких ключей, шифрование корневой файловой системы, шифрование файла подкачки и пр.) см. документацию и ссылки в конце статьи. Использовались следующие операционные системы:
Содержание:
LinuxCryptoLoop (Linux 2.4)Поддержка 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- таким образом выбранные криптоалгоритмы будут собраны в виде модулей. После компиляции модулей, загрузите их: # modprobe loop # modprobe cryptoloop # modprobe aesТеперь создаём ассоциацию устройства 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- таким образом выбранные криптоалгоритмы будут собраны в виде модулей. После компиляции модулей, загрузите их: # modprobe dm-mod # modprobe dm-crypt # modprobe aesУстанавливаем программу cryptsetup: # emerge cryptsetupТеперь шифруем устройство sda(флэшка) с помощью алгоритма AES: # cryptsetup --verify-passphrase -c aes create flashcrypt /dev/sda- при выполнении команды у вас попросят ввести пароль для этого устройства. Создаём файловую систему 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:
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)- таким образом выбранные криптоалгоритмы будут собраны в виде модулей. После компиляции модулей, загрузите их: # modprobe dm-mod # modprobe dm-crypt # modprobe aesУстанавливаем программу cryptsetup-luks: # emerge cryptsetup-luksПервичное форматирование устройства sda(флэшка) с помощью алгоритма AES(по-умолчанию): # cryptsetup --verify-passphrase luksFormat /dev/sda- при выполнении команды у вас попросят ввести пароль для этого устройства. Подключение зашифрованного устройства(нужно будет ввести пароль): # 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всё, теперь флэшка может быть извлечена. FreeBSDGBDE - 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:
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всё, теперь флэшка может быть извлечена. NetBSDCGD - Cryptographic Device Driver (NetBSD >= 2.0)Начиная с версии 2.0, NetBSD имеет собственную систему шифрования дисков CGD - Cryptographic Device Driver. Данная система также портирована под OpenBSD 3.2, но не интегрирована в основную ветвь.Некоторые возможности CGD:
pseudo-device cgd 4 # cryptographic disk driverСоздаём файл конфигурации(/etc/cgd/sd0) cgd для устройства sd0(флэшка): # cgdconfig -g -o /etc/cgd/sd0 -V ffs blowfish-cbc- используем алгоритм 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всё, теперь флэшка может быть извлечена. OpenBSDSVND - Safe Vnode Disk Driver (OpenBSD >= 2.1)Вместо добавления криптографии поверх существующей семантики файловой системы, виртуальная шифрованная файловая система была добавлена в существующую в OpenBSD систему vnode(9) через vnd(4), Vnode Disk Driver.SVND имеет следующие ограничения:
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всё, теперь флэшка может быть извлечена. Ссылки
|
| <- На титульную страницу |
|