Открыть сервис

Главный ключ сервера

Главный ключ сервера (англ. server master key, SMK) — это симметричный криптографический ключ, используемый в системах управления реляционными базами данных (СУБД) для шифрования других ключей и секретных данных, хранящихся на сервере. Он является корневым элементом иерархии шифрования, обеспечивая защиту конфиденциальной информации на уровне экземпляра сервера. Главный ключ сервера создаётся автоматически при установке СУБД и хранится в зашифрованном виде с использованием ключа, производного от учётных данных служебной учётной записи сервера (в ОС Windows) или с помощью мастер-ключа службы (в Linux).

Назначение и роль

Основная функция главного ключа сервера — защита нижележащих уровней криптографической иерархии. Он используется для шифрования:

  • Главных ключей баз данных (Database Master Key, DMK), которые, в свою очередь, защищают сертификаты, асимметричные ключи и симметричные ключи внутри конкретной базы данных.
  • Сертификатов и асимметричных ключей, хранящихся на уровне экземпляра.
  • Секретных данных, связанных с соединениями, учётными записями и другими конфиденциальными параметрами.

Таким образом, компрометация главного ключа сервера потенциально позволяет расшифровать все защищённые данные на сервере, что делает его критически важным элементом безопасности.

Механизм работы

Создание и хранение

Главный ключ сервера генерируется при первом запуске СУБД после установки. В Microsoft SQL Server, например, он создаётся с использованием алгоритма AES-256. Ключ шифруется с помощью мастер-ключа службы (Service Master Key), который, в свою очередь, защищается с использованием API защиты данных Windows (DPAPI) на основе учётной записи, под которой запущена служба SQL Server. В случае смены учётной записи службы или переноса сервера на другую машину, необходимо восстановить доступ к главному ключу, используя резервную копию и пароль.

Иерархия шифрования

Структура защиты строится по принципу «цепочки доверия»:

  1. Мастер-ключ службы (Service Master Key) — защищает главный ключ сервера.
  2. Главный ключ сервера (Server Master Key) — защищает главные ключи баз данных и другие ключи уровня экземпляра.
  3. Главный ключ базы данных (Database Master Key) — защищает сертификаты, асимметричные и симметричные ключи внутри базы данных.
  4. Ключи шифрования данных — непосредственно шифруют данные в таблицах (например, при использовании прозрачного шифрования данных TDE).

Резервное копирование и восстановление

Резервная копия главного ключа сервера создаётся с помощью команды BACKUP SERVICE MASTER KEYSQL 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

  1. Создаётся главный ключ базы данных (DMK), который автоматически шифруется главным ключом сервера (SMK).
  2. Создаётся сертификат, защищённый DMK.
  3. Создаётся ключ шифрования базы данных (DEK), который шифруется сертификатом.
  4. Включается TDE для базы данных, и DEK шифрует все страницы данных на диске.

Шифрование табличного пространства в MySQL

  1. Устанавливается плагин keyring (например, keyring_file).
  2. Создаётся мастер-ключ (автоматически или вручную).
  3. При создании таблицы с опцией ENCRYPTION='Y' генерируется ключ табличного пространства, который шифруется мастер-ключом.
  4. Мастер-ключ хранится в файле 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 →