Product SiteDocumentation Site

Глава 80. Управление шифрованными разделами

80.1. Работа с зашифрованными дисками
80.2. Шифрование пустого блочного устройства
80.3. Шифрование существующих данных на блочном устройстве с внешним (отсоединённым) заголовком
80.4. Использование TPM 2.0
80.4.1. Создание зашифрованного раздела
80.4.2. Привязка тома LUKS к TPM 2.0
80.4.3. Удаление токена с тома
Шифрование блочных устройств позволяет защитить данные, сделав их недоступными без специальной аутентификации — парольной фразы или ключа. Это особенно важно для мобильных устройств и съёмных носителей: даже при физическом доступе к диску расшифровать его содержимое без ключа невозможно.
LUKS2 (Linux Unified Key Setup, версия 2) является стандартным форматом шифрования блочных устройств в Альт Рабочая станция K.
Поддерживаемые алгоритмы:
  • Шифры: aes-xts-plain64, serpent-xts-plain64, twofish-xts-plain64
  • Хеш-функции: sha256, sha512, blake2b
  • PBKDF: argon2id, pbkdf2

Примечание

Для управления шифрованными разделами можно воспользоваться командой cryptsetup. Ниже описаны лишь некоторые возможности утилиты cryptsetup. Для получения более подробной информации используйте команду man cryptsetup.
Шифрованный раздел может быть создан как при установке системы (см. Создание шифрованных разделов), так и вручную (с помощью cryptsetup).

80.1. Работа с зашифрованными дисками

В формате LUKS2 поддерживается до 32 ключевых слотов. Каждый слот может содержать свой ключ, который можно использовать для расшифровки. Пароли можно менять или удалять, при этом восстановление удалённых ключей невозможно.

Примечание

Зашифрованное блочное устройство защищено ключом. Ключ — это либо:
  • парольная фраза;
  • ключевой файл.
По умолчанию: парольные фразы могут содержать до 512 символов, а ключевые файлы — до 8192 КиБ.
Просмотреть параметры зашифрованного раздела можно, выполнив команду:
# cryptsetup luksDump /dev/sdb1
LUKS header information
Version:       	2
Epoch:         	10
Metadata area: 	16384 [bytes]
Keyslots area: 	16744448 [bytes]
UUID:          	87a00f6b-be95-ba47-af78-f38bd4fbcaed
Label:         	(no label)
Subsystem:     	(no subsystem)
Flags:       	(no flags)

Data segments:
  0: crypt
	offset: 16777216 [bytes]
	length: (whole device)
	cipher: aes-xts-plain64
	sector: 512 [bytes]

Keyslots:
  0: luks2
	Key:        256 bits
	Priority:   normal
	Cipher:     aes-xts-plain64
	Cipher key: 256 bits
	PBKDF:      pbkdf2
	Hash:       sha256
	Iterations: 10727120
	Salt:       50 a2 ab a9 6e dc cd e7 b2 0d 60 82 11 7b 62 af
	            1a 7a 3b 14 0b 26 64 9b fc 81 da f2 14 3b 62 69
	AF stripes: 4000
	AF hash:    sha256
	Area offset:163840 [bytes]
	Area length:131072 [bytes]
	Digest ID:  0
  6: luks2
	Key:        256 bits
	Priority:   normal
	Cipher:     aes-xts-plain64
	Cipher key: 256 bits
	PBKDF:      argon2id
	Time cost:  4
	Memory:     1000100
	Threads:    2
	Salt:       45 1a 1e e4 c1 73 ee c8 ae 30 e1 91 55 93 7a 26
	            0a 11 43 c7 c3 56 72 1f 7f 4b ec 5f df fa d3 7f
	AF stripes: 4000
	AF hash:    sha256
	Area offset:32768 [bytes]
	Area length:131072 [bytes]
	Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
	Hash:       sha256
	Iterations: 619725
	Salt:       6b 33 83 b5 9a 89 5c 0e 5f ad e2 f2 bc 21 9a 24
	            a7 46 b0 50 72 94 64 92 7e 67 39 69 cc f8 41 f2
	Digest:     65 7c fb 0b fe 73 6a 95 72 03 26 2b dd 3f 60 34
	            81 73 ac 1a 1e 22 3d cc 2b f2 69 78 2a 7c 29 6d
где /dev/sdb1 — шифрованный раздел.

Примечание

