Создание и хранение главных ключей столбцов для Always Encrypted

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Эта статья содержит подробные сведения о выборе хранилища ключей и создании главных ключей столбцов для постоянного шифрования. Подробные сведения см. в разделе Overview of Key Management for Always Encrypted(Общие сведения об управлении ключами для постоянного шифрования).

Выбор хранилища ключей для главного ключа столбца

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

Следует принимать во внимание две высокоуровневые категории хранилищ ключей — локальные хранилища ключейи централизованные хранилища ключей.

Какое хранилище использовать — локальное или централизованное?

  • Локальные хранилища ключей могут использоваться только приложениями на компьютерах с локальным хранилищем ключей. Другими словами, нужно реплицировать хранилище ключей и ключ на каждый компьютер, где запущено приложение. Примером локального хранилища ключей является хранилище сертификатов Windows. При использовании локального хранилища ключей необходимо убедиться, что хранилище ключей существует на каждом компьютере, на котором размещается приложение, и что компьютер содержит главные ключи столбцов, необходимые приложению для доступа к данным, защищенным с помощью постоянного шифрования. При первой подготовке главного ключа столбца или при изменении (смене) ключа необходимо проверить, что ключ будет развернут на всех компьютерах, где размещены приложения.

  • Централизованные хранилища ключей обслуживают приложения на нескольких компьютерах. Примером централизованного хранилища ключей является хранилище ключей Azure. Централизованное хранилище ключей обычно упрощает управление ключами, так как вам не требуется поддерживать несколько копий главных ключей столбцов на нескольких компьютерах. Убедитесь, что приложения настроены для подключения к централизованному хранилищу ключей.

Какие хранилища ключей поддерживаются клиентскими драйверами с включенным постоянным шифрованием?

Клиентские драйверы с включенным постоянным шифрованием — это драйверы клиента SQL Server со встроенной поддержкой для внедрения постоянного шифрования в клиентские приложения. Они включают в себя несколько встроенных поставщиков распространенных хранилищ ключей. Некоторые драйверы также позволяют реализовывать и регистрировать настраиваемый поставщик хранилища главных ключей столбцов, поэтому вы можете использовать любое хранилище ключей, даже если для него отсутствует встроенный поставщик. Делая выбор между встроенным поставщиком и настраиваемым поставщиком, необходимо учитывать, что использование встроенного поставщика обычно связано с незначительным изменением приложений (в некоторых случаях требуется только изменить строку подключения к базе данных).

Доступные встроенные поставщики зависят от выбранного драйвера, версии драйвера и операционной системы. Обратитесь к документации по Always Encrypted для конкретного драйвера, чтобы определить, какие готовые хранилища ключей поддерживаются, и узнать, поддерживает ли ваш драйвер настраиваемые поставщики хранилищ ключей. См. раздел Разработка приложений с помощью Always Encrypted.

Какие хранилища ключей поддерживаются в инструментах SQL?

SQL Server Management Studio, Azure Data Studio и модуль SqlServer PowerShell поддерживают главные ключи столбцов, хранящиеся в следующих расположениях:

  • хранилищах ключей и управляемых модулях HSM в Azure Key Vault;

    Примечание.

    Управляемые модули HSM требуют использования SSMS 18.9 или более поздних версий и модуля SqlServer PowerShell 21.1.18235 или более поздних версий. Azure Data Studio сейчас не поддерживает управляемые модули HSM.

  • хранилище сертификатов Windows;

  • в таких хранилищах ключей, как аппаратный модуль безопасности, предоставляющий API шифрования следующего поколения (Cryptography Next Generation, CNG) или Cryptography API (CAPI).

Создание главных ключей столбцов в хранилище сертификатов Windows

Главный ключ столбца может быть сертификатом, который хранится в хранилище сертификатов Windows. Драйвер с поддержкой Always Encrypted не проверяет дату окончания срока действия или цепочку центра сертификации. Сертификат просто используется как пара ключей, состоящая из открытого и закрытого ключей.

