Featured image of post Хитрое шифрование диска dm-crypt nuke

Хитрое шифрование диска dm-crypt nuke

Как использовать механизм nuke для уничтожения ключей шифрования в dm-crypt

Введение

Шифрование диска с использованием dm-crypt — это надёжный способ защиты данных. Однако в экстремальных ситуациях может потребоваться мгновенное и необратимое уничтожение ключей шифрования, чтобы данные стали недоступными. Для этого можно использовать механизм nuke, который активируется при вводе специального пароля.

В этой статье рассмотрим, как реализовать nuke в dm-crypt, используя initramfs, cryptsetup и mkpasswd.

Разработанный хук умеет:

  1. Расшифровывать диск используя данные с файла
  2. Если файл не найден, спрашивает пароль
  3. Если пароль это nuke пароль - удаляет все ключи

Важно! У меня это работает на Ubuntu 22.04.5, есть большая вероятность, что на других дистрибутивах нужно будет сделать что-то по другому. В любом случае, вот статья по восcтановлению Grub.

Установка

Я подготовил DEB пакет для простой установки. Качаем и ставим вот такой командой.

1
sudo apt-get install -f dm-nuke.deb

Настройка загрузки

В моём случае, у меня зашифрован / и не зашифрован /boot. Прежде всего, нужно добавить cryptdevice аргумент в /etc/default/grub. UUID можно получить из вывода blkid (берём UUID зашифрованного раздела).

1
GRUB_CMDLINE_LINUX_DEFAULT="... cryptdevice=UUID=bb85fe0a-4ef7-49c4-b15c-fb613d51e9ef:cryptroot"

Теперь, нужно добавить в /etc/crypttab указание использовать таш скрипт.

1
cryptroot UUID=bb85fe0a-4ef7-49c4-b15c-fb613d51e9ef keyfile-path=/dev/mmcblk0,keyfile-offset=8932578598,keyfile-size=11045,nuke=HASH luks,discard,keyscript=decrypt_smart_nuke

Описание аргументов:

  1. cryptroot - имя раздела после расшифровки. В данном случае он появится в системе как /dev/mapper/cryptroot. Должно совпадать с тем, что мы написали в /etc/default/grub.
  2. UUID=bb85fe0a-4ef7-49c4-b15c-fb613d51e9ef - то же, что мы прописали в /etc/default/grub.
  3. Всё третье поле это аргумент к скрипту:
    1. keyfile-path=/dev/mmcblk0 - путь к файлу или устройству откуда читать пароль, в моём случае это SD карта
    2. keyfile-offset=4194836274 - отступ в байтах от начала файла, если не указано - читать с начала.
    3. keyfile-size=7333 - длинна последовательности для чтения, если не указано - читать до конца.
    4. nuke=HASH - хеш пароля самоуничтожения.
  4. luks,discard,keyscript=decrypt_smart_nuke - опции для cryptsetup, где мы, среди всего прочего, указываем имя скрипта для получения пароля.

Замените HASH на хэш пароля, который можно получить вот так.

1
mkpasswd -m sha512crypt --rounds=5000

И keyfile, и nuke опциональны, можно не указывать их и скрипт отработает только на интерактивный ввод.

Файле для считывания ключа

Тут идея в следующем. У меня на ноутбуке есть SD Card Reader, так вот он всегда живёт с заглушкой. Почему бы, подумал я, его не использовать для хранения ключа? Есть два интересных варианта:

  1. Сделать раздел на флешке, но оставить буквально один мегабайт до или после него. Забить случайными данными и использовать этот кусок как ключ - незаметно. Сам раздел использовать с пользой.
  2. Забить всю флешку случайными данными и использовать случайный адрес и длину последовательности.

Вот второй вариант я и выбрал. Да, сторонний наблюдатель поймёт, что тут что-то не чисто, да, флешку нельзя использовать по прямому назначению, но поди угадай тот адрес начала и длину последовательности.

И ещё, можно использовать другие, более безопасные варианты указаний пути к разделу:

  1. /dev/disk/by-id/…
  2. /dev/disk/by-uuid/…
  3. /dev/disk/by-label/…

У меня просто SD Card Reader один физически и больше не планируется.

Обновление initramfs

После внесения всех изменений обновите initramfs и grub.

1
2
sudo update-initramfs -u
sudo update-grub2

Итог

Теперь, если при загрузке системы ввести nuke-пароль, скрипт уничтожит ключи шифрования и сделает данные недоступными. Этот метод подходит для критических ситуаций, требующих быстрой и необратимой защиты информации.

Кроме того, система будет расшифровываться сама, а если нужно куда-то поехать с ноутбуком, то флешку можно вытащить и он будет спрашивать пароль.

Будьте осторожны при использовании данного механизма и имейте бекап.

1
sudo cryptsetup luksHeaderBackup /dev/sda1 --header-backup-file ./backup.luks
Licensed under Apache License, Version 2.0
Обновлено янв. 25, 2026 14:55 +0200
All rights reserved
Создано при помощи Hugo
Тема Stack, дизайн Jimmy