Содержание статьи
LUKS — это, по сути, стандарт для шифрования дисков в Linux. Поддерживается до восьми слотов ключей, есть выбор хеш‑функций, алгоритмов и режимов шифрования, есть адаптивный алгоритм выбора количества итераций. Расшифровать данные на диске можно, только имея доступ к секретному ключу и паролю.
Среди других преимуществ LUKS:
- совместимость через стандартизацию;
- защита от атак с низкой энтропией;
- возможность аннулировать секретную фразу.
Ну и распространяется она бесплатно.
Настройка диска
Все манипуляции мы будем проводить на свежем Debian 10, добавив дополнительный диск для экспериментов с шифрованием.
После установки переходим под root:
su -
Затем утилитой fdisk смотрим названия доступных дисков:
`$ fdisk -l` Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x09849b5eDevice Boot Start End Sectors Size Id Type /dev/sda1 * 2048 37750783 37748736 18G 83 Linux /dev/sda2 37752830 41940991 4188162 2G 5 Extended /dev/sda5 37752832 41940991 4188160 2G 82 Linux swap / Solaris Disk /dev/sdb: 4 GiB, 4294967296 bytes, 8388608 sectors Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
В своем примере я буду использовать устройство /. Для разметки диска использую утилиту parted, передав имя диска в качестве аргумента:
parted /dev/sdb
Помечаю таблицу разделов как GPT:
(parted) mklabel gpt
И создаю единственный раздел, занимающий весь диск:
(parted) mkpart primary 1 -1
(parted) quit
Сборка cryptsetup
Работы с разметкой / закончены. Переходим к сборке cryptsetup.
Если у тебя уже установлен LUKS и ты хочешь модифицировать текущую версию утилиты, используй dpkg-dev. В этом же примере я буду собирать cryptsetup из исходных кодов, скачанных отдельно от системы. У меня версия 2.0.6, так как при сборке последней доступной (2.3.4) были проблемы с версиями библиотек.
Скачиваем, распаковываем и устанавливаем необходимые зависимости:
# cd /root# wget https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/cryptsetup-2.0.6.tar.xz# tar xf cryptsetup-2.0.6.tar.xz# cd cryptsetup-2.0.6# apt update && apt install build-essential automake autopoint libtool pkg-config uuid-dev libdevmapper-dev libpopt-dev libgcrypt20-dev libjson-c-dev libssl-dev libblkid-dev gettextСобираем и устанавливаем:
# ./configure# make && make installПроверяем установку:
`# cryptsetup --version` cryptsetup 2.0.6
Отлично. Теперь создадим зашифрованный раздел с помощью cryptsetup и пароля, вводимого в TTY:
# cryptsetup luksFormat /dev/sdb1Соглашаемся на форматирование (YES) и вводим пароль для последующего доступа к разделу. Я использую t3st3ncryp7.
Проверяем, все ли удалось.
`# cryptsetup isLuks /dev/sdb1 && echo Ok!` Ok!
Все получилось! Подключаем шифрованный раздел, чтобы дальше его монтировать:
# cryptsetup luksOpen /dev/sdb1 dbВводим парольную фразу (t3st3ncryp7). Чуть позже в этом месте мы перехватим вводимый в TTY пароль.
Форматируем раздел:
# mke2fs -j /dev/mapper/dbИ монтируем для работы, например в /:
`# mount /dev/mapper/db /mnt && cd /mnt` `# echo Hello! > test.txt` `# cat test.txt` Hello! `# ls -la` итого 28 drwxr-xr-x 3 root root 4096 ноя 6 06:49 . drwxr-xr-x 20 root root 4096 ноя 6 05:34 .. drwx------ 2 root root 16384 ноя 6 06:48 lost+found -rw-r--r-- 1 root root 7 ноя 6 06:49 test.txt
Модифицируем код
На этом этапе мы научились монтировать шифрованный раздел LUKS c использованием парольной фразы. Сейчас мы исправим исходный код, чтобы сохранять не только вводимый пароль, но и случайно сгенерированный файл, который может быть указан в качестве ключа для расшифровки раздела.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Оформи подписку на материалы по тегу
Если тебе интересна эта тема целиком, можно открыть доступ не к одному материалу, а ко всем платным статьям выбранного тега.
Вариант 3. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