Чтобы быть допустимым главным ключом столбца, сертификат должен отвечать следующим условиям:

  • являться сертификатом X.509;
  • храниться в одном из расположений хранилища сертификатов: local machine или current user (чтобы создать сертификат в хранилище сертификатов локального компьютера, необходимо иметь права администратора на целевом компьютере);
  • содержать закрытый ключ (рекомендуемая длина ключей в сертификате — 2048 бит или больше);
  • поддерживать обмен ключами.

Существует несколько способов создания сертификата, который является допустимым главным ключом столбца, но проще всего создать самозаверяющий сертификат.

Создание самозаверяющего сертификата с помощью PowerShell

Для создания самозаверяющего сертификата используется командлет New-SelfSignedCertificate . В примере ниже показано создание сертификата, который можно использовать в качестве главного ключа столбца для постоянного шифрования.

# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 

# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048

Создание самозаверяющего сертификата с помощью среды SQL Server Management Studio (SSMS)

Дополнительные сведения см. в разделе Подготовка к работе ключей Always Encrypted с помощью SQL Server Management Studio. Пошаговое руководство, где используется среда SSMS и ключи постоянного шифрования сохраняются в хранилище сертификатов Windows, см. в статье Постоянное шифрование: защита конфиденциальных данных в базе данных SQL с помощью шифрования базы данных и хранение ключей шифрования в хранилище сертификатов Windows.

Предоставление приложениям и пользователям доступа к сертификатам

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

Если главный ключ столбца является сертификатом, хранящимся в расположении хранилища сертификатов под учетной записью текущего пользователя , необходимо экспортировать сертификат с закрытым ключом и импортировать его в расположение хранилища сертификатов для всех учетных записей пользователей, где размещены приложения, которые будут шифровать или расшифровывать данные, хранящиеся в зашифрованных столбцах, или средства для настройки постоянного шифрования и для управления ключами постоянного шифрования (на всех компьютерах с этими приложениями или средствами). Настройка разрешений не требуется — после входа в систему пользователь может обращаться ко всем сертификатам в расположении хранилища сертификатов текущего пользователя.

Использование PowerShell

Для импорта и экспорта сертификата используются командлеты Import-PfxCertificate и Export-PfxCertificate .

Использование консоли управления (MMC)

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

  1. Откройте окно командной строки и введите mmc.
  2. В консоли MMC в меню Файл выберите Добавить или удалить оснастку.
  3. В диалоговом окне Добавление или удаление оснастки нажмите кнопку Добавить.
  4. В диалоговом окне Добавление изолированной оснастки выберите Сертификатыи нажмите кнопку Добавить.
  5. В диалоговом окне оснастки Сертификаты выберите Учетная запись компьютераи нажмите кнопку Готово.
  6. В диалоговом окне Добавление изолированной оснастки нажмите кнопку Закрыть.
  7. В диалоговом окне Добавление или удаление оснастки нажмите кнопку ОК.
  8. В оснастке "Сертификаты" найдите сертификат в личной папке "Сертификаты>", щелкните правой кнопкой мыши сертификат, наведите указатель на все задачи и выберите пункт "Управление закрытыми ключами".
  9. В диалоговом окне Безопасность добавьте разрешение на чтение для учетной записи пользователя (если необходимо).

Создание главных ключей столбцов в хранилище ключей Azure

Azure Key Vault обеспечивает защиту ключей и секретов шифрования. Решение удобно для хранения главных ключей столбцов для Always Encrypted, особенно в том случае, если приложения размещены в Azure. Для создания ключа в хранилище ключей Azureнеобходимы подписка Azure и хранилище ключей Azure. Ключ может храниться в хранилище ключей или в управляемом модуле HSM. Допустимым главным ключом столбца считается ключ RSA, управляемый в Azure Key Vault.

Использование интерфейса командной строки Azure, портала Azure или PowerShell

Сведения о том, как создать ключ в хранилище ключей, см. в следующих руководствах:

Сведения о том, как создать ключ в управляемом модуле HSM, см. в следующей статье:

SQL Server Management Studio (SSMS)

