В сегодняшней статье мы будем выбирать лучший способ защиты данных в Linux. Рассмотрим разные средства защиты: полнодисковое шифрование (LUKS), шифрование файлов и папок (eCryptFS) и файловой системы ZFS.
Еще по теме: Экстренное удаление при вводе специального пароля Linux
Способ защиты данных в Linux
eCryptFS поддерживает несколько алгоритмов шифрования, включая AES, Blowfish, DES3_EDE, Twofish, CAST6 и CAST5. Так же как и в других случаях, использовать отличный от AES алгоритм шифрования смысла нет: надежность AES достаточна, а скорость работы этого шифра намного превышает скорость работы альтернатив благодаря аппаратному ускорению набором инструкций AES-NI.
eCryptFS шифрует каждый файл по отдельности; опционально могут быть зашифрованы и имена файлов и папок (в этом случае налагаются ограничения на длину имен файлов, которая не может превышать 143 символа ASCII).
Каждый файл шифруется сгенерированным случайным образом сессионным ключом, который в зашифрованном виде (пользовательским ключом или паролем) сохраняется в метаданных. Сами метаданные записываются в заголовок файла, что позволяет просто скопировать зашифрованный файл на другой компьютер и расшифровать его штатным образом.
Такой способ защиты вроде бы и позволяет обойти ограничения, налагаемые LUKS: чтобы создать или восстановить резервную копию, ключ шифрования не нужен — копируются и восстанавливаются зашифрованные файлы, каждый из которых содержит все необходимое для их расшифровки. Но к сожалению, это, наверное, единственное достоинство eCryptFS и подобных криптографических файловых систем. К недостаткам относятся:
Невысокая производительность. В каждый зашифрованный файл добавляется заголовок, который содержит метаданные шифрования. Особенно сильно страдает скорость доступа к небольшим файлам.
Низкий уровень безопасности. Наружу утекают данные о количестве файлов в каталогах, размере и дате модификации каждого файла.
При шифровании папок в сетевых хранилищах нет возможности сменить пароль шифрования. Скомпрометированный пароль означает, что необходимо полностью перешифровать данные.
Функциональные ограничения. При шифровании имен файлов и папок длина имени файла не может превышать 143 символа ASCII. В зависимости от некоторых параметров могут быть и другие ограничения (например, невозможно использовать сетевые папки с NFS).
Не работают некоторые функции файловой системы. В частности, в зашифрованных папках не действует механизм дедупликации.
Все эти ограничения привели к тому, что разработчики серьезно задумались о создании такой системы защиты данных, которая сочетала бы достоинства шифрования дисков и папок без их недостатков. И такая система была создана — в рамках проекта OpenZFS 2.0.
Файловая система ZFS
Файловая система ZFS, корни которой растут из Solaris, давно доступна пользователям Linux и FreeBSD. В некоторые дистрибутивы OpenZFS 2.0 входит в качестве штатного пакета, в других ее можно установить отдельно. Большинство дистрибутивов без проблем загружается с разделов ZFS.
ZFS — нечто большее, чем просто файловая система. Средствами ZFS можно создавать многодисковые конфигурации и управлять ими без использования mdadm и LVM, создавать и реплицировать снапшоты, в том числе на удаленных серверах. Неудивительно, что и для защиты данных разработчики ZFS разработали свою собственную встроенную систему, не использующую dm-crypt.
Почему ZFS считают лучшим способом защиты данных в Linux
Пожалуй, основной момент в том, что встроенное шифрование ZFS позиционируется в качестве осовремененной замены традиционным средствам шифрования дисков наподобие LUKS или встроенного в ОС FreeBSD GELI и при этом обладает рядом преимуществ, ранее доступных только при использовании криптографических файловых систем. Шифрование в ZFS тесно интегрировано с функциями файловой системы. В отличие от LUKS, на зашифрованных томах без ввода ключа шифрования можно выполнять большинство, если не все команды zfs и zpool, включая операции по верификации целостности данных, снапшоты и их репликацию, дедупликацию данных и многое другое. Для сравнения: если диск зашифрован средствами dm-crypt, то для выполнения подобных операций потребуется сначала ввести ключ шифрования.
В сравнении с шифрованием на уровне файловой системы (eCryptFS), которое также позволяет создавать и реплицировать зашифрованные снапшоты и контролировать целостность зашифрованных данных без ключа, шифрование ZFS имеет несколько преимуществ. Здесь и значительно более высокая скорость шифрования (особенно заметно на небольших файлах), и более высокий уровень безопасности: на сторону не утекают данные о числе и размерах папок и файлов и времени их модификации. Разумеется, ключ шифрования можно сменить в любой момент (eCryptFS этого сделать не позволяет), а при необходимости (например, при продаже диска или отправке в сервис) — практически мгновенно уничтожить все данные, просто затерев метаданные шифрования.
Разработчики утверждают, что использование встроенного в ZFS шифрования позволяет решить следующие проблемы традиционных методов.
Проблемы с шифрованием папок (ecryptfs)
- Если данные шифруются перед сжатием, они становятся несжимаемыми.
- Не работает дедупликация.
- Метаданные шифрования записываются в заголовок каждого файла (увеличивается объем хранимых данных, особенно если хранится множество мелких файлов).
Полнодисковое шифрование (dm-crypt)
- Многократное шифрование повторяющихся данных.
- С зашифрованным диском невозможно проводить какие‑либо операции, если не загружен ключ шифрования.
- Без ключей шифрования невозможны резервные копии, снапшоты, репликация.
Не обошлось и без некоторых компромиссов. Во‑первых, без ключа шифрования можно увидеть имена и размеры файловых систем, а также данные, доступные с помощью команд zfs и zpool. Злоумышленнику эти данные вряд ли принесут пользу, в отличие от информации о структуре файловой системы, числе и размерах зашифрованных файлов, которая утекает при использовании eCryptFS.
Разработчики упоминают еще один тип данных, который не защищается на зашифрованных ZFS томах. Это таблицы дедупликации, которые создаются, если пользователь включает дедупликацию данных. Каждый блок данных, дублирующийся или нет, по‑прежнему зашифрован, но анализ таблиц дедупликации может показать, какие именно блоки на диске дублируются. Ценность этой информации для злоумышленника сомнительна, так что этот момент нельзя считать серьезной уязвимостью. В то же время при включении дедупликации меняется алгоритм генерации IV и соли (поскольку идентичные блоки данных должны совпадать и после того, как они будут зашифрованы), так что при хранении критических данных дедупликацию рекомендуется отключить.
Еще одна потенциальная уязвимость — CRIME (Compression Ratio Info-leak Made Easy) может быть реализована в сценарии, когда данные сжимаются перед тем, как быть зашифрованными.
Как работает шифрование в ZFS
В качестве алгоритма шифрования используется шифр AES-256 в режиме GCM; опционально можно выбрать AES с длиной ключа в 128, 192 или 256 бит в режимах CCM или GCM. Информация о том, какой именно выбран шифр, сохраняется в метаданных шифрования. Ключ шифрования защищается ключом, генерирующимся произвольным числом итераций функции PBKDF2. По умолчанию используется 350 000 итераций, минимальное значение — 100 000. Для создания зашифрованного пула используется следующая команда:
1 |
# zfs create -o encryption=[algorithm] -o keylocation=[location] -o keyformat=[format] poolname/datasetname |
Если ты создаешь зашифрованный загрузочный раздел и хочешь, чтобы он монтировался автоматически при загрузке, то единственный доступный вариант шифрования — с использованием двоичного ключа (файла, путь к которому указывается в формате file:///path/to/keyfile). Размер ключа шифрования — строго 32 байта; генерируют случайный ключ командой
1 |
# if=/dev/urandom bs=32 count=1 of=/path/to/keyfile |
Для прочих томов можно использовать как двоичный ключ, так и пароль. Длина пароля может быть от 8 до 512 символов.
1 |
# zfs create -o encryption=aes-256-gcm -o keyformat=passphrase poolname/ datasetname |
Важно отметить, что ZFS (так же, впрочем, как и остальные современные системы, включая BitLocker) не будет шифровать данные напрямую ключом, который генерируется на основе пароля или двоичного ключа. Для собственно шифрования используется мастер‑ключ, который, в свою очередь, защищается ключом шифрования (двоичным или ключом, получающимся в результате преобразования пароля N итерациями функции PBKDF2).
Таким образом, можно перечислить следующие свойства шифрования ZFS:
Скорость работы сравнима со скоростью систем шифрования диска и не зависит от размера файлов.
Защиту можно усилить, указав повышенное число итераций хеширования в функции преобразования пароля.
Количество и критичность «утекающих» из зашифрованного пула данных относительно невелики, если не использовать функцию дедупликации.
Дедупликация данных поддерживается, но негативно влияет на безопасность.
Поддерживаются функции «холодного» резервного копирования посредством снапшотов и их репликации. Ключ шифрования при этом не требуется.
Можно защищать как целые диски, так и отдельные наборы данных.
Какой способ защиты данных в Linux лучше?
Всего пару лет назад выбор средств шифрования для Linux был ограничен двумя типами: шифрование всего диска или раздела (как вариант — контейнера) либо шифрование файлов и папок с использованием eCryptFS или аналогов, работающих через FUSE (к примеру, EncFS или gocryptfs). У обоих типов шифрования есть свои достоинства и недостатки.
Шифрование диска или раздела защищает весь массив данных; единственная утечка, которая возможна в отдельных случаях, — возможность узнать количество занятого и свободного места на зашифрованном разделе. В то же время любые операции с зашифрованным диском или разделом требуют обязательного монтирования всего объема данных; проверить целостность файлов или сделать резервную копию без ввода ключа шифрования не удастся.
Криптографические файловые системы наподобие eCryptFS шифруют содержимое каждого файла в отдельности, что позволяет проводить ряд операций над файловой системой без монтирования зашифрованных папок. Доступны команды контроля целостности файловой системы, дефрагментации, создания и синхронизации снапшотов. Файлы и папки можно переносить между системами, можно создавать и восстанавливать резервные копии с использованием в том числе удаленных компьютеров, в безопасности которых нет уверенности. Все это доступно без ввода ключей шифрования или расшифровки данных.
В то же время распространенные криптографические файловые системы в Linux налагают ряд функциональных ограничений, основные из которых — жесткие ограничения на длину имен файлов и папок и относительно невысокая скорость работы, особенно при шифровании небольших файлов. Для зашифрованных папок, как правило, не работают функции дедупликации, доступные в таких файловых системах, как BTRFS. Сильно страдает и безопасность решения: скомпрометированный ключ шифрования невозможно сменить, а взлом пароля от единственного зашифрованного файла позволит расшифровать и все остальное содержимое зашифрованной папки. Без ключа шифрования доступен значительный объем метаданных: информация о структуре папок, количестве и размере файлов, дата последней модификации.
Представленная в OpenZFS в 2019 году система шифрования native ZFS encryption, работающая в Linux и FreeBSD, успешно решает проблемы обоих типов защиты, предлагая удачный компромисс между безопасностью, скоростью работы и функциональностью. Без ключей шифрования доступны функции проверки целостности файловой системы, снапшотов и их синхронизации, а также дедупликации данных (если ее включить, то таблицы дедупликации будут храниться в открытом виде, что является уступкой с точки зрения безопасности). В то же время на сторону не утекают данные о размерах файлов и папок, время модификации файлов; нет присущих криптографическим файловым системам ограничений на длину имен файлов. Производительность шифрования высокая, сравнима с со скоростью традиционных систем шифрования дисков.
Какой способ шифрования выбрать? Если ты используешь ZFS или можешь использовать ZFS — выбор однозначен: встроенное шифрование ZFS обеспечит высокую скорость работы, достаточный уровень безопасности и удобства. Если ты единственный пользователь, а ZFS по какой‑то причине использовать нельзя — LUKS по‑прежнему остается быстрым и безопасным вариантом. В многопользовательских системах без ZFS имеет смысл включить шифрование средствами файловой системы: в этом случае у администратора будет возможность создавать и восстанавливать резервные копии без монтирования каждой зашифрованной папки каждого пользователя системы.
Наконец, иногда у тебя просто не будет альтернативы: некоторые производители сетевых хранилищ позволяют использовать единственный метод. Synology — шифрование сетевых папок (eCryptFS). Asustor — шифрование сетевых папок (eCryptFS) на внутренних томах либо шифрование раздела (LUKS) на томах MyArchive. QNAP (на моделях с процессорами Intel и операционной системой QTS) позволяет создать многослойную защиту: SED, LUKS и eCryptFS могут использоваться в любых комбинациях.
Еще по теме: Установка Linux на шифрованный диск с авторазблокировкой