Полнодисковое шифрование с помощью cryptsetup/LUKS

В этом руководстве показано, как настроить тома с LUKS-шифрованием для аутентификации при загрузке с помощью Nitrokey Pro или Nitrokey Storage.

Для справки: cryptsetup-initramfs теперь поддерживает использование смарт-карт OpenPGP, таких как Nitrokey Pro и Nitrokey Storage, для разблокирования томов с LUKS-шифрованием. После завершения настройки вам нужно будет просто вставить Nitrokey при загрузке и ввести PIN-код пользователя вместо ввода обычной парольной фразы шифрования диска.

Эти инструкции были протестированы на Ubuntu 20.04 и Debian 10.

Предупреждение

Следующее руководство может потенциально заблокировать ваш компьютер. Вы должны знать об этих рисках, и мы рекомендуем вам использовать приведенный ниже сценарий на дополнительном компьютере или после полного резервного копирования, поскольку вы можете потерять свои данные.

Требования

  • Компьютер Ubuntu или Debian с хотя бы одним томом с LUKS-шифрованием.

См. раздел ниже, чтобы определить, какой метод совместим с данным руководством.

Известные проблемы

Пока сценарий работает только с томами, разбитыми вручную, которые состоят из незашифрованного раздела /boot и зашифрованного корневого раздела /.

Пожалуйста, не выбирайте автоматическое шифрование всего диска, предусмотренное операционной системой, которую вы используете для данного руководства. Вы столкнетесь с повторяющимися ошибками при автоматическом разбиении на разделы, используя интерфейс установки на Ubuntu и Debian.

Инструкции

  1. Установите зависимости

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Создайте каталог smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Скачать скрипт smartcard-luks-script

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Экспорт открытого ключа

    Чтобы экспортировать свой открытый ключ из связки ключей GnuPG:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Если вы уже загрузили открытый ключ на сервер ключей (или храните его где-то еще), вам следует получить его тем способом, который вам удобен, и перейти к шагу 5.

  5. Определите и проверьте правильность имени устройства LUKS для корневого раздела:

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Подсказка

    Обычно это должно быть что-то вроде nvme0n1p3_crypt (для NitroPC) или sda3_crypt (для NitroPads). Вы можете и должны проверить, что UUID, указанный в /etc/crypttab, является назначенным разделом, проверив символическую ссылку в /dev/disks/by-uuid/.

  6. Выполните скрипт, указав в качестве аргументов имя устройства luks (например, nvme0n1p3_crypt) и pubkey.asc.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

После запуска скрипта с открытым ключом OpenPGP в качестве аргумента, он автоматически устанавливает новый секрет LUKS, шифрует его с помощью этого открытого ключа и устанавливает crypttab, LUKS, initramfs и GRUB.

Сначала вам будет предложено ввести User PIN.

имг1

После разблокировки Nitrokey вам будет предложено ввести OLD passphrase. Это парольная фраза, которую вы ввели для шифрования вашего тома при установке.

имг2

Примечание

Это запасной вариант на случай, если вы потеряете Nitrokey или он будет недоступен. Пока он не был протестирован, и пользователи должны помнить о риске блокировки компьютера, если запасной способ не сработает.

После ввода парольной фразы сценарий завершит настройку примерно за одну минуту. Не прерывайте выполнение сценария, иначе вы можете получить блокировку компьютера после перезагрузки.

img3

Готово!

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

Использование

После перезагрузки вам будет предложено ввести PIN-код пользователя.

имг5

Введите PIN-код пользователя, чтобы разблокировать накопитель

img6

Дальнейшие советы

Изменить парольную фразу

После выполнения этой настройки вы больше не должны использовать (gnome) утилиту disks для изменения (резервной) парольной фразы. Правильный способ сделать это - вызвать cryptsetup напрямую следующим образом:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

При этом nvme0n1p3 будет разделом, для которого вы установили ключи.

Используйте несколько клавиш

Легко использовать несколько (аппаратных) ключей безопасности, чтобы каждый из них мог разблокировать диск LUKS независимо. Просто экспортируйте несколько открытых ключей, а также передайте несколько ключей в сценарий настройки следующим образом:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Установить имя держателя карты

Во время ввода PIN-кода при загрузке для расшифровки корневого раздела LUKS пользователю представляется владелец карты, для установки используйте $ gpg --edit-card и внутри подсказки введите admin и name для установки владельца карты OpenPGP Card (Nitrokey Storage 2 или Nitrokey Pro 2).

Замена/удаление клавиш

Невозможно добавить/удалить ключи напрямую. Поэтому вам необходимо удалить/удалить старую установку и запустить установку заново с назначенным(и) ключом(ами):

Удалите ключевой файл (путь, если вы использовали сценарий выше) из luks-device (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Удалите сам ключевой файл:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Повторно выполните вышеуказанную настройку.

Разблокировка LUKS2 с помощью сертификата X509

SystemD поддерживает разблокировку раздела LUKS2 с помощью сертификата X509, найдите отличную запись в блоге о том, как это реализовать на Личный блог Владимира Тимофеенко.