- СИНТАКСИС
- ОПИСАНИЕ
- ОСНОВНЫЕ ДЕЙСТВИЯ
- РЕЖИМ ПРОСТОГО ШИФРОВАНИЯ
- РАСШИРЕНИЕ LUKS
- РАСШИРЕНИЕ LOOP-AES
- РАСШИРЕНИЕ TCRYPT (СОВМЕСТИМОСТЬ С TRUECRYPT И VERACRYPT)
- РАСШИРЕНИЕ BITLK (СОВМЕСТИМОСТЬ С WINDOWS BITLOCKER)
- РАСШИРЕНИЕ FVAULT2 (СОВМЕСТИМОСТЬ С APPLE MACOS FILEVAULT2)
- РАСШИРЕНИЕ SED (САМОШИФРУЮЩИЙСЯ ДИСК) OPAL
- ДРУГИЕ ДЕЙСТВИЯ
- ОПЫТНЫЙ РЕЖИМ ИЛИ LUKS?
- ПРЕДУПРЕЖДЕНИЯ
- ПРИМЕРЫ
- КОДЫ ВОЗВРАТА
- ЗАМЕЧАНИЯ
- Обработка пароля для режима PLAIN
- Обработка парольной фразы для LUKS
- Несогласованное поведение при неверных паролях/ключах
- Поддерживаемые шифры, режимы, хэш-функции и размеры ключей
- Замечания о паролях
- Замечания о генераторах случайных чисел
- Аутентифицированное шифрование диска (ЭКСПЕРИМЕНТАЛЬНО)
- Примечания об использовании loopback-устройства
- Блокировка заголовка LUKS2
- Спецификация формата LUKS на диске
- АВТОРЫ
- СООБЩЕНИЕ ОБ ОШИБКАХ
- СМОТРИТЕ ТАКЖЕ
- CRYPTSETUP
cryptsetup — утилита для настройки и управления зашифрованными запоминающими устройствами
СИНТАКСИС
cryptsetup <действие> [<параметры>] <аргументы действия>
ОПИСАНИЕ
Cryptsetup — это утилита для настройки и управления полным шифрованием диска на запоминающих устройствах. Она может шифровать блочные устройства (например, жесткие диски или разделы) и контейнеры (образы дисков, хранящиеся в файлах).
При разблокировке зашифрованного тома cryptsetup создает новое отображение устройства, к которому приложения могут получать доступ, как к любому обычному запоминающему устройству. Фактическое шифрование и расшифровка выполняются прозрачно драйвером dm-crypt в ядре.
Cryptsetup работает с двумя основными типами томов: простые зашифрованные тома и тома LUKS (Linux Unified Key Setup). Простые тома обеспечивают базовое шифрование, в то время как тома LUKS включают заголовок метаданных, который обеспечивает расширенные функции, такие как несколько слотов ключей и управление ключами. Кроме того, LUKS можно использовать для управления аппаратным шифрованием на накопителях OPAL.
Cryptsetup также обеспечивает ограниченную поддержку томов, созданных другими системами шифрования, включая loop-AES, TrueCrypt, VeraCrypt, BitLocker и FileVault2.
Для получения дополнительной информации о конкретном действии cryptsetup см. cryptsetup-<действие>(8), где <действие> — имя действия cryptsetup.
Устройства cryptsetup могут быть активированы во время загрузки через crypttab(5), который является частью systemd(1) или других системных скриптов инициализации.
ОСНОВНЫЕ ДЕЙСТВИЯ
Следующие действия действительны для всех поддерживаемых типов устройств.
OPEN
open <устройство> <имя> --type <тип_устройства>
Открывает (создает отображение) <имя>, резервируя устройство <устройство>. См. cryptsetup-open(8).
CLOSE
close <имя>
Удаляет существующее отображение <имя> и стирает ключ из памяти ядра. См. cryptsetup-close(8).
STATUS
status <имя>
Отображает состояние отображения <имя>. См. cryptsetup-status(8).
RESIZE
resize <имя>
Изменяет размер активного отображения <имя>. См. cryptsetup-resize(8).
REFRESH
refresh <имя>
Обновляет параметры активного отображения <имя>. См. cryptsetup-refresh(8).
REENCRYPT
reencrypt <устройство> или --active-name <имя> [<новое_имя>]
Выполняет повторное шифрование устройства LUKS. См. cryptsetup-reencrypt(8).
РЕЖИМ ПРОСТОГО ШИФРОВАНИЯ
Dm-crypt в режиме простого шифрования шифрует устройство сектор за сектором с помощью единственного не солевого хеша парольной фразы. Никакие проверки не выполняются и метаданные не используются. Операция форматирования отсутствует. Когда к необработанному устройству применяется отображение (открывается), обычные операции с устройствами могут использоваться на отображенном устройстве, включая создание файловой системы. Отображенные устройства обычно находятся в /dev/mapper/<имя>.
Ниже приведены допустимые действия для обычных типов устройств:
OPEN
open --type plain <device> <name>
create <name> <device> (УСТАРЕВШИЙ синтаксис)
Открывает (создает сопоставление с именем)
РАСШИРЕНИЕ LUKS
LUKS, Linux Unified Key Setup, — это стандарт для шифрования дисков. Он добавляет стандартизированный
заголовок в начало устройства, область слотов ключей непосредственно за заголовком и основную область данных за ней. Весь набор называется «контейнером LUKS». Устройство, на котором находится контейнер LUKS, называется «устройством LUKS». В большинстве случаев оба термина можно использовать взаимозаменяемо.
LUKS может управлять несколькими парольными фразами, которые можно индивидуально отзывать или изменять. Каждая парольная фраза использует отдельный слот ключей, содержащий ключ тома для шифрования данных. Слоты ключей можно безопасно удалить с постоянных носителей благодаря использованию антисудебных полос. Парольные фразы защищены от атак методом перебора с помощью функции вывода ключа на основе пароля (PBKDF). Парольная фраза, хранящаяся в файле, называется файлом ключей. Единственная разница между парольной фразой и файлом ключей заключается в том, что файл ключей может содержать двоичные данные. Оба обрабатываются одинаково.
LUKS версии 1 (или LUKS1) — это оригинальный формат метаданных, в то время как LUKS2 — это новая версия, которая позволяет использовать дополнительные расширения, такие как различные алгоритмы PBKDF или аутентифицированное шифрование. Вы можете отформатировать устройство с определенной версией LUKS с помощью --type luks1 или --type luks2 в команде luksFormat. Обычно указывать версию не требуется, так как она определяется автоматически. Формат по умолчанию — LUKS2.
Параметр <device> также можно указать с помощью UUID LUKS в формате UUID=<uuid>.
Заголовок LUKS можно отделить от данных (хранить отдельно). Чтобы указать отсоединенный заголовок, параметр --header можно использовать во всех командах LUKS, и он всегда имеет приоритет над позиционным параметром <device>.
Ниже приведены допустимые действия LUKS:
FORMAT
luksFormat <device> [<file with new key>]
Инициализирует раздел LUKS и устанавливает начальную парольную фразу (для слота ключей 0). См. cryptsetup-luksFormat(8).
OPEN
open --type luks <device> <name>
luksOpen <device> <name> (старый синтаксис)
Открывает устройство LUKS
SUSPEND
luksSuspend <name>
Приостанавливает активное устройство (все операции ввода-вывода будут заблокированы, и доступ к устройству будет ждать неопределенно долго) и удаляет ключ шифрования из памяти ядра. См. cryptsetup-luksSuspend(8).
RESUME
luksResume <name>
Возобновляет приостановленное устройство и восстанавливает ключ шифрования. См. cryptsetup-luksResume(8).
ADD KEY
luksAddKey <device> [<file with new key>]
Добавляет новую фразу для разблокировки, используя существующую. См. cryptsetup-luksAddKey(8).
УДАЛИТЬ КЛЮЧ
luksRemoveKey <устройство> [<файл ключа с фразой для удаления>]
Удаляет указанную фразу из LUKS-устройства. См. cryptsetup-luksRemoveKey(8).
ИЗМЕНИТЬ КЛЮЧ
luksChangeKey <устройство> [<новый файл ключа>]
Изменяет существующую фразу. См. cryptsetup-luksChangeKey(8).
КОНВЕРТИРОВАТЬ КЛЮЧ
luksConvertKey <устройство>
Преобразует существующий слот ключей LUKS2 в новые параметры PBKDF. См. cryptsetup-luksConvertKey(8).
УДАЛИТЬ СЛОТ
luksKillSlot <устройство> <номер>
Удаляет слот ключей с номером <номер> из LUKS-устройства. См. cryptsetup-luksKillSlot(8).
УДАЛИТЬ
erase <устройство>
luksErase <устройство> (старый синтаксис)
Удаляет все слоты ключей и делает контейнер LUKS навсегда недоступным. См. cryptsetup-erase(8).
UUID
luksUUID <устройство>
Выводит или устанавливает UUID LUKS-устройства. См. cryptsetup-luksUUID(8).
ПРОВЕРИТЬ, ЯВЛЯЕТСЯ ЛИ LUKS
isLuks <устройство>
Возвращает true, если <устройство> является LUKS-устройством, и false в противном случае. См. cryptsetup-isLuks(8).
ВЫВЕСТИ
luksDump <устройство>
Выводит информацию заголовка LUKS-устройства. См. cryptsetup-luksDump(8).
СОХРАНИТЬ ЗАГОЛОВОК
luksHeaderBackup <устройство> --header-backup-file <файл>
Сохраняет двоичную резервную копию заголовка LUKS и области слотов ключей. См. cryptsetup-luksHeaderBackup(8).
ВОССТАНОВИТЬ ЗАГОЛОВОК
luksHeaderRestore <устройство> --header-backup-file <файл>
Восстанавливает двоичную резервную копию заголовка LUKS и области слотов ключей из указанного файла. См. cryptsetup-luksHeaderRestore(8).
ТОКЕН
token <add|remove|import|export> <устройство>
Управление объектами токенов, используемыми для получения фраз. См. cryptsetup-token(8).
КОНВЕРТИРОВАТЬ
convert <устройство> --type <формат>
Преобразует устройство между форматами LUKS1 и LUKS2 (если возможно). См. cryptsetup-convert(8).
КОНФИГУРАЦИЯ
config <устройство>
Устанавливает постоянные параметры конфигурации (сохраняет в заголовок LUKS). См. cryptsetup-config(8).
РАСШИРЕНИЕ LOOP-AES
Cryptsetup поддерживает отображение зашифрованного раздела loop-AES с использованием режима совместимости.
ОТКРЫТЬ
open --type loopaes <устройство> <имя> --key-file <файл_ключа>
loopaesOpen <устройство> <имя> --key-file <файл_ключа> (старый синтаксис)
Открывает loop-AES <устройство> и настраивает отображение <имя>. См. cryptsetup-open(8).
См. также раздел 7 в разделе FAQ и loop-AES [http://loop-aes.sourceforge.net] для получения дополнительной информации о loop-AES.
РАСШИРЕНИЕ TCRYPT (СОВМЕСТИМОСТЬ С TRUECRYPT И VERACRYPT)
Cryptsetup поддерживает отображение зашифрованных разделов TrueCrypt, tcplay или VeraCrypt, используя нативный API ядра Linux. Форматирование заголовка и изменение заголовка TCRYPT не поддерживаются; cryptsetup никогда не изменяет заголовок TCRYPT на устройстве.
Расширение TCRYPT требует, чтобы в ядре была доступна криптографическая API пользовательского пространства. Если вы настраиваете ядро, включите "Интерфейс пользовательского пространства для симметричных алгоритмов шифрования" в разделе "Криптографический API" (CRYPTO_USER_API_SKCIPHER в файле .config).
Поскольку заголовок TCRYPT зашифрован, вы всегда должны предоставлять допустимую фразу и файлы ключей.
Cryptsetup распознает все варианты заголовков, кроме устаревших цепочек шифрования, использующих режим шифрования LRW с 64-битным блоком шифрования (а именно, Blowfish в режиме LRW не распознается; это ограничение API шифрования ядра).
VeraCrypt — это расширение TrueCrypt с увеличенным количеством итераций, поэтому разблокировка может занять довольно много времени.
Чтобы открыть устройство VeraCrypt с пользовательским значением Personal Iteration Multiplier (PIM), используйте либо опцию --veracrypt-pim PIM для непосредственного указания PIM в командной строке, либо --veracrypt-query-pim, чтобы запросить PIM.
Значение PIM влияет на количество итераций, применяемых во время вывода ключей. Подробную информацию см. в разделе PIM [https://veracrypt.io/en/Personal%20Iterations%20Multiplier%20(PIM).html].
Если необходимо отключить поддержку устройств VeraCrypt, используйте опцию --disable-veracrypt.
Активация с помощью tcryptOpen поддерживается только для цепочек шифрования, использующих режимы шифрования LRW или XTS.
Команда tcryptDump должна работать для всех распознаваемых устройств TCRYPT и не требует привилегий суперпользователя.
Чтобы сопоставить системное устройство (устройство с загрузчиком, где находится вся зашифрованная система), используйте опцию --tcrypt-system. Обязательно прочитайте конкретную информацию в разделе cryptsetup-tcryptOpen(8) --tcrypt-system option, поскольку сопоставление зашифрованного системного устройства — сложная задача.
Чтобы использовать скрытый заголовок (и сопоставить скрытое устройство, если оно доступно), используйте опцию --tcrypt-hidden.
Чтобы явно использовать резервный (вторичный) заголовок, используйте опцию --tcrypt-backup.
Нет защиты скрытого тома, если внешний том смонтирован. Причина в том, что если бы была какая-либо защита, она потребовала бы метаданных, описывающих, что следует защищать во внешнем томе, и скрытый том стал бы обнаруживаемым.
ОТКРЫТИЕ
open --type tcrypt <устройство> <имя>
tcryptOpen_ <устройство> <имя> (старый синтаксис)
Открывает устройство TCRYPT (совместимое с TrueCrypt) <устройство> и настраивает сопоставление <имя>. См. cryptsetup-open(8).
ДАМП
tcryptDump <устройство>
Выводит информацию заголовка устройства TCRYPT. См. cryptsetup-tcryptDump(8).
Дополнительную информацию см. на страницах TrueCrypt [https://en.wikipedia.org/wiki/TrueCrypt] и VeraCrypt [https://en.wikipedia.org/wiki/VeraCrypt].
Обратите внимание, что cryptsetup не использует код TrueCrypt или VeraCrypt; пожалуйста, сообщайте обо всех проблемах, связанных с этим расширением совместимости, в проект cryptsetup.
РАСШИРЕНИЕ BITLK (СОВМЕСТИМОСТЬ С WINDOWS BITLOCKER)
Cryptsetup поддерживает сопоставление разделов, зашифрованных с помощью BitLocker и BitLocker to Go, с использованием нативного API шифрования ядра Linux. Форматирование заголовков и изменения заголовка BITLK не поддерживаются; cryptsetup никогда не изменяет заголовок BITLK на устройстве.
Расширение BITLK требует, чтобы API шифрования пользовательского пространства ядра было доступно (подробности см. в разделе TCRYPT).
Cryptsetup должен распознавать все варианты заголовков BITLK, за исключением устаревшего заголовка, используемого в Windows Vista, и частично расшифрованных устройств BitLocker. Для активации устаревших устройств, зашифрованных в режиме CBC, требуется как минимум версия ядра Linux 5.3, а для устройств, использующих диффузор Elephant, — версия 5.6.
Команда bitlkDump должна работать для всех распознанных устройств BITLK и не требует привилегий суперпользователя.
Для разблокировки с помощью команды open необходимо предоставить пароль, резервную фразу или ключ запуска.
Кроме того, поддерживается разблокировка с помощью клавиши регулировки громкости. Необходимо предоставить ключ полного тома BitLocker (FVEK) с помощью опции --volume-key-file. Ключ должен быть расшифрован и не должен содержать заголовок (только 128/256/512 бит данных ключа, в зависимости от используемого шифра и режима).
Другие методы разблокировки (TPM, SmartCard) не поддерживаются.
OPEN
open --type bitlk <device> <name>
bitlkOpen <device> <name> (старый синтаксис)
Открывает устройство BITLK (совместимое с BitLocker) <device> и создает сопоставление <name>. См. cryptsetup-open(8).
DUMP
bitlkDump <device>
Выводит информацию заголовка устройства BITLK. См. cryptsetup-bitlkDump(8).
Обратите внимание, что cryptsetup не использует какой-либо код Windows BitLocker; пожалуйста, сообщайте обо всех проблемах, связанных с этим расширением совместимости, проекту cryptsetup.
РАСШИРЕНИЕ FVAULT2 (СОВМЕСТИМОСТЬ С APPLE MACOS FILEVAULT2)
Cryptsetup поддерживает сопоставление FileVault2 (полное шифрование диска FileVault2) от Apple для операционной системы macOS с использованием нативного API ядра Linux.
Cryptsetup поддерживает только FileVault2 на основе Core Storage и файловой системы HFS+ (представлено в MacOS X 10.7 Lion). Он НЕ поддерживает новую версию FileVault на основе файловой системы APFS, используемой в последних версиях macOS.
Форматирование заголовка и изменения заголовка FVAULT2 не поддерживаются; cryptsetup никогда не изменяет заголовок FVAULT2 на устройстве.
Расширение FVAULT2 требует, чтобы API криптографии для пользовательского пространства ядра было доступно (для получения подробной информации см. раздел TCRYPT) и драйвер ядра для файловой системы HFS+ (hfsplus).
Cryptsetup должен распознавать базовую конфигурацию для портативных дисков.
Команда fvault2Dump должна работать для всех распознанных устройств FVAULT2 и не требует привилегий суперпользователя.
Для разблокировки с помощью команды open необходимо предоставить пароль. Другие методы разблокировки не поддерживаются.
OPEN
open --type fvault2 <device> <name>
fvault2Open <device> <name> (старый синтаксис)
Открывает устройство FVAULT2 (совместимое с FileVault2) <device> (обычно второй раздел на устройстве) и создает сопоставление <name>. См. cryptsetup-open(8).
РАСШИРЕНИЕ SED (САМОШИФРУЮЩИЙСЯ ДИСК) OPAL
Cryptsetup поддерживает использование аппаратного шифрования на дисках, которые предоставляют интерфейс OPAL, как вложенное с dm-crypt, так и в автономном режиме. Пароли, токены и метаданные хранятся с использованием формата заголовка LUKS2 и, следовательно, совместимы с любым программным обеспечением или системой, использующей LUKS2 (например, с токенами).
Поддержка OPAL требует как минимум версию ядра 6.4. Изменение размера устройств не поддерживается.
Для OPAL + dm-crypt можно указать параметр --hw-opal, а для использования только OPAL без уровня dm-crypt можно указать параметр --hw-opal-only.
Открытие, закрытие и регистрация токенов работают так же, как и в LUKS2 и dm-crypt. Новые параметры необходимы только при форматировании; метаданные LUKS2 гарантируют, что при открытии или закрытии будет выполнена правильная настройка.
Если не указана метка подсистемы, она автоматически устанавливается в HW-OPAL, чтобы сразу было понятно, какое устройство использует OPAL.
ФОРМАТИРОВАНИЕ
luksFormat --type luks2 --hw-opal <устройство> [<файл ключа>]
Кроме того, укажите --hw-opal-only вместо --hw-opal, чтобы избежать использования слоя dm-crypt. Помимо обычной фразы-пароля, при форматировании первого раздела диска необходимо указать пароль администратора, и его необходимо будет повторно указывать при форматировании любого другого раздела, пока не будет выполнена заводская переустановка.
УДАЛЕНИЕ
erase <устройство>
Безопасно удаляет раздел или устройство. Требуется пароль администратора. Кроме того, укажите --hw-opal-factory-reset для полной заводской переустановки диска, используя идентификатор диска (обычно указан на этикетке) вместо пароля администратора.
Идентификатор диска должен быть введен без дефисов, пробелов или подчеркиваний.
ВНИМАНИЕ: Заводская переустановка приведет к полной потере всех данных на устройстве, независимо от раздела, на котором она выполняется, если таковой имеется, и независимо от каких-либо резервных копий заголовка LUKS2.
ДРУГИЕ ДЕЙСТВИЯ
ВОССТАНОВЛЕНИЕ
repair <устройство>
Пытается восстановить метаданные устройства, если это возможно. В настоящее время поддерживается только для устройств типа LUKS. См. cryptsetup-repair(8).
БЕНЧМАРК
benchmark <опции>
Проводит тестирование производительности, шифров и KDF (функции вывода ключей). См. cryptsetup-benchmark(8).
ОПЫТНЫЙ РЕЖИМ ИЛИ LUKS?
Если вы не очень хорошо разбираетесь в криптографии, используйте LUKS. В обычном режиме существует ряд возможных ошибок пользователя, которые значительно снижают безопасность. Хотя LUKS не может исправить их все, он может смягчить последствия для многих из них.
ПРЕДУПРЕЖДЕНИЯ
Много полезной информации о рисках использования зашифрованного хранилища, о способах решения проблем и об аспектах безопасности можно найти в разделе «Часто задаваемые вопросы» Cryptsetup. Прочитайте его. Тем не менее, некоторые риски заслуживают особого упоминания здесь.
Резервное копирование: Носители информации выходят из строя. Шифрование на это не влияет. Резервное копирование обязательно для зашифрованных данных, если эти данные имеют какую-либо ценность. Обратитесь к разделу «Часто задаваемые вопросы» Cryptsetup для получения рекомендаций о том, как создать резервную копию зашифрованного тома.
Кодировка символов: Если вы вводите фразу-пароль со специальными символами, фраза-пароль может измениться в зависимости от кодировки символов. Настройки клавиатуры также могут быть изменены, что может затруднить или сделать невозможным ввод вслепую. Например, переключение с некоторых 8-битных вариантов ASCII на UTF-8 может привести к другой двоичной кодировке и, следовательно, к другой фразе-паролю, которую видит cryptsetup, даже если на терминале вы видите ровно то же самое. Поэтому настоятельно рекомендуется выбирать символы фразы-пароля только из 7-битного ASCII, поскольку кодировка 7-битного ASCII остается неизменной для всех вариантов ASCII и UTF-8.
Заголовок LUKS: Если заголовок тома LUKS поврежден, все данные будут безвозвратно потеряны, если у вас нет резервной копии заголовка. Если слот ключей поврежден, его можно восстановить только из резервной копии заголовка или если другой активный слот ключей с известной фразой-паролем не поврежден. Этот риск является результатом компромисса между безопасностью и надежностью, поскольку LUKS предназначен для быстрого и безопасного стирания путем простого перезаписи области заголовка и слота ключей.
Ранее использованные разделы: Если раздел использовался ранее, настоятельно рекомендуется очистить сигнатуры файловой системы, данные и т. д., прежде чем создавать контейнер LUKS или обычного dm-crypt. Для быстрого удаления сигнатур файловой системы используйте wipefs(8) с опцией --all. Обратите внимание, что это не удаляет данные; это лишь делает недействительными известные сигнатуры формата. Для полной очистки перезапишите весь раздел перед созданием контейнера. Если вы не знаете, как это сделать, в часто задаваемых вопросах cryptsetup описаны несколько вариантов.
ПРИМЕРЫ
Пример 1: Создание контейнера LUKS 2 на блочном устройстве /dev/sdX. sudo cryptsetup --type luks2 luksFormat /dev/sdX
Пример 2: Добавление дополнительной фразы пароля в слот ключей 5. sudo cryptsetup luksAddKey --key-slot 5 /dev/sdX
Пример 3: Создание резервной копии заголовка LUKS и сохранение ее в файл. sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
Пример 4: Открытие контейнера LUKS на /dev/sdX и сопоставление его с sdX_crypt. sudo cryptsetup open /dev/sdX sdX_crypt
ВНИМАНИЕ: Команда в примере 5 удалит все слоты ключей.
Вы больше не сможете использовать свой контейнер LUKS, если у вас нет резервной копии для восстановления.
Пример 5: Удаление всех слотов ключей на /dev/sdX. sudo cryptsetup erase /dev/sdX
Пример 6: Восстановление заголовка LUKS из файла резервной копии. sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
КОДЫ ВОЗВРАТА
Cryptsetup возвращает 0 в случае успеха и ненулевое значение в случае ошибки.
Коды ошибок: 1 - неверные параметры, 2 - нет разрешения (неверный пароль), 3 - нехватка памяти, 4 - указано неверное устройство, 5 - устройство уже существует или устройство занято.
ЗАМЕЧАНИЯ
Обработка пароля для режима PLAIN
Обратите внимание, что в обычном режиме итеративное хеширование или добавление соли не выполняются. Если хеширование выполняется, это однократное прямое хеширование. Это означает, что пароли с низкой энтропией легко взломать в обычном режиме.
Из терминала: Пароль считывается до первого символа новой строки, то есть '\n'. Ввод без символа новой строки обрабатывается с использованием хеша по умолчанию или хеша, указанного с помощью --hash. Результат хеширования будет усечен до размера ключа используемого шифра или размера, указанного с помощью -s.
Из стандартного ввода: Чтение будет продолжаться до символа новой строки (или до достижения максимального размера ввода), при этом конечный символ новой строки будет удален. Максимальный размер ввода определяется тем же значением по умолчанию, которое компилируется, что и максимальный размер файла ключа, и его можно изменить с помощью опции --keyfile-size.
Считанные данные будут хешированы с использованием хеша по умолчанию или хеша, указанного с помощью --hash. Результат хеширования будет усечен до размера ключа используемого шифра или размера, указанного с помощью -s.
Обратите внимание, что при использовании --key-file=- для чтения ключа из стандартного ввода, завершающие символы новой строки не удаляются из входных данных.
Если в качестве аргумента для --hash используется значение plain, входные данные не будут хешироваться. Вместо этого они будут дополнены нулями (если короче размера ключа) или усечены (если длиннее размера ключа) и использованы непосредственно в качестве двоичного ключа. Это полезно для прямой передачи двоичного ключа. Предупреждение не выдается, если объем данных, считываемых из стандартного ввода, меньше размера ключа.
Из файла ключей: Он будет усечен до размера ключа используемого шифра или размера, указанного с помощью -s, и непосредственно использован в качестве двоичного ключа.
Аргумент --hash игнорируется. Опция --hash может использоваться только для ввода из стандартного ввода в режиме plain.
Если файл ключей короче ключа, cryptsetup завершит работу с ошибкой. Максимальный размер входных данных определяется тем же значением по умолчанию, которое используется для максимального размера файла ключей, и может быть изменен с помощью опции --keyfile-size.
Обработка парольной фразы для LUKS
Из терминала: Парольная фраза считывается до первого символа новой строки, а затем обрабатывается с помощью PBKDF2 без этого символа новой строки.
Из стандартного ввода: LUKS считывает парольные фразы из стандартного ввода до первого символа новой строки или до размера, установленного по умолчанию для максимального размера файла ключей. Если указана опция --keyfile-size, она игнорируется.
Из файла ключей: Весь файл ключей считывается до размера, установленного по умолчанию. Символы новой строки не завершают ввод. Опция --keyfile-size может быть использована для ограничения объема считываемых данных.
LUKS использует функцию вывода ключа на основе пароля (PBKDF) для защиты от атак грубой силой и для обеспечения некоторой защиты для парольных фраз с низкой энтропией (см. часто задаваемые вопросы cryptsetup). LUKS1 поддерживает только алгоритм PBKDF2, в то время как LUKS2 также поддерживает память-интенсивный алгоритм Argon2. PBKDF настраиваются с помощью параметров: как долго должно выполняться итерирование (затраты на процессор или количество итераций), сколько памяти используется (затраты на память) и сколько параллельных процессов используется (параллельные затраты). PBKDF2 поддерживает только количество итераций. Cryptsetup использует эталонные тесты PBKDF для вычисления оптимальных параметров на основе компьютера, на котором инициализируется новая парольная фраза. При необходимости эти параметры также могут быть переопределены. Обратите внимание, что существуют некоторые жестко заданные ограничения; подробности см. в разделе «МИНИМАЛЬНЫЕ И МАКСИМАЛЬНЫЕ ЗАТРАТЫ PBKDF» в описании опции --pbkdf.
Всякий раз, когда парольная фраза добавляется в заголовок LUKS (luksAddKey, luksFormat), пользователь может указать, сколько времени должна занимать обработка парольной фразы. Это время используется для определения количества итераций для PBKDF2, и большее время обеспечит лучшую защиту для парольных фраз с низкой энтропией, но команда luksOpen будет выполняться дольше. Для парольных фраз, энтропия которых выше, чем длина используемого ключа, увеличение времени итерации не повысит безопасность.
Настройка по умолчанию, равная одной или двум секундам, достаточна для большинства практических случаев. Исключением является парольная фраза с низкой энтропией, используемая на устройстве с медленным процессором, поскольку это приведет к небольшому количеству итераций. На медленном устройстве может быть целесообразно увеличить время итерации с помощью опции --iter-time, чтобы получить большее количество итераций. Это замедлит все последующие операции luksOpen.
Несогласованное поведение при неверных паролях/ключах
LUKS проверяет правильность пароля при расшифровке слота ключей.
Поведение обычной dm-crypt отличается. Он всегда будет разблокировать устройство с использованием предоставленного пароля. Если предоставленный пароль неверен, устройство, отображаемое обычной dm-crypt, будет использовать неверный ключ шифрования, и данные станут недоступными.
Поддерживаемые шифры, режимы, хэш-функции и размеры ключей
Доступные комбинации шифров, режимов, хэш-функций и размеров ключей зависят от поддержки ядра. Список доступных опций можно найти в /proc/crypto. Возможно, вам потребуется загрузить дополнительные криптографические модули ядра, чтобы получить больше опций.
Cryptsetup выполняет множество операций вне ядра, поэтому настроенная криптографическая библиотека также должна поддерживать выбранные алгоритмы. Некоторые алгоритмы могут отсутствовать, поскольку cryptsetup может быть скомпилирован с различными криптографическими библиотеками.
Замечания о паролях
Математику не удастся подкупить. Убедитесь, что ваши пароли надежно защищены. Существуют несколько полезных приемов для создания резервного варианта на случай, если ваша память внезапно откажет. Эти резервные варианты требуют LUKS, поскольку это возможно только с LUKS, когда можно иметь несколько паролей. Тем не менее, если ваша модель угроз это допускает, хранение вашего пароля в запечатанном конверте может быть хорошей идеей.
Замечания о генераторах случайных чисел
Генераторы случайных чисел (ГСЧ), используемые в cryptsetup, всегда являются ГСЧ ядра, без каких-либо изменений или дополнений к потоку данных.
Существуют два типа случайности, необходимых для cryptsetup/LUKS. Один тип используется для солей, разделителя AF и для очистки удаленных слотов ключей. Второй тип используется для ключа тома.
С современными ядрами (Linux kernel 5.6) вам не нужно беспокоиться о выборе ГСЧ (/dev/random или /dev/urandom). В условиях низкой энтропии (встроенная система) инициализация ГСЧ ядра может занять очень много времени, но это происходит до того, как cryptsetup может быть запущен. Используйте cryptsetup --help, чтобы отобразить встроенный ГСЧ по умолчанию. Подробную информацию см. в urandom(4).
Аутентифицированное шифрование диска (ЭКСПЕРИМЕНТАЛЬНО)
Обычные режимы шифрования диска сохраняют длину (сектор открытого текста имеет тот же размер, что и сектор зашифрованного текста) и могут обеспечивать только защиту конфиденциальности, а не криптографически надежную защиту целостности данных.
Аутентифицированные режимы требуют дополнительного места на сектор для тега аутентификации и используют алгоритмы аутентифицированного шифрования с дополнительными данными (AEAD).
Если вы настроили устройство LUKS2 с защитой целостности данных, будет создано базовое устройство dm-integrity, которое предоставляет дополнительное пространство для метаданных на сектор и защиту журнала данных для обеспечения атомарности обновлений данных и метаданных. Поскольку должно быть дополнительное место для метаданных и журнала, доступное пространство для устройства будет меньше, чем для режимов сохранения длины.
Устройство dm-crypt затем размещается поверх устройства dm-integrity. Все операции активации и деактивации этого стека устройств выполняются с помощью cryptsetup; нет никакой разницы в использовании luksOpen для устройств, защищенных целостностью. Если вы хотите отформатировать устройство LUKS2 с защитой целостности данных, используйте опцию --integrity (см. cryptsetup-luksFormat(8)).
Хотя ядро Linux 5.7 добавило поддержку TRIM для автономных устройств dm-integrity, cryptsetup(8) не может обеспечить поддержку операций сброса (TRIM) в режиме аутентифицированного шифрования, потому что базовый модуль ядра dm-crypt не поддерживает эту функциональность, когда dm-integrity используется в качестве распределителя пространства для тегов аутентификации (см. --allow-discards в cryptsetup-open(8)).
Некоторые режимы целостности требуют два независимых ключа (ключ для шифрования и ключ для аутентификации). Оба эти ключа хранятся в одном слоте ключей LUKS.
Поддержка аутентифицированных режимов является экспериментальной, и в настоящее время доступны только некоторые режимы. Следует отметить, что лишь немногие алгоритмы аутентифицированного шифрования подходят для шифрования дисков. Кроме того, вы не можете использовать CRC32 или другие некриптографические контрольные суммы (кроме специального режима целостности "none"). Если по какой-либо причине вы хотите иметь контроль целостности без использования режима аутентификации, то вам следует отдельно настроить dm-integrity независимо от LUKS2.
Примечания об использовании loopback-устройства
Cryptsetup обычно используется непосредственно на блочном устройстве (раздел диска или том LVM). Однако, если аргументом является файл, cryptsetup пытается выделить loopback-устройство и сопоставить его с этим файлом. Конечно, вы всегда можете вручную сопоставить файл с loop-устройством. См. раздел "Часто задаваемые вопросы" cryptsetup для примера.
Когда сопоставление устройства активно, вы можете увидеть файл loop в выходных данных команды status. Также см. losetup(8).
Блокировка заголовка LUKS2
Метаданные LUKS2 на диске обновляются в несколько этапов, и для обеспечения правильного атомарного обновления используется механизм блокировки. Для образа в файле код использует системный вызов flock(2). Для блочного устройства блокировка выполняется над специальным файлом, хранящимся в каталоге блокировки (по умолчанию /run/cryptsetup). Каталог блокировки должен быть создан дистрибутивом с соответствующим контекстом безопасности во время загрузки. Только LUKS2 использует блокировки; другие форматы не используют этот механизм.
Спецификация формата LUKS на диске
Для спецификации метаданных LUKS на диске см. LUKS1 [https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification] и LUKS2 [https://gitlab.com/cryptsetup/LUKS2-docs].
АВТОРЫ
Cryptsetup был первоначально написан Jana Saout <_>. Расширения LUKS и исходная страница руководства были написаны Clemens Fruhwirth <_>. Расширения страницы руководства написаны Milan Broz <_>. Переработка и расширение страницы руководства были выполнены Arno Wagner <_>.
СООБЩЕНИЕ ОБ ОШИБКАХ
Сообщайте об ошибках в списке рассылки cryptsetup <_> или в разделе «Issues» проекта [https://gitlab.com/cryptsetup/cryptsetup/-/issues/new].
Пожалуйста, приложите вывод неудачной команды с добавленной опцией --debug.
СМОТРИТЕ ТАКЖЕ
Часто задаваемые вопросы по Cryptsetup [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions]
cryptsetup(8), integritysetup(8) и veritysetup(8)
CRYPTSETUP
Часть проекта cryptsetup [https://gitlab.com/cryptsetup/cryptsetup/].