Определить является ли устройство LUKS-разделом:
# cryptsetup isLuks -v /dev/sdb1
Команда выполнена успешно.
Если команда завершилась успешно, раздел использует LUKS.
Определить, какие разделы используются системой, и какой из них зашифрован:
# lsblk
NAME                                          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                                             8:0    0   60G  0 disk
├─sda1                                          8:17   0    2G  0 part  [SWAP]
├─sda2                                          8:18   0  512M  0 part  /boot/efi
└─sda3                                          8:19   0   38G  0 part  /
sdb                                             8:16   0   18G  0 disk
└─sdb1                                          8:17   0   18G  0 part
  └─luks-87a00f6b-be95-ba47-af78-f38bd4fbcaed 253:0    0   18G  0 crypt /home
sr0                                            11:0    1 1024M  0 rom
В выводе команды cryptsetup luksDump в разделе Keyslots будет отображен список активных слотов:
…
Keyslots:
  0: luks2
…
  6: luks2
…
Чтобы открыть зашифрованный раздел LUKS используется команда:
# cryptsetup open /dev/sdb1 sdb1_encrypted
Чтобы закрыть контейнер LUKS необходимо отмонтировать раздел и выполнить команду:
# cryptsetup close sdb1_encrypted
Команда добавления нового пароля на зашифрованный раздел (требуется предоставить уже имеющийся пароль интерактивно или посредством опции --key-file):
# cryptsetup luksAddKey /dev/sdb1
Введите любую существующую парольную фразу:
Введите новую парольную фразу для слота ключа:
Парольная фраза повторно:
Пароль будет добавлен в первый свободный слот.
Можно указать номер определенного слота с помощью опции --key-slot, например:
# cryptsetup luksAddKey /dev/sdb1 --key-slot 5
Команда замены одного из паролей на другой (старый пароль нужно ввести интерактивно или задать опцией --key-file):
# cryptsetup luksChangeKey /dev/sdb1
Введите изменяемую парольную фразу:
Введите новую парольную фразу:
Парольная фраза повторно:
Если задан номер слота (опцией --key-slot), нужно ввести старый пароль именно для заданного слота, и замена пароля произойдёт тоже в этом слоте. Если номер слота не задан и есть свободный слот, то сначала новый пароль будет записан во временный свободный слот, а потом будет затёрт слот, содержащий старый пароль. Если свободных слотов не окажется, то новый пароль будет записан прямо в слот, ранее содержащий старый пароль.
Чтобы узнать какой слот занимает заданный пароль, можно разблокировать устройство с помощью параметра -v:
# cryptsetup --test-passphrase -v open /dev/sdb1
Не найдено подходящего токена.
Введите парольную фразу для /dev/sdb1:
Слот ключа 0 разблокирован.
Команда выполнена успешно.
Для удаления ключей из заголовка могут использоваться следующие действия:
  • luksRemoveKey — удалить ключ, указав его парольную фразу/ключевой файл;
  • luksKillSlot — удалить ключ, указав его слот (будет запрошен другой действительный ключ). Данная команда полезна, если вы забыли парольную фразу, потеряли ключевой файл или не имеете к нему доступа;
  • erase — удалить все активные ключи.

Примечание

Все вышеперечисленные действия можно использовать для безвозвратного удаления последнего активного ключа для зашифрованного устройства!

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

Команда cryptsetup erase не запрашивает пароль и удаляет все ключевые слоты без подтверждения. Восстановить доступ можно только из резервной копии заголовка.
Примеры удаления паролей:
  • удалить заданный пароль (затирает слот):
    # cryptsetup luksRemoveKey /dev/sdb1
    Введите удаляемую парольную фразу:
    
  • удаление по слоту (если известен номер слота):
    # cryptsetup luksKillSlot /dev/sdb1 5
    Введите любую оставшуюся парольную фразу:
    

Важно

При удалении ключей необходимо убедиться, что остается хотя бы один рабочий ключ.

Важно

При использовании опции -q (тихий режим) удаление даже последнего пароля будет выполнено без каких-либо предупреждений. Если ни одного пароля не останется (то есть все слоты ключей будут пусты), дешифровать LUKS-раздел станет невозможно.
Создание резервной копии заголовка:
# cryptsetup luksHeaderBackup --header-backup-file luks_header.img /dev/sdb1

Примечание

Резервную копию заголовка необходимо хранить в надёжном месте вне шифруемого устройства.
Восстановление заголовка:
# cryptsetup luksHeaderRestore --header-backup-file luks_header.img /dev/sdb1
ПРЕДУПРЕЖДЕНИЕ!
========
Устройство /dev/sdb1 уже содержит заголовок LUKS2. Замена заголовка уничтожит существующие слоты ключей.

Вы уверены? (введите «yes» заглавными буквами): YES

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

Восстановление заголовка уничтожит текущие ключи. Новые пароли будут заменены старыми из резервной копии.