Шифрование без dm-integrity? Раньше звучало как бред, теперь — новая норма в Cryptsetup 2.8.0
NewsMakerБыстрее шифруем, проще управляем, защищаем NVMe и LUKS2 по-новому.
Вышла новая стабильная версия утилиты для шифрования дисков cryptsetup 2.8.0. Релиз включает серьёзные улучшения, исправления ошибок и новые возможности, которые особенно важны для пользователей предыдущей версии 2.7.5, поскольку обновление рекомендовано всем.
Главным нововведением стала поддержка так называемого inline-режима, который позволяет использовать аппаратное пространство метаданных на накопителях NVMe. Некоторые модели корпоративного уровня уже умеют форматировать сектор диска, добавляя к нему дополнительное место для служебных данных. Например, стандартный сектор размером 4096 байт дополняется ещё 64 байтами. Если такая опция доступна и не используется для других целей, cryptsetup может отказаться от использования dm-integrity — отдельного слоя защиты, который раньше требовался для хранения метаданных. Это устраняет характерный для dm-integrity узкий участок производительности, связанный с ведением журнала.
Для работы inline-режима необходима версия ядра Linux не ниже 6.11. Использовать эту функцию можно с новым параметром --integrity-inline. Система integritysetup при этом всё ещё применяет dm-integrity, но метаданные напрямую размещаются в выделенном аппаратном пространстве. А cryptsetup полностью избавляется от dm-integrity, оставляя только драйвер dm-crypt. В библиотеке libcryptsetup появилась новая функция API — crypt_format_inline.
Также расширена поддержка зашифрованных накопителей с аутентифицированным шифрованием. Например, LUKS2 теперь можно форматировать с использованием inline-режима и AEAD-шифра AEGIS. При этом рекомендуется переводить NVMe-накопители на сектор 4096 байт для достижения максимальной производительности шифрования.
В новой версии завершена реализация API для работы с ключевыми слотами. Теперь память, необходимая для операций с ключами, полностью управляется внутри библиотеки, а не остаётся на ответственности пользователя.
Кроме того, добавлены параметры --key-description и --new-key-description, которые позволяют явно указывать описание ключа для операций открытия, изменения размера, повторного монтирования, форматирования и других.
Для процесса повторного шифрования устройства появилась более гибкая система выбора ключевых слотов, которые необходимо обновить. Можно выбирать их по токенам или типам токенов, а также проводить повторное шифрование без активных ключевых слотов, вручную задавая ключи тома.
Команда repair теперь может проверять области ключевых слотов на предмет повреждений. Анализ основан на статистическом тесте (χ²), который оценивает равномерность распределения байтов. Если пароль вдруг перестаёт приниматься, а пользователь подозревает повреждение заголовка, эта проверка может подсказать вероятное место сбоя.
Для устройств с поддержкой Opal2 внесено сразу несколько изменений. Во-первых, уточнены требования к PSID-файлам — теперь ожидается 32 алфавитно-цифровых символа. Во-вторых, для очистки защищённых областей используется надёжный метод Secure Erase вместо менее стабильного Erase. Также исправлены сообщения об ошибках и запрещена отложенная деактивация — накопитель должен блокироваться немедленно.
Возможности шифрования расширены и для особо специфичных сценариев. Например, теперь можно шифровать только часть устройства, совмещая это с выделением нового пространства под заголовок LUKS.
Исправлена обработка формата шифрования capi: (стандарт ядра Linux) для ситуаций, где раньше происходил откат на использование dm-crypt. В то же время, запрещена конвертация таких устройств из LUKS2 в устаревший LUKS1, поскольку последний не поддерживает capi:. Также вводится запрет на применение capi: для шифрования ключевых слотов в LUKS2.
Устранён ряд технических недочётов: потенциальные ошибки из-за нехватки памяти, неправильное определение размера блока устройства, ложные срабатывания проверок. Улучшена точность вывода статуса и отчётов о размере устройств.
Добавлена поддержка опции --integrity-key-size для задания нестандартного размера ключа целостности. А для plain-устройств теперь можно использовать ключи из доверенного или зашифрованного хранилища, а также изменять размер тома при активном ключе из keyring.
Среди других улучшений стоит отметить:

