LUKS (Linux Unified Key Setup) – новый стандарт пришедший на смену dm-crypt и явно упрощающий работу с зашифрованными разделами. В этом случае в начале зашифрованного диска размещается информация о типе шифрования, размере ключа, а также зашифрованные парольными фразами ключи шифрования.
Из плюсов:
- Работа с несколькими ключами
- Быстрое добавление/удаление ключей
- Возможность определить зашифрованный раздел LUKS
Из минусов:
- Шифрование раздела возможно только с переносом данных
1. Установка cryptsetup-luks.
В CentOS 5.5 cryptsetup-luks устанавливается по-умолчанию, но на всякий случай:
[root@localhost ~]# yum install cryptsetup-luks
2. Создание зашифрованных разделов
При помощи cryptsetyp-luks можно шифровать различные виды разделов: целые диски, разделы LVM/LVM2, разделы находящиеся в файлах и тд. Здесь я не буду углубляться в частные случаи и рассмотрю на примере целого диска. Итак имеем диск /dev/sdb, который нужно зашифровать.
Форматируем диск LUKS. По умолчанию выбирается алгоритм шифрования AES с длинной ключа 256 бит, однако при необходимости можно задать другие алгоритмы шифрования и длину ключа. Формат команды:
cryptsetup [-c <cipher> -s <key-size>] luksFormat /dev/sdb
<cypher> – Модуль используемый для шифрования диска, может использоваться des, aes, blowfish, serpent, twofish, список загруженных модулей можно просмотреть в /proc/crypto
<key-size> – Длинна ключа шифрования
[root@localhost ~]# cryptsetup luksFormat /dev/sdb WARNING! ======== This will overwrite data on /dev/sdb irrevocably. Are you sure? (Type uppercase yes): YES # Вводим крупными буквами YES Enter LUKS passphrase: # Вводим парольную фразу Verify passphrase: # Повторяем ввод парольной фразы Command successful.
Подключаем зашифрованный диск:
[root@localhost ~]# cryptsetup luksOpen /dev/sdb myfs Enter LUKS passphrase for /dev/sdb: # Вводим парольную фразу key slot 0 unlocked. Command successful.
Создаем файловую систему на подключенном диске:
[root@localhost ~]# mkfs.ext3 /dev/mapper/myfs
Монтируем зашифрованный раздел
[root@localhost ~]# mkdir /mnt/myfs [root@localhost ~]# mount /dev/mapper/myfs /mnt/myfs
3. Работа с ключами
Раздел LUKS поддерживает 8 различных ключей, каждый из которых помещается в свой слот. Просмотреть список используемых ключей можно при помощи команды
[root@localhost ~]# cryptsetup luksDump /dev/sdb LUKS header information for /dev/sdb Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 1032 MK bits: 128 MK digest: 30 7d 36 2d 7d be b5 e3 08 86 15 74 53 54 c1 07 d2 ad be c9 MK salt: c2 7e c2 2f 39 c0 8e d2 33 0b b7 86 aa 6a 60 e7 e7 af b2 83 ad 78 f5 00 5d b1 f4 61 f1 f1 c6 cb MK iterations: 10 UUID: e2fe6efb-1f36-43c9-8b50-7652fe750571 Key Slot 0: ENABLED Iterations: 278906 Salt: 8c da 0d c6 f4 fb 96 fa 68 b8 04 04 83 5c 3d 30 2b 11 cc 9d 00 f4 b4 29 6c e7 b9 19 8f 8a 93 e1 Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
В данном случае имеется 1 ключ, находящийся в слоте 0. В LUKS могут использоваться 2 вида ключей – ключевые фразы и файлы.
Для добавления ключевой фразы:
[root@localhost ~]# cryptsetup luksAddKey /dev/sdb Enter any LUKS passphrase: # Вводим действительную парольную фразу Verify passphrase: # Повторяем ввод парольной фразы key slot 0 unlocked. Enter new passphrase for key slot: # Вводим парольную фразу для нового ключа Verify passphrase: # Повторяем ввод парольной фразы Command successful.
Для добавления ключевого файла необходимо выполнить следующую последовательность, если ключевой файл уже имеется первую команду можно пропустить.
[root@localhost]# dd if=/dev/random of=/tmp/myfs.key bs=1 count=256 [root@localhost tmp]# cryptsetup luksAddKey /dev/sdb /tmp/myfs.key Enter any LUKS passphrase: # Вводим парольную фразу Verify passphrase: # Повторяем ввод парольной фразы key slot 0 unlocked. Command successful.
Разблокировка зашифрованного диска при помощи ключевого файла.
[root@localhost ~]# cryptsetup -d /tmp/myfs.key luksOpen /dev/sdb myfs key slot 1 unlocked. Command successful.
Удаление ключей
[root@localhost ~]# cryptsetup luksDelKey /dev/sdb 1 Command successful.
4. Заключение
На мой взгляд LUKS очень удобен для работы с переносными устройствами, в крайнем случае его достаточно эффективно можно использовать для шифрования ноутбука или компьютера. Об этом в интернете есть куча замечательных статей про использование “волшебной флешки” с ключем при загрузке системы. Однако в случае с шифрованием сервера с критически важными корпоративными данными, LUKS является отнюдь не самым лучшим решением – показать злоумышленнику, что диск зашифрован, а еще и рассказать каким способом – уже плохой тон.
4 Коммент. : “Шифрование дисков с использованием LUKS”
А вы не знаете каких нибудь методов оптимизации шифрования luks?
В частности выжимаю максимум 600-800 мегабит с luks раздела на большом количестве параллельных чтений, если без luks то спокойно в гигабит упираюсь.
Привет, Roman. Я тоже наткнулся на проблему с низкой скоростью при шифровании, по-сути процесс который занимается шифрованием (по-моему называется он cryptdev или еще как-то) загружает на 100% одно ядро процессора, а остальные ядра отдыхают. Те производительность напрямую зависит от производительности одного ядра процессора.
Я пытался найти многозадачный шифровальщик, но безрезультатно.
Друзья, в чем проблема?
К вашему вниманию имеется готовое решение – файловая система ZFS, которая поддерживает шифрование и достаточно быстрое, хотя и памяти RAM жрет немеренно, но с данной функцией справляется на ура!
Поэтому, кому что?
Думаю LUKS прекрасное решение для пользователя Десктопа или Лэптопа, но отнюдь для сервера слабо подходит, хотя для малокритичных использований, рядовых сервисов, годится. Если нужно более надежное решение, то рекомендую посмотреть на некоммерческие реализации *BSD и в частности OpenBSD, где по-умолчанию все защиты включены. Лично влюблен в эту операционную систему – она прекрасна, а за порты, я молчу!
Друзья, я еще забыл упомянуть, что скорость на LUKS будет заметно меньше в связи с тем, что при использовании журналировния шифрование происходит дважды, что и заметно тормозит процесс, может здесь и зарыта собака и возможно нужно посмотреть на отключение журналирования для использованой файловой системы!