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”

  1. А вы не знаете каких нибудь методов оптимизации шифрования luks?
    В частности выжимаю максимум 600-800 мегабит с luks раздела на большом количестве параллельных чтений, если без luks то спокойно в гигабит упираюсь.

  2. Привет, Roman. Я тоже наткнулся на проблему с низкой скоростью при шифровании, по-сути процесс который занимается шифрованием (по-моему называется он cryptdev или еще как-то) загружает на 100% одно ядро процессора, а остальные ядра отдыхают. Те производительность напрямую зависит от производительности одного ядра процессора.

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

  3. OR пишет:

    Друзья, в чем проблема?
    К вашему вниманию имеется готовое решение – файловая система ZFS, которая поддерживает шифрование и достаточно быстрое, хотя и памяти RAM жрет немеренно, но с данной функцией справляется на ура!
    Поэтому, кому что?
    Думаю LUKS прекрасное решение для пользователя Десктопа или Лэптопа, но отнюдь для сервера слабо подходит, хотя для малокритичных использований, рядовых сервисов, годится. Если нужно более надежное решение, то рекомендую посмотреть на некоммерческие реализации *BSD и в частности OpenBSD, где по-умолчанию все защиты включены. Лично влюблен в эту операционную систему – она прекрасна, а за порты, я молчу!

  4. OR пишет:

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

Оставить комментарий