Вышла новая стабильная версия утилиты для шифрования дисков cryptsetup 2.8.0. Релиз включает серьёзные улучшения, исправления ошибок и новые возможности, которые особенно важны для пользователей предыдущей версии 2.7.5, поскольку обновление рекомендовано всем.
Главным нововведением стала поддержка так называемого inline-режима, который позволяет использовать аппаратное пространство метаданных на накопителях NVMe. Некоторые модели корпоративного уровня уже умеют форматировать сектор диска, добавляя к нему дополнительное место для служебных данных. Например, стандартный сектор размером 4096 байт дополняется ещё 64 байтами. Если такая опция доступна и не используется для других целей, cryptsetup может отказаться от использования dm-integrity — отдельного слоя защиты, который раньше требовался для хранения метаданных. Это устраняет характерный для dm-integrity узкий участок производительности, связанный с ведением журнала.
Для работы inline-режима необходима версия ядра Linux не ниже 6.11. Использовать эту функцию можно с новым параметром --integrity-inline. Система integritysetup при этом всё ещё применяет dm-integrity, но метаданные напрямую размещаются в выделенном аппаратном пространстве. А cryptsetup полностью избавляется от dm-integrity, оставляя только драйвер dm-crypt. В библиотеке libcryptsetup появилась новая функция API — crypt_format_inline.
Также расширена поддержка зашифрованных накопителей с аутентифицированным шифрованием. Например, LUKS2 теперь можно форматировать с использованием inline-режима и AEAD-шифра AEGIS. При этом рекомендуется переводить NVMe-накопители на сектор 4096 байт для достижения максимальной производительности шифрования.
В новой версии завершена реализация API для работы с ключевыми слотами. Теперь память, необходимая для операций с ключами, полностью управляется внутри библиотеки, а не остаётся на ответственности пользователя.
Кроме того, добавлены параметры --key-description и --new-key-description, которые позволяют явно указывать описание ключа для операций открытия, изменения размера, повторного монтирования, форматирования и других.
Для процесса повторного шифрования устройства появилась более гибкая система выбора ключевых слотов, которые необходимо обновить. Можно выбирать их по токенам или типам токенов, а также проводить повторное шифрование без активных ключевых слотов, вручную задавая ключи тома.
Команда repair теперь может проверять области ключевых слотов на предмет повреждений. Анализ основан на статистическом тесте (χ²), который оценивает равномерность распределения байтов. Если пароль вдруг перестаёт приниматься, а пользователь подозревает повреждение заголовка, эта проверка может подсказать вероятное место сбоя.
Для устройств с поддержкой Opal2 внесено сразу несколько изменений. Во-первых, уточнены требования к PSID-файлам — теперь ожидается 32 алфавитно-цифровых символа. Во-вторых, для очистки защищённых областей используется надёжный метод Secure Erase вместо менее стабильного Erase. Также исправлены сообщения об ошибках и запрещена отложенная деактивация — накопитель должен блокироваться немедленно.
Возможности шифрования расширены и для особо специфичных сценариев. Например, теперь можно шифровать только часть устройства, совмещая это с выделением нового пространства под заголовок LUKS.
Исправлена обработка формата шифрования capi: (стандарт ядра Linux) для ситуаций, где раньше происходил откат на использование dm-crypt. В то же время, запрещена конвертация таких устройств из LUKS2 в устаревший LUKS1, поскольку последний не поддерживает capi:. Также вводится запрет на применение capi: для шифрования ключевых слотов в LUKS2.
Устранён ряд технических недочётов: потенциальные ошибки из-за нехватки памяти, неправильное определение размера блока устройства, ложные срабатывания проверок. Улучшена точность вывода статуса и отчётов о размере устройств.
Добавлена поддержка опции --integrity-key-size для задания нестандартного размера ключа целостности. А для plain-устройств теперь можно использовать ключи из доверенного или зашифрованного хранилища, а также изменять размер тома при активном ключе из keyring.
Среди других улучшений стоит отметить:
- доработки поддержки TrueCrypt и VeraCrypt, включая корректное определение смещения зашифрованных разделов;
- улучшенные отчёты о метаданных этих систем;
- гарантированную блокировку ключей в памяти;
- исправления ошибок в deferred deactivation и проверках direct-io;
- интеграцию компактного криптографического бэкенда Mbed-TLS для встраиваемых устройств;
- более аккуратную работу системы сборки на Meson;
- оптимизацию записи метаданных LUKS2;
- поддержку новых флагов и API-расширений для libcryptsetup.