Professor
Professional
- Messages
- 213
- Reaction score
- 22
- Points
- 18
И так, приступим.
Шифрование дисков в Linux обычно реализуется с помощью системы Linux Unified Key Setup (LUKS).
LUKS - это широко используемый стандарт шифрования дисков, который обеспечивает гибкий и безопасный способ шифрования дисковых разделов. LUKS работает на уровне блоков, что означает, что он шифрует каждый блок данных на диске по отдельности. Это усложняет злоумышленникам доступ к конфиденциальным данным, даже если они получат доступ к диску.
Когда пользователь шифрует раздел диска с помощью LUKS, система предлагает ему создать ключевую фразу или ключ-файл. Эта ключевая фраза или ключевой файл затем используются для шифрования главного ключа, который, в свою очередь, используется для шифрования фактических данных на диске. Главный ключ хранится на самом диске, но он зашифрован парольной фразой или ключ-файлом пользователя.
После того как раздел диска зашифрован, пользователю будет предложено ввести свою ключевую фразу или предоставить ключ-файл каждый раз, когда он пытается получить доступ к зашифрованным данным на диске.
В дополнение к базовой настройке шифрования LUKS, Linux также предоставляет дополнительные инструменты для управления зашифрованными дисками. Например, инструмент cryptsetup предоставляет интерфейс командной строки для управления зашифрованными дисками, включая настройку, изменение и удаление зашифрованных разделов.
Важно отметить, что хотя LUKS является надежным инструментом шифрования, как и в любой другой системе шифрования, важно использовать надежные парольные фразы или ключевые файлы, чтобы обеспечить надлежащую защиту данных. Кроме того, если злоумышленник получит доступ к работающей системе, он сможет получить доступ к зашифрованным данным, пока она смонтирована. Чтобы снизить этот риск, рекомендуется выключать систему, когда она не используется, или использовать дополнительные меры безопасности, такие как полное шифрование диска или физический контроль безопасности.
В процессе изучения LUKS вы можете столкнуться с 2мя версиями LUKS – LUKS1 и LUKS2. Рассмотрим их отличия:
LUKS1 и LUKS2 - это две разные версии стандарта шифрования дисков Linux Unified Key Setup (LUKS). Если LUKS1 был стандартом в течение многих лет, то LUKS2 был представлен в 2016 году как более продвинутая и гибкая версия стандарта. Вот некоторые ключевые различия между LUKS1 и LUKS2:
Структура метаданных: Одним из основных различий между LUKS1 и LUKS2 является структура метаданных, используемая для хранения информации о шифровании на диске. LUKS1 использует фиксированный формат метаданных, что ограничивает типы алгоритмов шифрования и размеры ключей, которые могут быть использованы. LUKS2 использует более гибкий формат метаданных, который позволяет использовать более широкий спектр алгоритмов шифрования и размеров ключей.
Управление ключами: LUKS2 предоставляет более продвинутые возможности управления ключами, чем LUKS1. Например, LUKS2 позволяет использовать несколько слотов для ключей, которые можно использовать для хранения нескольких парольных фраз или ключ-файлов для одного и того же зашифрованного раздела. Это может быть полезно в ситуациях, когда нескольким пользователям необходим доступ к одним и тем же зашифрованным данным.
Улучшенная производительность: LUKS2 обеспечивает более высокую производительность по сравнению с LUKS1, особенно когда речь идет о работе с большими файлами и разделами диска. LUKS2 использует более эффективный процесс получения ключей, что позволяет ускорить время шифрования и дешифрования.
LUKS2 также поддерживает объединение дисков, что позволяет объединить несколько физических дисков в один логический том для более удобного управления.
В заключение следует отметить, что хотя LUKS1 и LUKS2 предоставляют возможности шифрования дисков для Linux-систем, LUKS2 имеет ряд преимуществ перед LUKS1, включая более гибкую структуру метаданных, улучшенные возможности управления ключами, более высокую производительность и дополнительные функции. Рекомендуется использование LUKS2 при настройке шифрования дисков в своих системах Linux.
Далее будет встречаться такое понятие, как заголовки LUKS (LUKS Headers)
Рассмотрим более подробно, что это такое:
Заголовки LUKS являются важным компонентом шифрования дисков с помощью LUKS. По сути, это структуры метаданных, которые хранят информацию о конфигурации шифрования, такую как алгоритм шифрования, размер ключа, ключевые слоты и другие параметры. Заголовок LUKS используется для разблокировки зашифрованного раздела и получения доступа к зашифрованным данным.
Когда вы шифруете раздел диска с помощью LUKS, в начало раздела записывается заголовок LUKS. Этот заголовок содержит ключ шифрования и другую информацию, необходимую для разблокирования раздела. Заголовок LUKS обычно шифруется с помощью парольной фразы или ключ-файла, который служит "главным ключом" для зашифрованного раздела.
Одним из преимуществ заголовков LUKS является то, что они позволяют использовать несколько парольных фраз или ключ-файлов для разблокировки зашифрованного раздела. Это достигается путем использования нескольких "ключевых слотов" в заголовке LUKS. Каждый слот ключа может быть разблокирован с помощью отдельной ключевой фразы или ключевого файла, и любой из слотов ключа может быть использован для разблокирования раздела.
Еще одним преимуществом заголовков LUKS является возможность их резервного копирования и восстановления, что может быть полезно в случае повреждения или порчи заголовка. Это позволяет восстановить заголовок и разблокировать зашифрованный раздел в случае потери или повреждения основного заголовка.
Важно обеспечить безопасность заголовка LUKS, поскольку он содержит конфиденциальную информацию, которая имеет решающее значение для безопасности зашифрованного раздела. Любой несанкционированный доступ к заголовку LUKS может поставить под угрозу безопасность зашифрованных данных. Также важно убедиться, что резервные копии заголовка LUKS хранятся в безопасном месте.
Теперь рассмотрим, какие криптографические алгоритмы применяются в LUKS и для чего они нужны:
Алгоритмы симметричного шифрования, хэш-функции и функции формирования ключей - все это необходимые компоненты LUKS, обеспечивающие следующее:
Конфиденциальность: Алгоритмы симметричного шифрования (Symmetric Encryption) используются для шифрования всего содержимого дискового раздела. Это обеспечивает конфиденциальность данных и невозможность их чтения посторонними лицами. LUKS поддерживает несколько алгоритмов симметричного шифрования, таких как AES, Serpent и Twofish.
Целостность: хэш-функции (Hash-Functions) используются для создания дайджеста (хэша) данных или отпечатка зашифрованных данных. Это гарантирует, что данные не были подделаны или изменены каким-либо образом. LUKS поддерживает несколько хэш-функций, таких как SHA-1, SHA-256 и SHA-512.
Формирование ключей: Функции формирования ключа (Key Derivation Functions) используются для получения ключа шифрования из парольной фразы, предоставленной пользователем. Этот ключ затем используется для шифрования и дешифрования данных на диске. KDF разработаны таким образом, чтобы злоумышленнику было сложно перебрать ключевую фразу и получить ключ шифрования. LUKS поддерживает несколько KDF, таких как Argon2, PBKDF2, scrypt и bcrypt.
Вместе эти компоненты обеспечивают надежное шифрование данных на разделе диска, гарантируя конфиденциальность и целостность, затрудняя злоумышленникам перебор парольной фразы и получение ключа шифрования. LUKS также предоставляет дополнительные возможности, такие как возможность хранения нескольких парольных фраз и использование внешнего ключ-файла, для дальнейшего повышения безопасности зашифрованного раздела диска.
Рассмотрим поддерживаемые алгоритмы симметричного шифрования:
Симметричные алгоритмы шифрования - это класс алгоритмов шифрования, которые используют один и тот же секретный ключ как для шифрования, так и для расшифровки. Рассмотрим алгоритмы симметричного шифрования, которые поддерживает LUKS:
AES - это широко используемый симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он использует фиксированный размер блока в 128 бит и поддерживает размеры ключей в 128, 192 или 256 бит. AES известен своей скоростью, эффективностью и высоким уровнем безопасности.
Twofish - это еще один алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он поддерживает блоки размером 128, 192 или 256 бит и ключи размером 128, 192 или 256 бит. Twofish известен своей скоростью и гибкостью и часто используется в качестве альтернативы AES в приложениях, где важны скорость и гибкость.
Serpent - это алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 128 бит и размер ключа до 256 бит. Serpent известен своим высоким уровнем безопасности, устойчивостью к атакам и гибкостью.
CAST5 - это симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 64 бита и размер ключа до 128 бит. CAST5 известен своей простотой и скоростью, но он может не обеспечить такой же уровень безопасности, как некоторые другие алгоритмы.
Blowfish - это симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 64 бита и размер ключа до 448 бит. Blowfish известен своей скоростью и простотой, но он может не обеспечивать такой же уровень безопасности, как некоторые другие алгоритмы.
3DES - это алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он использует три отдельных ключа для шифрования данных, что делает его более безопасным, чем алгоритмы шифрования с одним ключом. Он поддерживает размер блока 64 бита и размер ключа до 192 бит. 3DES известен своим высоким уровнем безопасности, но он медленнее, чем некоторые другие алгоритмы.
Я рекомендую остановить свой выбор на AES или Twofish
Перейдем к хэш-функциям, которые поддерживает LUKS:
Хэш-функции - это математические алгоритмы, преобразующие данные произвольного размера в значения фиксированного размера, часто используемые в криптографии для создания дайджестов (хэшей) данных. Рассмотрим хэш-функции, которые поддерживает LUKS:
SHA-1 - это широко используемая хэш-функция, которая создает 160-битный дайджест (хэш) данных. Она больше не считается безопасной для криптографических приложений из-за известных уязвимостей.
SHA-224 - это вариант семейства хэш-функций SHA-2, создающий 224-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-1.
SHA-256 - это еще один вариант семейства хэш-функций SHA-2, который создает 256-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-1 и SHA-224.
SHA-384 - это вариант семейства хэш-функций SHA-2, создающий 384-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-256.
SHA-512 - еще один вариант семейства хэш-функций SHA-2, создающий 512-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-256 и SHA-384.
RIPEMD160 - это хэш-функция, создающая 160-битный дайджест сообщения. Она используется менее широко, чем некоторые другие хэш-функции, но считается безопасной.
Whirlpool - это хэш-функция, создающая 512-битный дайджест (хэш) данных. Она менее распространена, чем некоторые другие хэш-функции, но считается безопасной.
Я рекомендую использовать надежные хэш-функции, такие как Whirlpool и SHA-512.
Перейдем к рассмотрению функций формирования ключей:
Функции формирования ключа (KDF) используются в криптографии для генерации симметричного ключа шифрования из пароля или ключевой фразы, предоставленной пользователем. Рассмотрим KDF, которые поддерживает LUKS:
Argon2 - это относительно новая KDF, который был разработан, чтобы быть устойчивым к атакам перебором, атакам по побочным каналам и атакам на базе GPU. Он считается одним из самых безопасных KDF и рекомендуется для использования в LUKS2.
PBKDF2 - это широко используемый KDF, основанный на хэш-функции, такой как SHA-256 или SHA-512. Он считается относительно безопасным, но менее устойчив к атакам методом перебора, чем Argon2.
scrypt - это KDF, разработанный для работы с памятью, что делает его устойчивым как к атакам перебором, так и к атакам на базе GPU. Он считается относительно безопасным, но используется менее широко, чем PBKDF2 и Argon2.
bcrypt - это KDF, основанный на блочном шифре Blowfish. Он считается относительно безопасным, но менее устойчив к атакам "грубой силы", чем некоторые другие KDF.
В целом, выбор KDF в LUKS зависит от конкретных требований к безопасности шифруемой системы. Более безопасные KDF, такие как Argon2 и scrypt, обычно предпочтительнее менее безопасных KDF, таких как bcrypt. Важно отметить, что надежность ключа шифрования, генерируемого KDF, напрямую связана со сложностью и уникальностью пароля, задаваемого пользователем
Теперь обсудим такую функцию, как Nuke-пароль (пароль самоуничтожения).
Функция "nuke" - это функция стандарта шифрования LUKS, предназначенная для безопасного стирания заголовка LUKS, что делает зашифрованные данные недоступными. Эту функцию также иногда называют функцией "самоуничтожения".
Суть функции в том, что вы добавляете Nuke-пароль к зашифрованному каталогу, при вводе этого пароля стирается заголовок LUKS. Но даже без заголовка LUKS данные всё ещё можно расшифровать с применением атаки “грубой силы”, но эта атака будет эффективно только в том случае, если у вас был установлен слабый пароль шифрования. Стоит так же отметить, что при изъятии зашифрованного накопителя какими-либо спецслужбами они сделают резервную копию вашего накопителя, и даже если вы сообщите Nuke-пароль вместо реального пароля, то они без проблем это определят и восстановят заголовок LUKS из резервной копии.
На этом теоретическая часть лекции закончена, перейдем к практической, в которой мы рассмотрим шифрование дисков (не системных) и создание криптоконтейнеров. Рассмотрим так же создание ключ-файлов и создание/восстановление резервных копий заголовков LUKS.
Начнем с шифрования обычных дисков и флешек:
Будем считать, что все действия мы производим из-под Linux дистрибутива, основанного на Debian
Создаем зашифрованный раздел с помощью следующей команды:
Где /dev/sdX – путь до раздела, который вы хотите зашифровать.
В данном примере в качестве симметричного алгоритма шифрования я использую Twofish, а в качестве хэш-функции - SHA-512
Ниже приведены возможные функции, с помощью которых можно настраивать алгоритм шифрования под свои нужды:
-h, --hash: Эта опция позволяет указать алгоритм хэширования, который будет использоваться для мастер-ключа. Вы можете выбрать один из множества алгоритмов хэширования, включая sha1, sha256, sha512 и whirlpool.
-c, --cipher: Эта опция позволяет указать алгоритм шифрования, который будет использоваться для данных. Вы можете выбрать один из нескольких алгоритмов шифрования, включая aes-xts-plain64, aes-cbc-essiv:sha256 и serpent-xts-plain64.
-s, --key-size: Этот параметр позволяет указать размер ключа для алгоритма шифрования. Размер ключа может варьироваться в зависимости от выбранного алгоритма шифрования.
-y, --verify-passphrase: Эта опция проверяет правильность ввода ключевой фразы перед созданием контейнера LUKS.
-v, --verbose: Эта опция обеспечивает более подробный вывод при создании контейнера LUKS.
-d, --debug: Эта опция включает режим отладки, который обеспечивает еще более подробный вывод.
--type: Эта опция позволяет указать тип контейнера LUKS. По умолчанию используется LUKS1, но вы также можете выбрать LUKS2.
--header: Эта опция позволяет указать внешний заголовок LUKS.
--key-file: Эта опция позволяет указать ключ-файл для расшифровки.
--iter-time: Эта опция устанавливает время итерации для KDF в милисекундах
После ввода этой команды система попросит вас подтвердить действие, вводите YES большими буквами, затем 2 раза парольную фразу.
Теперь откроем наш зашифрованный раздел командой:
Название зашифрованного раздела задаете любое
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
Создаем папку, в которую будем монтировать наш зашифрованный раздел командой:
Название папки задаете любое.
Монтируем наш раздел в эту папку командой:
Чтобы отключить зашифрованный раздел от системы, необходимо отмонтировать раздел и закрыть LUKS контейнер следующими командами:
Отмонтировать раздел:
Закрыть контейнер LUKS:
Теперь рассмотрим создание криптоконтейнера в виде файла:
Создайте файл, который будет выступать в качестве зашифрованного контейнера. Вы можете использовать команду dd для создания файла нужного размера. Например, чтобы создать файл размером 1 ГБ под с любым названием, используя следующую команду:
Зашифровываем криптоконтейнер с помощью следующей команды:
Теперь откроем наш зашифрованный раздел командой:
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
Создаем папку, в которую будем монтировать наш криптоконтейнер командой:
Название папки задаете любое.
Монтируем наш раздел в эту папку командой:
Чтобы отключить зашифрованный раздел от системы, необходимо отмонтировать раздел и закрыть LUKS контейнер следующими командами:
Отмонтировать раздел:
Закрыть контейнер LUKS:
ВНИМАНИЕ ПОЛЬЗОВАТЕЛЕЙ Tails!
Для открытия контейнера необходимо использовать файловый менеджер Nautilus
После действий
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
После этого открываем файловый менеджер, видим наш контейнер, нажимаем на него и монтируем, после этого необходимо сменить владельца криптоконтейнера командой:
После этих действий можно записывать файлы в криптоконтейнер.
Теперь перейдем к командам для создания резервной копии заголовка LUKS, файла-ключа и Nuke-пароля:
Добавим ключ-файл в существующий заголовок LUKS:
Чтобы сгенерировать ключ-файл для LUKS, можно использовать команду dd для создания файла со случайными данными нужной длины, а затем преобразовать его в ключ-файл LUKS с помощью команды cryptsetup.
Вот пример генерации ключевого файла длиной 256 бит (32 байта) с помощью команды dd:
Эта команда создает файл по пути /path/to/keyfile с 32 байтами случайных данных.
Например, если ключевой файл хранится по пути /path/to/keyfile, вы можете добавить его в заголовок LUKS с помощью следующей команды:
Это добавит ключ-файл в качестве действительного ключевого слота для устройства LUKS, расположенного по пути /dev/sdX. После добавления ключ-файла его можно использовать для разблокировки устройства с помощью команды cryptsetup luksOpen, как показано ниже:
Стоит так же упомянуть команду для смены пароля LUKS (сменить пароль так же можно через графическую утилиту управления дисками):
Теперь рассмотрим, как добавить Nuke-пароль к зашифрованному разделу
Откройте терминал и введите следующую команду для добавления пароля Nuke:
Вам будет предложено ввести существующую парольную фразу для контейнера LUKS. Введите ее и нажмите Enter.
Затем вам будет предложено ввести парольную фразу Nuke. Эта парольная фраза будет использоваться для удаления заголовка LUKS. Введите парольную фразу и нажмите Enter.
Подтвердите парольную фразу Nuke, введя ее еще раз и нажав Enter.
После подтверждения парольной фразы Nuke контейнер LUKS будет с паролем Nuke.
Обратите внимание, что после добавления пароля Nuke его нельзя удалить.
Перейдем к тому, как работать с заголовками LUKS:
Для создания резервной копии заголовка LUKS можно использовать следующую команду:
<backup-file> - это имя файла, который будет содержать резервную копию заголовка LUKS, например luks-header-backup.img. Вы можете выбрать любое имя и расположение файла резервной копии, которое вам больше нравится.
Когда вы выполните эту команду, cryptsetup создаст резервную копию заголовка LUKS и сохранит ее в указанном файле. Важно хранить этот резервный файл в безопасном месте, например, на зашифрованном USB-накопителе или в безопасном облачном хранилище, отдельно от зашифрованного устройства.
Также целесообразно создать несколько резервных копий заголовка LUKS и хранить их в разных местах, чтобы обеспечить возможность восстановления зашифрованных данных даже в случае потери или недоступности одной резервной копии.
Чтобы восстановить заголовок LUKS из резервной копии, вы можете использовать следующую команду:
При выполнении этой команды cryptsetup восстановит заголовок LUKS из указанного файла резервной копии на зашифрованное устройство. Важно отметить, что восстановление заголовка LUKS перезапишет все существующие заголовки и ключевые материалы и может сделать зашифрованные данные недоступными, если файл резервной копии недействителен или поврежден.
На этом моя лекция закончена, можете задавать вопросы по теме лекции
Более подробные инструкции по различным сценариям использования LUKS будут в моих дальнейших статьях.
Шифрование дисков в Linux обычно реализуется с помощью системы Linux Unified Key Setup (LUKS).
LUKS - это широко используемый стандарт шифрования дисков, который обеспечивает гибкий и безопасный способ шифрования дисковых разделов. LUKS работает на уровне блоков, что означает, что он шифрует каждый блок данных на диске по отдельности. Это усложняет злоумышленникам доступ к конфиденциальным данным, даже если они получат доступ к диску.
Когда пользователь шифрует раздел диска с помощью LUKS, система предлагает ему создать ключевую фразу или ключ-файл. Эта ключевая фраза или ключевой файл затем используются для шифрования главного ключа, который, в свою очередь, используется для шифрования фактических данных на диске. Главный ключ хранится на самом диске, но он зашифрован парольной фразой или ключ-файлом пользователя.
После того как раздел диска зашифрован, пользователю будет предложено ввести свою ключевую фразу или предоставить ключ-файл каждый раз, когда он пытается получить доступ к зашифрованным данным на диске.
В дополнение к базовой настройке шифрования LUKS, Linux также предоставляет дополнительные инструменты для управления зашифрованными дисками. Например, инструмент cryptsetup предоставляет интерфейс командной строки для управления зашифрованными дисками, включая настройку, изменение и удаление зашифрованных разделов.
Важно отметить, что хотя LUKS является надежным инструментом шифрования, как и в любой другой системе шифрования, важно использовать надежные парольные фразы или ключевые файлы, чтобы обеспечить надлежащую защиту данных. Кроме того, если злоумышленник получит доступ к работающей системе, он сможет получить доступ к зашифрованным данным, пока она смонтирована. Чтобы снизить этот риск, рекомендуется выключать систему, когда она не используется, или использовать дополнительные меры безопасности, такие как полное шифрование диска или физический контроль безопасности.
В процессе изучения LUKS вы можете столкнуться с 2мя версиями LUKS – LUKS1 и LUKS2. Рассмотрим их отличия:
LUKS1 и LUKS2 - это две разные версии стандарта шифрования дисков Linux Unified Key Setup (LUKS). Если LUKS1 был стандартом в течение многих лет, то LUKS2 был представлен в 2016 году как более продвинутая и гибкая версия стандарта. Вот некоторые ключевые различия между LUKS1 и LUKS2:
Структура метаданных: Одним из основных различий между LUKS1 и LUKS2 является структура метаданных, используемая для хранения информации о шифровании на диске. LUKS1 использует фиксированный формат метаданных, что ограничивает типы алгоритмов шифрования и размеры ключей, которые могут быть использованы. LUKS2 использует более гибкий формат метаданных, который позволяет использовать более широкий спектр алгоритмов шифрования и размеров ключей.
Управление ключами: LUKS2 предоставляет более продвинутые возможности управления ключами, чем LUKS1. Например, LUKS2 позволяет использовать несколько слотов для ключей, которые можно использовать для хранения нескольких парольных фраз или ключ-файлов для одного и того же зашифрованного раздела. Это может быть полезно в ситуациях, когда нескольким пользователям необходим доступ к одним и тем же зашифрованным данным.
Улучшенная производительность: LUKS2 обеспечивает более высокую производительность по сравнению с LUKS1, особенно когда речь идет о работе с большими файлами и разделами диска. LUKS2 использует более эффективный процесс получения ключей, что позволяет ускорить время шифрования и дешифрования.
LUKS2 также поддерживает объединение дисков, что позволяет объединить несколько физических дисков в один логический том для более удобного управления.
В заключение следует отметить, что хотя LUKS1 и LUKS2 предоставляют возможности шифрования дисков для Linux-систем, LUKS2 имеет ряд преимуществ перед LUKS1, включая более гибкую структуру метаданных, улучшенные возможности управления ключами, более высокую производительность и дополнительные функции. Рекомендуется использование LUKS2 при настройке шифрования дисков в своих системах Linux.
Далее будет встречаться такое понятие, как заголовки LUKS (LUKS Headers)
Рассмотрим более подробно, что это такое:
Заголовки LUKS являются важным компонентом шифрования дисков с помощью LUKS. По сути, это структуры метаданных, которые хранят информацию о конфигурации шифрования, такую как алгоритм шифрования, размер ключа, ключевые слоты и другие параметры. Заголовок LUKS используется для разблокировки зашифрованного раздела и получения доступа к зашифрованным данным.
Когда вы шифруете раздел диска с помощью LUKS, в начало раздела записывается заголовок LUKS. Этот заголовок содержит ключ шифрования и другую информацию, необходимую для разблокирования раздела. Заголовок LUKS обычно шифруется с помощью парольной фразы или ключ-файла, который служит "главным ключом" для зашифрованного раздела.
Одним из преимуществ заголовков LUKS является то, что они позволяют использовать несколько парольных фраз или ключ-файлов для разблокировки зашифрованного раздела. Это достигается путем использования нескольких "ключевых слотов" в заголовке LUKS. Каждый слот ключа может быть разблокирован с помощью отдельной ключевой фразы или ключевого файла, и любой из слотов ключа может быть использован для разблокирования раздела.
Еще одним преимуществом заголовков LUKS является возможность их резервного копирования и восстановления, что может быть полезно в случае повреждения или порчи заголовка. Это позволяет восстановить заголовок и разблокировать зашифрованный раздел в случае потери или повреждения основного заголовка.
Важно обеспечить безопасность заголовка LUKS, поскольку он содержит конфиденциальную информацию, которая имеет решающее значение для безопасности зашифрованного раздела. Любой несанкционированный доступ к заголовку LUKS может поставить под угрозу безопасность зашифрованных данных. Также важно убедиться, что резервные копии заголовка LUKS хранятся в безопасном месте.
Теперь рассмотрим, какие криптографические алгоритмы применяются в LUKS и для чего они нужны:
Алгоритмы симметричного шифрования, хэш-функции и функции формирования ключей - все это необходимые компоненты LUKS, обеспечивающие следующее:
Конфиденциальность: Алгоритмы симметричного шифрования (Symmetric Encryption) используются для шифрования всего содержимого дискового раздела. Это обеспечивает конфиденциальность данных и невозможность их чтения посторонними лицами. LUKS поддерживает несколько алгоритмов симметричного шифрования, таких как AES, Serpent и Twofish.
Целостность: хэш-функции (Hash-Functions) используются для создания дайджеста (хэша) данных или отпечатка зашифрованных данных. Это гарантирует, что данные не были подделаны или изменены каким-либо образом. LUKS поддерживает несколько хэш-функций, таких как SHA-1, SHA-256 и SHA-512.
Формирование ключей: Функции формирования ключа (Key Derivation Functions) используются для получения ключа шифрования из парольной фразы, предоставленной пользователем. Этот ключ затем используется для шифрования и дешифрования данных на диске. KDF разработаны таким образом, чтобы злоумышленнику было сложно перебрать ключевую фразу и получить ключ шифрования. LUKS поддерживает несколько KDF, таких как Argon2, PBKDF2, scrypt и bcrypt.
Вместе эти компоненты обеспечивают надежное шифрование данных на разделе диска, гарантируя конфиденциальность и целостность, затрудняя злоумышленникам перебор парольной фразы и получение ключа шифрования. LUKS также предоставляет дополнительные возможности, такие как возможность хранения нескольких парольных фраз и использование внешнего ключ-файла, для дальнейшего повышения безопасности зашифрованного раздела диска.
Рассмотрим поддерживаемые алгоритмы симметричного шифрования:
Симметричные алгоритмы шифрования - это класс алгоритмов шифрования, которые используют один и тот же секретный ключ как для шифрования, так и для расшифровки. Рассмотрим алгоритмы симметричного шифрования, которые поддерживает LUKS:
AES - это широко используемый симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он использует фиксированный размер блока в 128 бит и поддерживает размеры ключей в 128, 192 или 256 бит. AES известен своей скоростью, эффективностью и высоким уровнем безопасности.
Twofish - это еще один алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он поддерживает блоки размером 128, 192 или 256 бит и ключи размером 128, 192 или 256 бит. Twofish известен своей скоростью и гибкостью и часто используется в качестве альтернативы AES в приложениях, где важны скорость и гибкость.
Serpent - это алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 128 бит и размер ключа до 256 бит. Serpent известен своим высоким уровнем безопасности, устойчивостью к атакам и гибкостью.
CAST5 - это симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 64 бита и размер ключа до 128 бит. CAST5 известен своей простотой и скоростью, но он может не обеспечить такой же уровень безопасности, как некоторые другие алгоритмы.
Blowfish - это симметричный алгоритм шифрования, который использует блочные шифры для шифрования данных. Он поддерживает размер блока 64 бита и размер ключа до 448 бит. Blowfish известен своей скоростью и простотой, но он может не обеспечивать такой же уровень безопасности, как некоторые другие алгоритмы.
3DES - это алгоритм симметричного шифрования, который использует блочные шифры для шифрования данных. Он использует три отдельных ключа для шифрования данных, что делает его более безопасным, чем алгоритмы шифрования с одним ключом. Он поддерживает размер блока 64 бита и размер ключа до 192 бит. 3DES известен своим высоким уровнем безопасности, но он медленнее, чем некоторые другие алгоритмы.
Я рекомендую остановить свой выбор на AES или Twofish
Перейдем к хэш-функциям, которые поддерживает LUKS:
Хэш-функции - это математические алгоритмы, преобразующие данные произвольного размера в значения фиксированного размера, часто используемые в криптографии для создания дайджестов (хэшей) данных. Рассмотрим хэш-функции, которые поддерживает LUKS:
SHA-1 - это широко используемая хэш-функция, которая создает 160-битный дайджест (хэш) данных. Она больше не считается безопасной для криптографических приложений из-за известных уязвимостей.
SHA-224 - это вариант семейства хэш-функций SHA-2, создающий 224-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-1.
SHA-256 - это еще один вариант семейства хэш-функций SHA-2, который создает 256-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-1 и SHA-224.
SHA-384 - это вариант семейства хэш-функций SHA-2, создающий 384-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-256.
SHA-512 - еще один вариант семейства хэш-функций SHA-2, создающий 512-битный дайджест (хэш) данных. Он считается более безопасным, чем SHA-256 и SHA-384.
RIPEMD160 - это хэш-функция, создающая 160-битный дайджест сообщения. Она используется менее широко, чем некоторые другие хэш-функции, но считается безопасной.
Whirlpool - это хэш-функция, создающая 512-битный дайджест (хэш) данных. Она менее распространена, чем некоторые другие хэш-функции, но считается безопасной.
Я рекомендую использовать надежные хэш-функции, такие как Whirlpool и SHA-512.
Перейдем к рассмотрению функций формирования ключей:
Функции формирования ключа (KDF) используются в криптографии для генерации симметричного ключа шифрования из пароля или ключевой фразы, предоставленной пользователем. Рассмотрим KDF, которые поддерживает LUKS:
Argon2 - это относительно новая KDF, который был разработан, чтобы быть устойчивым к атакам перебором, атакам по побочным каналам и атакам на базе GPU. Он считается одним из самых безопасных KDF и рекомендуется для использования в LUKS2.
PBKDF2 - это широко используемый KDF, основанный на хэш-функции, такой как SHA-256 или SHA-512. Он считается относительно безопасным, но менее устойчив к атакам методом перебора, чем Argon2.
scrypt - это KDF, разработанный для работы с памятью, что делает его устойчивым как к атакам перебором, так и к атакам на базе GPU. Он считается относительно безопасным, но используется менее широко, чем PBKDF2 и Argon2.
bcrypt - это KDF, основанный на блочном шифре Blowfish. Он считается относительно безопасным, но менее устойчив к атакам "грубой силы", чем некоторые другие KDF.
В целом, выбор KDF в LUKS зависит от конкретных требований к безопасности шифруемой системы. Более безопасные KDF, такие как Argon2 и scrypt, обычно предпочтительнее менее безопасных KDF, таких как bcrypt. Важно отметить, что надежность ключа шифрования, генерируемого KDF, напрямую связана со сложностью и уникальностью пароля, задаваемого пользователем
Теперь обсудим такую функцию, как Nuke-пароль (пароль самоуничтожения).
Функция "nuke" - это функция стандарта шифрования LUKS, предназначенная для безопасного стирания заголовка LUKS, что делает зашифрованные данные недоступными. Эту функцию также иногда называют функцией "самоуничтожения".
Суть функции в том, что вы добавляете Nuke-пароль к зашифрованному каталогу, при вводе этого пароля стирается заголовок LUKS. Но даже без заголовка LUKS данные всё ещё можно расшифровать с применением атаки “грубой силы”, но эта атака будет эффективно только в том случае, если у вас был установлен слабый пароль шифрования. Стоит так же отметить, что при изъятии зашифрованного накопителя какими-либо спецслужбами они сделают резервную копию вашего накопителя, и даже если вы сообщите Nuke-пароль вместо реального пароля, то они без проблем это определят и восстановят заголовок LUKS из резервной копии.
На этом теоретическая часть лекции закончена, перейдем к практической, в которой мы рассмотрим шифрование дисков (не системных) и создание криптоконтейнеров. Рассмотрим так же создание ключ-файлов и создание/восстановление резервных копий заголовков LUKS.
Начнем с шифрования обычных дисков и флешек:
Будем считать, что все действия мы производим из-под Linux дистрибутива, основанного на Debian
Создаем зашифрованный раздел с помощью следующей команды:
Code:
sudo cryptsetup luksFormat --type luks2 --cipher twofish-xts-plain64 --hash sha512 --key-size 512 --iter-time 10000 --verify-passphrase /dev/sdX
Где /dev/sdX – путь до раздела, который вы хотите зашифровать.
В данном примере в качестве симметричного алгоритма шифрования я использую Twofish, а в качестве хэш-функции - SHA-512
Ниже приведены возможные функции, с помощью которых можно настраивать алгоритм шифрования под свои нужды:
-h, --hash: Эта опция позволяет указать алгоритм хэширования, который будет использоваться для мастер-ключа. Вы можете выбрать один из множества алгоритмов хэширования, включая sha1, sha256, sha512 и whirlpool.
-c, --cipher: Эта опция позволяет указать алгоритм шифрования, который будет использоваться для данных. Вы можете выбрать один из нескольких алгоритмов шифрования, включая aes-xts-plain64, aes-cbc-essiv:sha256 и serpent-xts-plain64.
-s, --key-size: Этот параметр позволяет указать размер ключа для алгоритма шифрования. Размер ключа может варьироваться в зависимости от выбранного алгоритма шифрования.
-y, --verify-passphrase: Эта опция проверяет правильность ввода ключевой фразы перед созданием контейнера LUKS.
-v, --verbose: Эта опция обеспечивает более подробный вывод при создании контейнера LUKS.
-d, --debug: Эта опция включает режим отладки, который обеспечивает еще более подробный вывод.
--type: Эта опция позволяет указать тип контейнера LUKS. По умолчанию используется LUKS1, но вы также можете выбрать LUKS2.
--header: Эта опция позволяет указать внешний заголовок LUKS.
--key-file: Эта опция позволяет указать ключ-файл для расшифровки.
--iter-time: Эта опция устанавливает время итерации для KDF в милисекундах
После ввода этой команды система попросит вас подтвердить действие, вводите YES большими буквами, затем 2 раза парольную фразу.
Теперь откроем наш зашифрованный раздел командой:
Code:
sudo cryptsetup open /dev/sdbX <название зашифрованного раздела>
Название зашифрованного раздела задаете любое
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
Code:
sudo mkfs.btrfs /dev/mapper/<название зашифрованного раздела>
Создаем папку, в которую будем монтировать наш зашифрованный раздел командой:
Code:
sudo mkdir /mnt/<название папки>
Название папки задаете любое.
Монтируем наш раздел в эту папку командой:
Code:
sudo mount /dev/mapper/<название зашифрованного раздела> /mnt/<название папки>
Чтобы отключить зашифрованный раздел от системы, необходимо отмонтировать раздел и закрыть LUKS контейнер следующими командами:
Отмонтировать раздел:
Code:
sudo umount /mnt/<название папки>
Закрыть контейнер LUKS:
Code:
sudo cryptsetup close <название зашифрованного раздела>
Теперь рассмотрим создание криптоконтейнера в виде файла:
Создайте файл, который будет выступать в качестве зашифрованного контейнера. Вы можете использовать команду dd для создания файла нужного размера. Например, чтобы создать файл размером 1 ГБ под с любым названием, используя следующую команду:
Code:
dd if=/dev/zero of=название_криптоконтейнера bs=1M count=1024
Зашифровываем криптоконтейнер с помощью следующей команды:
Code:
sudo cryptsetup luksFormat --type luks2 <название_криптоконтейнера>
Теперь откроем наш зашифрованный раздел командой:
Code:
sudo cryptsetup open <название файла криптоконтейнера> <название зашифрованного раздела контейнера>
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
Code:
sudo mkfs.btrfs /dev/mapper/<название зашифрованного раздела контейнера>
Создаем папку, в которую будем монтировать наш криптоконтейнер командой:
Code:
sudo mkdir /mnt/<название папки>
Название папки задаете любое.
Монтируем наш раздел в эту папку командой:
Code:
sudo mount /dev/mapper/<название зашифрованного раздела контейнера> /mnt/<название папки>
Чтобы отключить зашифрованный раздел от системы, необходимо отмонтировать раздел и закрыть LUKS контейнер следующими командами:
Отмонтировать раздел:
Code:
sudo umount /mnt/<название папки>
Закрыть контейнер LUKS:
Code:
sudo cryptsetup close <название файла криптоконтейнера>
ВНИМАНИЕ ПОЛЬЗОВАТЕЛЕЙ Tails!
Для открытия контейнера необходимо использовать файловый менеджер Nautilus
После действий
Code:
sudo cryptsetup open <название файла криптоконтейнера> <название зашифрованного раздела контейнера>
Создаем файловую систему btrfs (или любую другую по вашему желанию) в зашифрованном разделе командой:
Code:
sudo mkfs.btrfs /dev/mapper/<название зашифрованного раздела контейнера>
После этого открываем файловый менеджер, видим наш контейнер, нажимаем на него и монтируем, после этого необходимо сменить владельца криптоконтейнера командой:
Code:
sudo chown -R amnesia /media/amnesia/
После этих действий можно записывать файлы в криптоконтейнер.
Теперь перейдем к командам для создания резервной копии заголовка LUKS, файла-ключа и Nuke-пароля:
Добавим ключ-файл в существующий заголовок LUKS:
Чтобы сгенерировать ключ-файл для LUKS, можно использовать команду dd для создания файла со случайными данными нужной длины, а затем преобразовать его в ключ-файл LUKS с помощью команды cryptsetup.
Вот пример генерации ключевого файла длиной 256 бит (32 байта) с помощью команды dd:
Code:
dd if=/dev/urandom of=/path/to/keyfile bs=32 count=1
Эта команда создает файл по пути /path/to/keyfile с 32 байтами случайных данных.
Например, если ключевой файл хранится по пути /path/to/keyfile, вы можете добавить его в заголовок LUKS с помощью следующей команды:
Code:
sudo cryptsetup luksAddKey /dev/sdX /path/to/keyfile
Это добавит ключ-файл в качестве действительного ключевого слота для устройства LUKS, расположенного по пути /dev/sdX. После добавления ключ-файла его можно использовать для разблокировки устройства с помощью команды cryptsetup luksOpen, как показано ниже:
Code:
sudo cryptsetup luksOpen /dev/sdX <название зашифрованного раздела> -d /path/to/keyfile
Стоит так же упомянуть команду для смены пароля LUKS (сменить пароль так же можно через графическую утилиту управления дисками):
Code:
sudo cryptsetup luksChangeKey /dev/sdaX
Теперь рассмотрим, как добавить Nuke-пароль к зашифрованному разделу
Откройте терминал и введите следующую команду для добавления пароля Nuke:
Code:
sudo cryptsetup luksAddNuke /dev/sdX
Вам будет предложено ввести существующую парольную фразу для контейнера LUKS. Введите ее и нажмите Enter.
Затем вам будет предложено ввести парольную фразу Nuke. Эта парольная фраза будет использоваться для удаления заголовка LUKS. Введите парольную фразу и нажмите Enter.
Подтвердите парольную фразу Nuke, введя ее еще раз и нажав Enter.
После подтверждения парольной фразы Nuke контейнер LUKS будет с паролем Nuke.
Обратите внимание, что после добавления пароля Nuke его нельзя удалить.
Перейдем к тому, как работать с заголовками LUKS:
Для создания резервной копии заголовка LUKS можно использовать следующую команду:
Code:
sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file <backup-file>
<backup-file> - это имя файла, который будет содержать резервную копию заголовка LUKS, например luks-header-backup.img. Вы можете выбрать любое имя и расположение файла резервной копии, которое вам больше нравится.
Когда вы выполните эту команду, cryptsetup создаст резервную копию заголовка LUKS и сохранит ее в указанном файле. Важно хранить этот резервный файл в безопасном месте, например, на зашифрованном USB-накопителе или в безопасном облачном хранилище, отдельно от зашифрованного устройства.
Также целесообразно создать несколько резервных копий заголовка LUKS и хранить их в разных местах, чтобы обеспечить возможность восстановления зашифрованных данных даже в случае потери или недоступности одной резервной копии.
Чтобы восстановить заголовок LUKS из резервной копии, вы можете использовать следующую команду:
Code:
sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file <backup-file>
При выполнении этой команды cryptsetup восстановит заголовок LUKS из указанного файла резервной копии на зашифрованное устройство. Важно отметить, что восстановление заголовка LUKS перезапишет все существующие заголовки и ключевые материалы и может сделать зашифрованные данные недоступными, если файл резервной копии недействителен или поврежден.
На этом моя лекция закончена, можете задавать вопросы по теме лекции
Более подробные инструкции по различным сценариям использования LUKS будут в моих дальнейших статьях.