Дополнительные сведения о том, как создать главный ключ столбца в хранилище ключей или управляемом модуле HSM в Azure Key Vault см. в статье Подготовка к работе ключей Always Encrypted с помощью SQL Server Management Studio. Пошаговое руководство по использованию SSMS и настройке хранения ключей Always Encrypted в хранилище ключей, см. в учебнике по использованию мастера Always Encrypted (для Azure Key Vault).

Предоставление приложениям и пользователям доступа к ключам в хранилище ключей Azure

Чтобы получить доступ к зашифрованному столбцу, приложение должно иметь доступ к Azure Key Vault, а также определенные разрешения для главного ключа столбца, чтобы расшифровать ключ шифрования столбцов, которым защищен столбец.

Чтобы управлять ключами Always Encrypted, необходимы разрешения на перечисление и создание главных ключей столбцов в Azure Key Vault, а также на выполнение операций шифрования с использованием ключей.

Хранилища ключей

Если вы храните главные ключи столбцов в хранилище ключей и используете разрешения ролей для авторизации, действуют указанные ниже условия.

  • Удостоверение приложения должно участвовать в ролях, которые позволяют выполнять следующие действия плоскости данных в хранилище ключей:

    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/verify/action

    Самый простой способ предоставить приложению требуемое разрешение — добавить его удостоверение в роль пользователя шифрования для хранилища ключей. Можно также создать настраиваемую роль с необходимыми разрешениями.

  • Пользователь, управляющий ключами Always Encrypted, должен быть участником ролей, которым разрешено выполнять следующие действия плоскости данных в хранилище ключей:

    • Microsoft.KeyVault/vaults/keys/create/action;
    • Microsoft.KeyVault/vaults/keys/decrypt/action
    • Microsoft.KeyVault/vaults/keys/encrypt/action
    • Microsoft.KeyVault/vaults/keys/read
    • Microsoft.KeyVault/vaults/keys/sign/action
    • Microsoft.KeyVault/vaults/keys/verify/action

    Самый простой способ предоставить пользователю требуемое разрешение — добавить в роль пользователя шифрования для хранилища ключей. Можно также создать настраиваемую роль с необходимыми разрешениями.

Если вы храните главные ключи столбцов в хранилище ключей и используете политики доступа для авторизации, действуют указанные ниже условия.

  • Удостоверению приложения требуются следующие разрешения политики доступа к хранилищу ключей: get, unwrapKey и verify.
  • Пользователю, управляющему ключами Always Encrypted, требуются следующие разрешения политики доступа для хранилища ключей: create, get, list, sign, unwrapKey, wrapKey, verify.

Общие сведения о том, как настроить проверку подлинности и авторизацию для хранилищ ключей, см. в разделе Авторизация доступа к Key Vault для субъекта безопасности.

Управляемые модули HSM

Удостоверение приложения должно участвовать в ролях, которые позволяют выполнять следующие действия плоскости данных в управляемом модуле HSM:

  • Microsoft.KeyVault/managedHsm/keys/decrypt/action;
  • Microsoft.KeyVault/managedHsm/keys/read/action;
  • Microsoft.KeyVault/managedHsm/keys/verify/action.

Рекомендуем создать настраиваемую роль, содержащую только вышеуказанные разрешения.

Пользователь, управляющий ключами Always Encrypted, должен быть участником ролей, которым разрешено выполнять следующие действия плоскости данных с ключом:

  • Microsoft.KeyVault/managedHsm/keys/create/action;
  • Microsoft.KeyVault/managedHsm/keys/decrypt/action;
  • Microsoft.KeyVault/managedHsm/keys/encrypt/action;
  • Microsoft.KeyVault/managedHsm/keys/read;
  • Microsoft.KeyVault/managedHsm/keys/sign/action;
  • Microsoft.KeyVault/managedHsm/keys/verify/action.

Самый простой способ предоставить пользователю указанные выше разрешения — добавить его к роли пользователя шифрования для управляемого модуля HSM. Можно также создать настраиваемую роль с необходимыми разрешениями.

Дополнительные сведения об управлении доступом к управляемым модулям HSM см. в следующих статьях:

Создание главных ключей столбцов в аппаратных модулях безопасности с помощью CNG

