Плагин шифрования управления ключами файлов
Шифрование данных MariaDB в состоянии покоя (data-at-rest encryption) требует использования плагина управления ключами и шифрования (key management and encryption plugin). Эти плагины отвечают как за управление ключами шифрования, так и за фактическое шифрование и расшифрование данных.
MariaDB поддерживает использование нескольких ключей шифрования. Каждый ключ шифрования использует 32-битовое целое число в качестве идентификатора ключа. Если конкретный плагин поддерживает ротацию ключей, то ключи шифрования также могут быть сменены, что создаёт новую версию ключа шифрования.
Плагин управления ключами файлов, поставляемый с MariaDB, является плагином управления ключами и шифрования (key management and encryption plugin), который считывает ключи шифрования из файла в формате обычного текста.
Обзор
Плагин управления ключами файлов — самый простой в настройке плагин управления ключами и шифрования для пользователей, которые хотят использовать шифрование данных в состоянии покоя (data-at-rest encryption). Некоторые из основных функций плагина:
- Он считывает ключи шифрования из файла ключей в формате обычного текста.
- В качестве дополнительной меры защиты файл ключей в формате обычного текста может быть зашифрован.
- Он поддерживает несколько ключей шифрования.
- Он не поддерживает ротацию ключей.
- Он поддерживает два разных алгоритма для шифрования данных.
Он также может служить примером и отправной точкой при разработке плагина управления ключами и шифрования с использованием API плагина шифрования (encryption plugin API).
Установка пакета плагина управления ключами файлов
Плагин управления ключами файлов включен в пакеты MariaDB в виде file_key_management.so или file_key_management.dll разделяемой библиотеки. Разделяемая библиотека находится в основном пакете сервера, поэтому дополнительные установки пакетов не нужны.
Установка плагина
Хотя разделяемая библиотека плагина поставляется с MariaDB по умолчанию, сам плагин не устанавливается автоматически. Плагин можно установить, указав --plugin-load или --plugin-load-add параметры. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров (option group) в файле параметров. Например:
[mariadb] ... plugin_load_add = file_key_management
Удаление плагина
Перед удалением плагина убедитесь, что шифрование данных в состоянии покоя (data-at-rest encryption) полностью отключено и что MariaDB больше не нуждается в плагине для расшифрования таблиц или других файлов.
Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN. Например:
UNINSTALL SONAME 'file_key_management';
Если вы установили плагин, указав --plugin-load или --plugin-load-add параметры в соответствующей группе параметров сервера в файле параметров (option group) в файле параметров, то эти параметры следует удалить, чтобы предотвратить загрузку плагина при следующем запуске сервера.
Создание файла ключей
Для шифрования ваших таблиц с помощью плагина управления ключами файлов сначала необходимо создать файл, содержащий ключи шифрования. Файл должен содержать две части информации для каждого ключа шифрования. Во-первых, каждый ключ шифрования должен быть идентифицирован 32-битным целым числом в качестве идентификатора ключа. Во-вторых, сам ключ шифрования должен быть предоставлен в шестнадцатеричном кодированном формате. Эти две части информации должны быть разделены точкой с запятой. Например, файл отформатирован следующим образом:
<encryption_key_id1>;<hex-encoded_encryption_key1> <encryption_key_id2>;<hex-encoded_encryption_key2>
Вы также можете необязательно зашифровать файл ключей, чтобы сделать его менее доступным из файловой системы. Это подробно описано в следующем разделе.
Плагин управления ключами файлов использует алгоритм Advanced Encryption Standard (AES) для шифрования данных, который поддерживает ключи шифрования размером 128 бит, 192 бит и 256 бит. Поэтому плагин также поддерживает ключи шифрования размером 128 бит, 192 бит и 256 бит.
Вы можете сгенерировать случайные ключи шифрования с помощью команды openssl rand. Например, чтобы создать случайный ключ шифрования размером 256 бит (32 байта), вы можете выполнить следующую команду:
$ openssl rand -hex 32 a7addd9adea9978fda19f21e6be987880e68ac92632ca052e5bb42b1a506939a
Файл ключей всё ещё должен иметь идентификатор ключа для каждого добавленного ключа шифрования в начале каждой строки. Идентификаторы ключей не обязательно должны быть непрерывными.
Например, чтобы добавить три новых ключа шифрования в новый файл ключей, вы можете выполнить следующее:
$ (echo -n "1;" ; openssl rand -hex 32 ) | sudo tee -a /etc/mysql/encryption/keyfile $ (echo -n "2;" ; openssl rand -hex 32 ) | sudo tee -a /etc/mysql/encryption/keyfile $ (echo -n "100;" ; openssl rand -hex 32 ) | sudo tee -a /etc/mysql/encryption/keyfile
Новый файл ключей будет выглядеть примерно так после этого шага:
1;a7addd9adea9978fda19f21e6be987880e68ac92632ca052e5bb42b1a506939a 2;49c16acc2dffe616710c9ba9a10b94944a737de1beccb52dc1560abfdd67388b 100;8db1ee74580e7e93ab8cf157f02656d356c2f437d548d5bf16bf2a56932954a3
Идентификаторы ключей позволяют вам ссылаться на ключи шифрования из MariaDB. В приведённом выше примере вы можете сослаться на эти ключи шифрования, используя идентификаторы ключей 1, 2 или 100 с опцией таблицы ENCRYPTION_KEY_ID или с переменными системы, такими как innodb_default_encryption_key_id. Вам не обязательно нужны несколько ключей шифрования — ключ шифрования с идентификатором ключа 1 является единственным обязательным ключом шифрования.
Настройка пути к незашифрованному файлу ключей
Если файл ключей незашифрован, плагину управления ключами файлов требуется только настройка системной переменной file_key_management_filename.
Эту системную переменную можно указать в качестве аргументов командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров (option group) в файле параметров. Например:
[mariadb] ... loose_file_key_management_filename = /etc/mysql/encryption/keyfile
Обратите внимание, что указан префикс параметра loose. Этот префикс параметра используется в том случае, если плагин ещё не установлен.
Шифрование файла ключей
Включив плагин управления ключами файлов и установив соответствующий путь в системной переменной file_key_management_filename, вы можете начать использование плагина для управления вашими ключами шифрования. Однако это несёт в себе риск безопасности, поскольку ключи хранятся в открытом виде на вашей системе. Вы можете уменьшить эту уязвимость с помощью прав доступа к файлам, но лучше зашифровать весь файл ключей, чтобы ещё больше ограничить доступ.
Некоторые важные моменты при шифровании файла ключей:
- В настоящее время MariaDB поддерживает только режим Cipher Block Chaining (CBC) алгоритма Advanced Encryption Standard (AES) для шифрования файла ключей.
- Размер ключа шифрования может быть 128 бит, 192 бит или 256 бит.
- Ключ шифрования создаётся из хэша SHA-1 пароля шифрования.
- Длина пароля шифрования составляет максимум 256 символов.
Вы можете сгенерировать случайный пароль шифрования с помощью команды openssl rand. Например, чтобы создать случайный пароль шифрования длиной 256 символов, вы можете выполнить следующую команду:
$ sudo openssl rand -hex 128 > /etc/mysql/encryption/keyfile.key
Вы можете зашифровать файл ключей с помощью команды openssl enc. Например, чтобы зашифровать файл ключей с паролем шифрования, созданным на предыдущем шаге, вы можете выполнить следующую команду:
$ sudo openssl enc -aes-256-cbc -md sha1 \ -pass file:/etc/mysql/encryption/keyfile.key \ -in /etc/mysql/encryption/keyfile \ -out /etc/mysql/encryption/keyfile.enc
Это выполнит чтение незашифрованного файла keyfile созданного выше, и создаст новый зашифрованный файл keyfile.enc, используя пароль шифрования, хранящийся в keyfile.key. После завершения подготовки системы, вы можете удалить незашифрованный файл keyfile, так как он больше не нужен.
Настройка пути к зашифрованному файлу ключей
Если файл ключей зашифрован, плагину управления ключами файлов требуются две системные переменные: file_key_management_filename и file_key_management_filekey.
Системная переменная file_key_management_filekey может быть задана двумя способами:
- Это может быть фактический пароль шифрования в открытом виде. Это не рекомендуется, так как пароль шифрования в открытом виде будет виден в выводе команды
SHOW VARIABLES. - Если он начинается с префикса
FILE:, он может представлять собой путь к файлу, содержащему пароль шифрования в открытом виде.
Эти системные переменные могут быть заданы в качестве аргументов командной строки для mysqld или в соответствующей группе параметров сервера в файле параметров (option group) в файле параметров. Например:
[mariadb] ... loose_file_key_management_filename = /etc/mysql/encryption/keyfile.enc loose_file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key
Обратите внимание, что указан префикс параметра loose. Этот префикс параметра используется в том случае, если плагин ещё не установлен.
Выбор алгоритма шифрования
Плагин управления ключами файлов в настоящее время поддерживает два алгоритма шифрования для шифрования данных: AES_CBC и AES_CTR. Оба алгоритма используют Advanced Encryption Standard (AES) в различных режимах. AES использует блоки размером 128 бит и поддерживает ключи размером 128 бит, 192 бит и 256 бит. Режимы:
- Режим
AES_CBCиспользует AES в режиме Cipher Block Chaining (CBC). - Режим
AES_CTRиспользует AES в двух несколько отличающихся режимах в разных контекстах. При шифровании страниц табличного пространства (например, страниц таблиц InnoDB, XtraDB и Aria) он использует AES в режиме Counter (CTR). При шифровании временных файлов (где шифрованный текст может быть больше, чем открытый текст) он использует AES в аутентифицированном режиме Galois/Counter Mode (GCM).
Рекомендуемый алгоритм — AES_CTR, но этот алгоритм доступен только при сборке MariaDB с последними версиями OpenSSL. Если сервер собран с использованием wolfSSL или yaSSL, этот алгоритм недоступен. См. TLS и криптографические библиотеки, используемые MariaDB для получения дополнительной информации о применяемых библиотеках на разных платформах.
Настройка алгоритма шифрования
Алгоритм шифрования можно настроить, задав системную переменную file_key_management_encryption_algorithm.
Эта системная переменная может принимать одно из следующих значений:
| Значение системной переменной | Описание |
|---|---|
AES_CBC |
Данные шифруются с помощью AES в режиме Cipher Block Chaining (CBC). Это значение по умолчанию. |
AES_CTR |
Данные шифруются с помощью AES в режиме Counter (CTR) или аутентифицированном режиме Galois/Counter Mode (GCM), в зависимости от контекста. Поддержка этого режима реализована только в некоторых сборках. Подробнее см. предыдущий раздел. |
Эта системная переменная может быть указана в качестве аргумента командной строки для mysqld или указана в соответствующей группе параметров сервера в группе опций в файле опций. Например:
[mariadb] ... loose_file_key_management_encryption_algorithm = AES_CTR
Обратите внимание, что используется префикс опции loose. Этот префикс используется на случай, если плагин еще не установлен.
Обратите внимание, что эта переменная не влияет на алгоритм, используемый MariaDB для расшифровки файла ключа. Она только влияет на алгоритм шифрования, используемый MariaDB для шифрования и расшифрования данных. В настоящее время MariaDB поддерживает только алгоритм шифрования файла ключа — Cipher Block Chaining (CBC) в режиме Advanced Encryption Standard (AES).
Использование плагина управления ключами файлов
После включения плагина управления ключами файлов его можно использовать, создавая зашифрованную таблицу:
CREATE TABLE t (i int) ENGINE=InnoDB ENCRYPTED=YES
Теперь таблица t будет зашифрована с использованием ключа шифрования из файла ключа.
Дополнительную информацию об использовании шифрования см. в разделе Шифрование данных в состоянии покоя.
Использование нескольких ключей шифрования
Плагин управления ключами файлов поддерживает использование нескольких ключей шифрования. Каждый ключ шифрования может быть определен с помощью уникального 32-битного целого числа в качестве идентификатора ключа.
При шифровании таблиц InnoDB ключ, используемый для шифрования таблиц, можно изменить.
При шифровании таблиц Aria ключ, используемый для шифрования таблиц, в настоящее время изменить нельзя.
Ротация ключей
Плагин управления ключами файлов в настоящее время не поддерживает ротацию ключей. Подробнее см. MDEV-20713.
Версии
| Версия | Статус | Введена |
|---|---|---|
| 1.0 | Стабильная | MariaDB 10.1.18 |
| 1.0 | Gamma | MariaDB 10.1.13 |
| 1.0 | Альфа | MariaDB 10.1.3 |
Системные переменные
file_key_management_encryption_algorithm
-
Описание: Эта системная переменная используется для определения алгоритма, который плагин будет использовать для шифрования данных.
- Рекомендуемый алгоритм —
AES_CTR, но этот алгоритм доступен только при сборке MariaDB с последними версиями OpenSSL. Если сервер собран с использованием wolfSSL или yaSSL, этот алгоритм недоступен. См. TLS и криптографические библиотеки, используемые MariaDB для получения дополнительной информации о применяемых библиотеках на разных платформах.
- Рекомендуемый алгоритм —
-
Командная строка:
--file-key-management-encryption-algorithm=value - Сфера действия: Глобальная
- Динамическая: Нет
-
Тип данных:
enumerated -
Значение по умолчанию:
AES_CBC -
Допустимые значения:
AES_CBC,AES_CTR
file_key_management_filekey
-
Описание: Эта системная переменная используется для определения пароля шифрования, используемого для расшифровки файла ключа, определенного
file_key_management_filename.- Если значение этой системной переменной имеет префикс
FILE:, то оно интерпретируется как путь к файлу, содержащему текстовый пароль шифрования. - Если значение этой системной переменной не имеет префикса
FILE:, то оно интерпретируется как текстовый пароль шифрования. Однако это не рекомендуется. - Пароль шифрования имеет максимальную длину 256 символов.
- В настоящее время MariaDB поддерживает только алгоритм шифрования файла ключа — Cipher Block Chaining (CBC) в режиме Advanced Encryption Standard (AES). Размер ключа шифрования может составлять 128, 192 или 256 бит. Ключ шифрования рассчитывается с помощью хэширования SHA-1 пароля шифрования.
- Если значение этой системной переменной имеет префикс
-
Командная строка:
--file-key-management-filekey=value - Сфера действия: Глобальная
- Динамическая: Нет
-
Тип данных:
string - Значение по умолчанию: (пустое)
file_key_management_filename
-
Описание: Эта системная переменная используется для определения пути к файлу, содержащему ключи шифрования. Если
file_key_management_filekeyустановлено, этот файл может быть зашифрован с использованием режима Cipher Block Chaining (CBC) в режиме Advanced Encryption Standard (AES). -
Командная строка:
--file-key-management-filename=value - Сфера действия: Глобальная
- Динамическая: Нет
-
Тип данных:
string - Значение по умолчанию: (пустое)
Параметры
file_key_management
-
Описание: Управляет тем, как сервер должен обрабатывать плагин при запуске.
- Допустимые значения:
-
OFF— отключает плагин, не удаляя его из таблицыmysql.plugins. -
ON— включает плагин. Если плагин не может быть инициализирован, сервер все равно продолжит запуск, но плагин будет отключён. -
FORCE— включает плагин. Если плагин не может быть инициализирован, сервер завершит запуск с ошибкой. -
FORCE_PLUS_PERMANENT— включает плагин. Если плагин не может быть инициализирован, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя удалить с помощьюUNINSTALL SONAMEилиUNINSTALL PLUGINво время работы сервера.
-
- См. Обзор плагинов: Настройка активации плагинов при запуске сервера для получения дополнительной информации.
- Допустимые значения:
-
Командная строка:
--file-key-management=value -
Тип данных:
enumerated -
Значение по умолчанию:
ON -
Допустимые значения:
OFF,ON,FORCE,FORCE_PLUS_PERMANENT
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/file-key-management-encryption-plugin/