Creación y almacenamiento de claves maestras de columna para Always Encrypted

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Lasclaves maestras de columna son claves que protegen las claves que se usan en Always Encrypted para cifrar las claves de cifrado de columnas. Las claves maestras de columna pueden almacenarse en un almacén de claves de confianza, y las claves deben ser accesibles a las aplicaciones que necesiten cifrar o descifrar datos y a las herramientas para configurar Always Encrypted y administrar las claves de Always Encrypted.

En este artículo se proporciona información para seleccionar un almacén de claves y crear claves maestras de columna para Always Encrypted. Para obtener información general detallada, vea Overview of Key Management for Always Encrypted (Información general de administración de claves de Always Encrypted).

Seleccionar un almacén de claves para la clave maestra de columna

Always Encrypted admite varios almacenes de claves para almacenar las claves maestras de columna de Always Encrypted. Los almacenes de claves admitidos varían en función del controlador y la versión que se usen.

Existen dos categorías de alto nivel de almacenes de claves para tener en cuenta: Almacenes de claves localesy Almacenes de claves centralizados.

¿Almacén de claves local o centralizado?

  • Almacenes de claves locales : solo pueden usarse por aplicaciones en equipos que contengan el almacén de claves local. En otras palabras, necesita replicar el almacén de claves y la clave en cada equipo que ejecute la aplicación. Un ejemplo de un almacén de claves local es el Almacén de certificados de Windows. Al usar un almacén de claves local, necesita asegurarse de que el almacén de claves existe en cada equipo que hospeda la aplicación y que este contiene las claves maestras de columna que la aplicación necesita para tener acceso a los datos protegidos mediante Always Encrypted. Cuando aprovisiona una clave maestra de columna por primera vez, o cuando cambia (rota) la clave, necesita asegurarse de que la clave se implementa en todos los equipos que hospedan su aplicación.

  • Almacenes de claves centralizados : usan aplicaciones en varios equipos. Un ejemplo de un almacén de claves centralizado es el Almacén de claves de Azure. Un almacén de claves centralizado normalmente facilita la administración de claves porque no necesita mantener varias copias de sus claves maestras de columna en varios equipos. Asegúrese de que las aplicaciones estén configuradas para conectarse al almacén de claves centralizado.

¿Qué almacenes de clave son compatibles en los controladores cliente habilitados para Always Encrypted?

Los controladores cliente habilitados para Always Encrypted son controladores cliente de SQL Server que tienen compatibilidad integrada para incorporar Always Encrypted en las aplicaciones cliente. Los controladores habilitados para Always Encrypted incluyen algunos proveedores integrados para los almacenes de claves conocidos. Algunos controladores también permiten implementar y registrar un proveedor personalizado de almacenamiento de claves maestras de columna, de forma que pueda usar cualquier almacén de claves aunque no exista un proveedor integrado para este. Al decidir entre un proveedor integrado y uno personalizado, tenga en cuenta que usar un proveedor integrado normalmente significa realizar un menor número de cambios en sus aplicaciones (en algunos casos, solo se necesita cambiar una cadena de conexión de la base de datos).

Los proveedores integrados disponibles dependen de qué controlador, qué versión de controlador y qué sistema operativo esté seleccionado. Consulte la documentación de Always Encrypted de su controlador específico para conocer qué almacenes de claves se admiten de fábrica y si su controlador permite el uso de proveedores personalizados del almacén de claves. Asimismo, consulte el artículo Desarrollo de aplicaciones con Always Encrypted.

¿Qué almacenes de claves se admiten en las herramientas de SQL?

SQL Server Management Studio, Azure Data Studio y el módulo SqlServer de PowerShell admiten las claves maestras de columna almacenadas en las siguientes ubicaciones:

  • Almacenes de claves y HSM administrados en Azure Key Vault

    Nota:

    Los HSM administrados requieren SSMS 18.9 o versiones posteriores y la versión 21.1.18235 o una posterior del módulo SqlServer de PowerShell. Actualmente, Azure Data Studio no admite HSM administrados.

  • Almacén de certificados de Windows

  • Almacenes de claves, como el módulo de seguridad de hardware, que proporcionan Cryptography Next Generation (CNG) API o Cryptography API (CAPI).

Crear claves maestras de columna en el Almacén de certificados de Windows

Una clave maestra de columna puede ser un certificado almacenado en el Almacén de certificados de Windows. Un controlador habilitado para Always Encrypted no comprueba una fecha de expiración ni una cadena de entidad de certificación. Un certificado simplemente se usa como un par de claves que consta de una clave pública y una privada.

Para que una clave maestra de columna sea válida, el certificado debe:

  • ser un certificado X.509.
  • almacenarse en una de las dos ubicaciones de almacén de certificados: equipo local o usuario actual. (Para crear un certificado en la ubicación del almacén de certificados del equipo local, debe ser un administrador del equipo de destino).
  • contener una clave privada (la longitud recomendada de las claves del certificado es de 2048 bits o superior).
  • crearse para el intercambio de claves.

Existen varias maneras de crear un certificado que sea una clave maestra de columna válida pero la opción más sencilla es la de crear un certificado autofirmado.

Creación de un certificado autofirmado con PowerShell

Use el cmdlet New-SelfSignedCertificate para crear un certificado autofirmado. En el siguiente ejemplo se muestra cómo generar un certificado que pueda usarse como una clave maestra de columna para Always Encrypted.

# 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

Crear un certificado autofirmado mediante SQL Server Management Studio (SSMS)

Para obtener más detalles, consulte Aprovisionamiento de claves de Always Encrypted mediante SQL Server Management Studio. Para obtener un tutorial paso a paso que usa SSMS y almacena claves Always Encrypted en el Almacén de certificados de Windows, vea Always Encrypted: protección de los datos confidenciales en Base de datos SQL con cifrado de base de datos y almacenamiento de las claves de cifrado en el almacén de certificados de Windows.

Hacer que los certificados estén disponibles para aplicaciones y usuarios

Si la clave maestra de columna es un certificado almacenado en la ubicación del almacén de certificados del equipo local , necesita exportar el certificado con la clave privada e importarlo en todos los equipos que hospeden aplicaciones que está previsto que cifren o descifren datos almacenados en las columnas cifradas, o herramientas para configurar Always Encrypted y para administrar las claves Always Encrypted. Además, a cada usuario se le debe conceder un permiso de lectura para el certificado almacenado en la ubicación del almacén de certificados del equipo local para poder usar el certificado como una clave maestra de columna.

Si la clave maestra de columna es un certificado almacenado en la ubicación del almacén de certificados del usuario actual , necesita exportar el certificado con la clave privada e importarlo en la ubicación del almacén de certificados del usuario actual de todas las cuentas de usuario que ejecuten aplicaciones que está previsto que cifren o descifren datos almacenados en las columnas cifradas, o herramientas para configurar Always Encrypted y para administrar las claves Always Encrypted (en todos los equipos que contengan esas aplicaciones o herramientas). No se necesita ninguna configuración de permisos; después de iniciar sesión en el equipo, un usuario puede tener acceso a todos los certificados en su ubicación del almacén de certificados del usuario actual.

Mediante PowerShell

Use los cmdlets Import-PfxCertificate y Export-PfxCertificate para importar y exportar un certificado.

Usar Microsoft Management Console

Para conceder al usuario el permiso de lectura para un certificado almacenado en la ubicación del almacén de certificados del equipo local, siga estos pasos:

  1. Abra un símbolo del sistema y escriba mmc.
  2. En el menú Archivo de la consola MMC, haga clic en Agregar o quitar complemento.
  3. En el cuadro de diálogo Agregar o quitar complemento , haga clic en Agregar.
  4. En el cuadro de diálogo Agregar un complemento independiente , haga clic en Certificadosy, después, en Agregar.
  5. En el cuadro de diálogo Complemento de certificados , haga clic en Cuenta de equipoy, después, en Finalizar.
  6. En el cuadro de diálogo Agregar un complemento independiente , haga clic en Cerrar.
  7. En el cuadro de diálogo Agregar o quitar complemento , haga clic en Aceptar.
  8. En el complemento Certificados, busque el certificado en la carpeta Certificados > Personal, haga clic con el botón derecho en el certificado, seleccione Todas las tareas y, después, haga clic en Administrar claves privadas.
  9. En el cuadro de diálogo Seguridad , agregue el permiso de lectura para una cuenta de usuario si fuera necesario.

Crear claves maestras de columna en el Almacén de claves de Azure

Azure Key Vault ayuda a proteger los secretos y las claves criptográficas y es una opción adecuada para almacenar claves maestras de columna para Always Encrypted, especialmente si las aplicaciones se hospedan en Azure. Para crear una clave en el Almacén de claves de Azure, necesita una suscripción de Azure y un Almacén de claves de Azure. Una clave se puede almacenar en un almacén de claves o en un HSM administrado. Para ser una clave maestra de columna válida, la clave administrada en Azure Key Vault debe ser una clave RSA.

Uso de la CLI de Azure, Azure Portal o PowerShell

Para obtener información sobre cómo crear una clave en un almacén de claves, consulte estos recursos:

Para obtener información sobre cómo crear una clave en un HSM administrado, consulte este recurso:

SQL Server Management Studio (SSMS)

Para obtener más detalles sobre cómo crear una clave maestra de columna en un almacén de claves o HSM administrado en Azure Key Vault con SSMS, consulte Aprovisionamiento de claves de Always Encrypted mediante SQL Server Management Studio. Para acceder a un tutorial paso a paso en el que se usa SSMS y se almacenan claves de Always Encrypted en un almacén de claves, vea Tutorial del Asistente para Always Encrypted (Azure Key Vault).

Hacer que las claves del Almacén de claves de Azure estén disponibles para aplicaciones y usuarios

Para acceder a una columna cifrada, la aplicación debe poder acceder a Azure Key Vault. También necesita permisos específicos en la clave maestra de columna para descifrar la clave de cifrado de columna que protege la columna.

Para administrar claves de Always Encrypted, necesita permisos para enumerar y crear claves maestras de columna en Azure Key Vault, además de realizar operaciones criptográficas usando las claves.

Almacenes de claves

Si almacena las claves maestras de columna en un almacén de claves y usa permisos de rol para la autorización:

  • La identidad de la aplicación debe ser miembro de roles que permitan las siguientes acciones de plano de datos en el almacén de claves:

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

    La manera más sencilla de conceder a la aplicación el permiso necesario es agregar su identidad al rol Key Vault Crypto User (Usuario criptográfico de almacén de claves). También puede crear un rol personalizado con los permisos necesarios.

  • Un usuario que administre las claves de Always Encrypted debe ser miembro, o bien tener roles que permitan las siguientes acciones de plano de datos en el almacén de claves:

    • 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

    La manera más sencilla de conceder al usuario el permiso necesario es agregarlo al rol Key Vault Crypto User (Usuario criptográfico de almacén de claves). También puede crear un rol personalizado con los permisos necesarios.

Si almacena las claves maestras de columna en un almacén de claves y usa directivas de acceso para la autorización:

  • La identidad de la aplicación necesita los siguientes permisos de directiva de acceso en el almacén de claves: get, unwrapKey y verify.
  • Un usuario que administra claves para Always Encrypted necesita los siguientes permisos de directiva de acceso en el almacén de claves: create, get, list, sign, unwrapKey, wrapKey y verify.

Para obtener información general sobre cómo configurar la autenticación y autorización para almacenes de claves, consulte Autorización de una entidad de seguridad para tener acceso a Key Vault.

HSM administrados

La identidad de la aplicación debe ser miembro de roles que permitan las siguientes acciones de plano de datos en el HSM administrado:

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

Microsoft recomienda crear un rol personalizado que contenga solo los permisos anteriores.

Un usuario que administre las claves de Always Encrypted debe ser miembro, o bien tener roles que permitan las siguientes acciones de plano de datos en la clave:

  • 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

La manera más fácil de conceder al usuario los permisos anteriores es agregarlo al rol Managed HSM Crypto User (Usuario criptográfico de HSM administrado). También puede crear un rol personalizado con los permisos necesarios.

Para obtener más información sobre el control de acceso para HSM administrados, consulte este artículo:

Crear claves maestras de columna en módulos de seguridad de hardware con CNG

Una clave maestra de columna para Always Encrypted puede almacenarse en un almacén de claves que implemente la API de Cryptography Next Generation (CNG). Normalmente, este tipo de almacén es un módulo de seguridad de hardware (HSM). Un HSM es un dispositivo físico que protege y administra las claves digitales y proporciona un procesamiento criptográfico. Los HSM normalmente aparecen en forma de una tarjeta de complemento o un dispositivo externo que se conecta directamente a un equipo (HSM local) o a un servidor de red.

Para que un HSM esté disponible para las aplicaciones de un equipo determinado, debe instalarse y configurarse un proveedor de almacenamiento de claves (KSP), que implementa CNG, en el equipo. Un controlador cliente de Always Encrypted (un proveedor de almacenamiento de claves maestras de columna dentro del controlador) usa el KSP para cifrar y descifrar claves de cifrado de columnas, protegidas con una clave maestra de columna almacenada en el almacén de claves.

Windows incluye el proveedor de almacenamiento de claves de software de Microsoft; un KSP basado en software que se puede usar con fines de pruebas. Vea CNG Key Storage Providers (Proveedores de almacenamiento de claves CNG)

Crear claves maestras de columna en un almacén de claves mediante CNG o KSP

Una clave maestra de columna debería ser una clave asimétrica (un par con una clave pública y otra privada), mediante el algoritmo RSA. La longitud de la clave recomendada es de 2048 o superior.

Usar herramientas específicas de HSM

Consulte la documentación de su HSM.

Mediante PowerShell

Puede usar las API de .NET para crear una clave en un almacén de claves con CNG en PowerShell.

$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)

Uso de SQL Server Management Studio

Consulte Aprovisionamiento de claves de Always Encrypted mediante SQL Server Management Studio.

Hacer que las claves CNG estén disponibles para aplicaciones y usuarios

Consulte la documentación de HSM y KSP sobre cómo configurar el KSP en un equipo y cómo conceder acceso a usuarios y aplicaciones al HSM.

Crear claves maestras de columna en los módulos de seguridad de hardware con CAPI

Una clave maestra de columna para Always Encrypted puede almacenarse en un almacén de claves que implemente la API de Cryptography (CAPI). Normalmente, un almacén de este tipo es un módulo de seguridad de hardware (HSM); un dispositivo físico que protege y administra las claves digitales y proporciona un procesamiento criptográfico. Los HSM normalmente aparecen en forma de una tarjeta de complemento o un dispositivo externo que se conecta directamente a un equipo (HSM local) o a un servidor de red.

Para que un HSM esté disponible para las aplicaciones de un equipo determinado, debe instalarse y configurarse un proveedor de servicios criptográficos (CSP), que implementa CAPI, en el equipo. Un controlador cliente de Always Encrypted (un proveedor de almacenamiento de claves maestras de columna dentro del controlador) usa el CSP para cifrar y descifrar claves de cifrado de columnas, protegidas con una clave maestra de columna almacenada en el almacén de claves.

Nota:

CAPI es una API heredada en desuso. Si hay un KSP disponible para HSM, se debe usar en lugar de un CSP o CAPI.

Un CSP debe admitir el algoritmo RSA para usarse con Always Encrypted.

Windows incluye los siguientes CSP basados en software (no están respaldados por un HSM) que admiten RSA y pueden usarse con fines de pruebas: el proveedor de servicios criptográficos RSA y AES mejorado de Microsoft.

Crear claves maestras de columna en un almacén de claves con CAPI o CSP

Una clave maestra de columna debería ser una clave asimétrica (un par con una clave pública y otra privada), mediante el algoritmo RSA. La longitud de la clave recomendada es de 2048 o superior.

Usar herramientas específicas de HSM

Consulte la documentación de su HSM.

Uso de SQL Server Management Studio (SSMS)

Consulte Aprovisionamiento de claves de Always Encrypted mediante SQL Server Management Studio.

Hacer que las claves CNG estén disponibles para aplicaciones y usuarios

Consulte la documentación de HSM y CSP sobre cómo configurar CSP en una máquina y cómo conceder acceso a los usuarios y las aplicaciones a HSM.

Pasos siguientes

Consulte también