Главный ключ столбца для постоянного шифрования может храниться в хранилище ключей, реализующем API криптографии следующего поколения (CNG). Как правило, этот тип хранилища является аппаратным модулем безопасности (HSM). HSM — это физическое устройство, которое защищает цифровые ключи и управляет ими, а также обеспечивает обработку шифрования. Аппаратные модули безопасности традиционно имеют вид подключаемой платы или внешнего устройства, напрямую подключаемого к компьютеру (локальный HSM) или сетевому серверу.

Чтобы модуль HSM был доступен для приложений на данном компьютере, на компьютере должен быть установлен и настроен поставщик хранилища ключей (KSP), реализующий CNG. Клиентский драйвер с постоянным шифрованием (поставщик хранилища главных ключей столбцов в драйвере) использует KSP для шифрования и расшифровки ключей шифрования столбцов, защищенных главным ключом столбца, который хранится в хранилище ключей.

В состав Windows входит ПО поставщика хранилища ключей Microsoft Software Key Storage Provider — программный поставщик KSP, который можно использовать для тестирования. См. раздел CNG Key Storage Providers(Поставщики хранилища ключей CNG).

Создание главных ключей столбцов в хранилище ключей с помощью CNG или KSP

Главный ключ столбца должен быть асимметричным ключом (парой открытого и закрытого ключей), использующим алгоритм RSA. Рекомендуемая длина ключа — 2048 или больше.

Использование средств с поддержкой HSM

Обратитесь к документации по имеющемуся аппаратному модулю безопасности.

Использование PowerShell

Для создания ключа в хранилище ключей с помощью CNG в PowerShell можно использовать API-интерфейсы .NET.

$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

Использование среды SQL Server Management Studio

См. раздел Подготовка к работе ключей Always Encrypted с помощью SQL Server Management Studio.

Предоставление приложениям и пользователям доступа к ключам CNG

Сведения о настройке KSP на компьютере и предоставлении приложениям и пользователям доступа к HSM см. в документации по HSM и KSP.

Создание главных ключей столбцов в аппаратных модулях безопасности с помощью CAPI

Главный ключ столбца для постоянного шифрования может храниться в хранилище ключей, реализующем API криптографии (CAPI). Как правило, такое хранилище представляет собой аппаратный модуль безопасности (HSM) — физическое устройство, которое защищает цифровые ключи и управляет ими, а также обеспечивает обработку шифрования. Аппаратные модули безопасности традиционно имеют вид подключаемой платы или внешнего устройства, напрямую подключаемого к компьютеру (локальный HSM) или сетевому серверу.

Чтобы модуль HSM был доступен для приложений на данном компьютере, на компьютере должен быть установлен и настроен поставщик служб шифрования (CSP), реализующий CAPI. Клиентский драйвер с постоянным шифрованием (поставщик хранилища главных ключей столбцов в драйвере) использует CSP для шифрования и расшифровки ключей шифрования столбцов, защищенных главным ключом столбца, который хранится в хранилище ключей.

Примечание.

CAPI — это устаревший API, который не рекомендуется использовать. Если для вашего модуля HSM доступен поставщик KSP, следует использовать именно его, а не CSP или CAPI.

CSP должен поддерживать алгоритм RSA, используемый с постоянным шифрованием.

В состав Windows входят следующие программные (не поддерживаемые модулем HSM) поставщики CSP, которые поддерживают RSA и могут использоваться в целях тестирования: Microsoft Enhanced RSA и AES Cryptographic Provider.

Создание главных ключей столбцов в хранилище ключей с помощью CAPI или CSP

Главный ключ столбца должен быть асимметричным ключом (парой открытого и закрытого ключей), использующим алгоритм RSA. Рекомендуемая длина ключа — 2048 или больше.

Использование средств с поддержкой HSM

Обратитесь к документации по имеющемуся аппаратному модулю безопасности.

Использование среды SQL Server Management Studio (SSMS)

См. раздел Подготовка к работе ключей Always Encrypted с помощью SQL Server Management Studio.

Предоставление приложениям и пользователям доступа к ключам CNG

Сведения о настройке CSP на компьютере и предоставлении приложениям и пользователям доступа к HSM см. в документации по HSM и CSP.

Next Steps

См. также