Главный ключ сервера
Главный ключ сервера (англ. server master key, SMK) — это симметричный криптографический ключ, используемый в системах управления реляционными базами данных (СУБД) для шифрования других ключей и секретных данных, хранящихся на сервере. Он является корневым элементом иерархии шифрования, обеспечивая защиту конфиденциальной информации на уровне экземпляра сервера. Главный ключ сервера создаётся автоматически при установке СУБД и хранится в зашифрованном виде с использованием ключа, производного от учётных данных служебной учётной записи сервера (в ОС Windows) или с помощью мастер-ключа службы (в Linux).
Назначение и роль
Основная функция главного ключа сервера — защита нижележащих уровней криптографической иерархии. Он используется для шифрования:
- Главных ключей баз данных (Database Master Key, DMK), которые, в свою очередь, защищают сертификаты, асимметричные ключи и симметричные ключи внутри конкретной базы данных.
- Сертификатов и асимметричных ключей, хранящихся на уровне экземпляра.
- Секретных данных, связанных с соединениями, учётными записями и другими конфиденциальными параметрами.
Таким образом, компрометация главного ключа сервера потенциально позволяет расшифровать все защищённые данные на сервере, что делает его критически важным элементом безопасности.
Механизм работы
Создание и хранение
Главный ключ сервера генерируется при первом запуске СУБД после установки. В Microsoft SQL Server, например, он создаётся с использованием алгоритма AES-256. Ключ шифруется с помощью мастер-ключа службы (Service Master Key), который, в свою очередь, защищается с использованием API защиты данных Windows (DPAPI) на основе учётной записи, под которой запущена служба SQL Server. В случае смены учётной записи службы или переноса сервера на другую машину, необходимо восстановить доступ к главному ключу, используя резервную копию и пароль.
Иерархия шифрования
Структура защиты строится по принципу «цепочки доверия»:
- Мастер-ключ службы (Service Master Key) — защищает главный ключ сервера.
- Главный ключ сервера (Server Master Key) — защищает главные ключи баз данных и другие ключи уровня экземпляра.
- Главный ключ базы данных (Database Master Key) — защищает сертификаты, асимметричные и симметричные ключи внутри базы данных.
- Ключи шифрования данных — непосредственно шифруют данные в таблицах (например, при использовании прозрачного шифрования данных TDE).
Резервное копирование и восстановление
Резервная копия главного ключа сервера создаётся с помощью команды BACKUP SERVICE MASTER KEY (в SQL Server) и защищается паролем. Восстановление выполняется командой RESTORE SERVICE MASTER KEY. Без резервной копии и пароля доступ к зашифрованным данным может быть утрачен при сбое оборудования или смене учётной записи службы.
Применение в различных СУБД
Microsoft SQL Server
В SQL Server главный ключ сервера (здесь он называется Service Master Key) является обязательным элементом. Он автоматически создаётся при установке и используется для шифрования всех остальных ключей. При первом включении шифрования данных (например, TDE) или создании главного ключа базы данных, система автоматически шифрует его с помощью SMK.
Oracle Database
В Oracle Database аналогичную роль выполняет мастер-ключ TDE (Transparent Data Encryption Master Key). Он хранится в файловом хранилище (wallet) или в аппаратном модуле безопасности (HSM) и используется для шифрования ключей табличных пространств. В отличие от SQL Server, мастер-ключ в Oracle не привязан к учётной записи службы, а управляется администратором.
PostgreSQL
В PostgreSQL нет встроенного механизма «главного ключа сервера» в классическом понимании. Шифрование данных на уровне сервера реализуется через расширения (например, pgcrypto) или через прозрачное шифрование на уровне файловой системы (LUKS, dm-crypt). Однако в некоторых коммерческих сборках (например, EDB Postgres Advanced Server) может использоваться собственная иерархия ключей.
MySQL / MariaDB
В MySQL и MariaDB встроенное шифрование данных (InnoDB tablespace encryption) использует мастер-ключ, который хранится в файле ключей (keyring). Этот ключ защищает ключи табличных пространств. Механизм управления мастер-ключом зависит от используемого плагина keyring (например, keyring_file, keyring_encrypted_file).
Управление и безопасность
Рекомендации по защите
- Регулярное резервное копирование главного ключа сервера и хранение копии в надёжном месте, отдельно от резервных копий баз данных.
- Использование сложных паролей для защиты резервной копии ключа.
- Ограничение доступа к файлам, содержащим ключи (например, файлы keyring в MySQL), только учётной записи службы СУБД и администраторам.
- Применение аппаратных модулей безопасности (HSM) для хранения мастер-ключа в организациях с высокими требованиями к безопасности.
- Периодическая смена главного ключа сервера (ротация) в соответствии с политикой безопасности.
Угрозы и уязвимости
- Компрометация учётной записи службы — если злоумышленник получает доступ к учётной записи, под которой работает СУБД, он может расшифровать главный ключ сервера (в SQL Server).
- Потеря резервной копии — без резервной копии и пароля восстановление данных после сбоя может быть невозможным.
- Физический доступ к серверу — при наличии физического доступа к дискам можно попытаться извлечь ключи из памяти или файлов подкачки.
Примеры использования
Включение прозрачного шифрования данных (TDE) в SQL Server
- Создаётся главный ключ базы данных (DMK), который автоматически шифруется главным ключом сервера (SMK).
- Создаётся сертификат, защищённый DMK.
- Создаётся ключ шифрования базы данных (DEK), который шифруется сертификатом.
- Включается TDE для базы данных, и DEK шифрует все страницы данных на диске.
Шифрование табличного пространства в MySQL
- Устанавливается плагин keyring (например,
keyring_file). - Создаётся мастер-ключ (автоматически или вручную).
- При создании таблицы с опцией
ENCRYPTION='Y'генерируется ключ табличного пространства, который шифруется мастер-ключом. - Мастер-ключ хранится в файле keyring, защищённом правами доступа ОС.
Интересные факты
- В SQL Server мастер-ключ службы можно сбросить (команда
ALTER SERVICE MASTER KEY REGENERATE), но это приведёт к перешифрованию всех ключей, что может занять значительное время на больших серверах. - В некоторых версиях Oracle Database мастер-ключ TDE можно хранить в аппаратном модуле безопасности (HSM), что обеспечивает дополнительный уровень защиты от кражи данных.
- В PostgreSQL нет встроенного мастер-ключа, но существуют сторонние решения, такие как
pg_tde, которые добавляют иерархию ключей.
Источники
- Microsoft Docs: «Service Master Key» (SQL Server)
- Oracle Documentation: «Transparent Data Encryption» (Oracle Database)
- MySQL Reference Manual: «InnoDB Tablespace Encryption»
- PostgreSQL Documentation: «Encryption Options» (PostgreSQL)
- Статья «Understanding SQL Server Encryption Hierarchy» (TechNet)
- Документация MariaDB: «Encrypting Data at Rest»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →