Introducción

Con la llegada de RGPD, la preocupación de las empresas por la seguridad de los datos es cada vez mayor y un área que antes a veces se dejaba de lado ahora está más que nunca en el punto de mira. Como resultado, los profesionales de TI, especialmente los DBA, han estado buscando formas de reducir los riesgos de exposición de los datos y una de las formas de hacerlo es cifrando los datos para evitar el acceso no autorizado por parte de terceros.

Mi idea en este artículo es demostrar una solución de SQL Server que le permite cifrar datos, que es lo que Cifrado de datos transparente (TDE), disponible desde la versión 2008 de SQL Server, en ediciones Enterprise y Developer.

No olvides revisar mi publicación. SQL Server 2016: cómo cifrar sus datos utilizando Always Encrypted, otra solución de cifrado de datos de SQL Server, disponible desde la versión 2016, en las ediciones Express, Standard, Enterprise y Developer.

Para los ejemplos siguientes, utilizaré el siguiente script para generar la base:

IF (OBJECT_ID('dbo.Pessoa') IS NOT NULL) DROP TABLE dbo.Pessoa
CREATE TABLE dbo.Pessoa
(
    [Name] NVARCHAR(101),
    [BirthDate] DATE,
    [EmailAddress] NVARCHAR(50),
    [Phone] NVARCHAR(20)
)

INSERT INTO dbo.Pessoa
VALUES
( N'Jon Yang', N'1971-10-06T00:00:00', N'jon24@adventure-works.com', N'1 (11) 500 555-0162' ), 
( N'Eugene Huang', N'1976-05-10T00:00:00', N'eugene10@adventure-works.com', N'1 (11) 500 555-0110' ), 
( N'Ruben Torres', N'1971-02-09T00:00:00', N'ruben35@adventure-works.com', N'1 (11) 500 555-0184' ), 
( N'Christy Zhu', N'1973-08-14T00:00:00', N'christy12@adventure-works.com', N'1 (11) 500 555-0162' ), 
( N'Elizabeth Johnson', N'1979-08-05T00:00:00', N'elizabeth5@adventure-works.com', N'1 (11) 500 555-0131' ), 
( N'Julio Ruiz', N'1976-08-01T00:00:00', N'julio1@adventure-works.com', N'1 (11) 500 555-0151' ), 
( N'Janet Alvarez', N'1976-12-02T00:00:00', N'janet9@adventure-works.com', N'1 (11) 500 555-0184' ), 
( N'Marco Mehta', N'1969-11-06T00:00:00', N'marco14@adventure-works.com', N'1 (11) 500 555-0126' ), 
( N'Rob Verhoff', N'1975-07-04T00:00:00', N'rob4@adventure-works.com', N'1 (11) 500 555-0164' ), 
( N'Shannon Carlson', N'1969-09-29T00:00:00', N'shannon38@adventure-works.com', N'1 (11) 500 555-0110' ), 
( N'Jacquelyn Suarez', N'1969-08-05T00:00:00', N'jacquelyn20@adventure-works.com', N'1 (11) 500 555-0169' ), 
( N'Curtis Lu', N'1969-05-03T00:00:00', N'curtis9@adventure-works.com', N'1 (11) 500 555-0117' ), 
( N'Lauren Walker', N'1979-01-14T00:00:00', N'lauren41@adventure-works.com', N'717-555-0164' ), 
( N'Ian Jenkins', N'1979-08-03T00:00:00', N'ian47@adventure-works.com', N'817-555-0185' ), 
( N'Sydney Bennett', N'1973-11-06T00:00:00', N'sydney23@adventure-works.com', N'431-555-0156' ), 
( N'Chloe Young', N'1984-08-26T00:00:00', N'chloe23@adventure-works.com', N'208-555-0142' ), 
( N'Wyatt Hill', N'1984-10-25T00:00:00', N'wyatt32@adventure-works.com', N'135-555-0171' ), 
( N'Shannon Wang', N'1949-12-24T00:00:00', N'shannon1@adventure-works.com', N'1 (11) 500 555-0195' ), 
( N'Clarence Rai', N'1955-10-06T00:00:00', N'clarence32@adventure-works.com', N'1 (11) 500 555-0137' ), 
( N'Luke Lal', N'1983-09-04T00:00:00', N'luke18@adventure-works.com', N'262-555-0112' )

Cifrado de datos transparente (TDE)

TDE (Cifrado de datos transparente) cifra los archivos de datos de SQL Server, lo que se conoce como cifrado de datos en reposo. En un escenario en el que se roban medios físicos (como unidades o cintas de respaldo), un tercero malintencionado puede restaurar o adjuntar la base de datos y explorar los datos. Una solución a esto es cifrar datos confidenciales en la base de datos y proteger las claves utilizadas para cifrar los datos con un certificado. Esto evita que alguien sin las claves pueda utilizar los datos, pero este tipo de protección debe planificarse con antelación.

TDE realiza cifrado y descifrado de E/S en tiempo real de datos y archivos de registro y protege los datos en el disco, es decir, datos y archivos de registro, brindando la capacidad de cumplir con muchas leyes, regulaciones y pautas establecidas en diversas industrias. Esto permite a los desarrolladores de software cifrar datos utilizando algoritmos de cifrado AES y 3DES, sin cambiar las aplicaciones existentes.

Básicamente, con un toque de magia, se cifra todo el contenido de los archivos MDF, archivos LDF, instantáneas, tempdb y copias de seguridad. El cifrado se produce en tiempo real a medida que los datos se escriben desde la memoria al disco, y el descifrado se produce cuando los datos se leen del disco y se mueven a la memoria. El cifrado se realiza a nivel de la base de datos, por lo que puede optar por cifrar tantas bases de datos como desee.

TDE puede minimizar la utilización de recursos y ocultar sus actividades a las aplicaciones de usuario y al motor relacional, ya que todo el cifrado/descifrado se produce cuando las páginas de datos se mueven entre el grupo de búfer y el disco. A medida que SQL Server mueve páginas de datos del grupo de búfer al archivo MDF, archivo LDF o archivo tempdb, los datos se cifran en tiempo real antes de escribirse en el disco. Por el contrario, a medida que las páginas de datos se mueven desde el archivo MDF o tempdb al grupo de búfer, se descifran. En otras palabras, cuando los datos están en el disco están cifrados, pero cuando están en la memoria no están cifrados.

En cuanto al rendimiento, la penalización por utilizar el cifrado de datos transparente, según Microsoft, es de sólo entre un 3 y un 5% de caída de rendimiento. Un valor mucho menor en comparación con la penalización de rendimiento al utilizar Always Encrypted, por ejemplo.

El cifrado utiliza una DEK (clave de cifrado de base de datos), que se almacena en el registro de inicio de la base de datos para estar disponible durante la recuperación. La DEK es una clave simétrica protegida por un certificado almacenado en la base de datos maestra del servidor o una clave asimétrica protegida por un módulo EKM. TDE admite varias opciones de cifrado diferentes, como AES con claves de 128 bits, 192 bits o 256 bits, o Triple DES de 3 claves. Usted hace su elección al implementar TDE.

Cifrado de datos siempre cifrado frente a transparente (TDE)

A continuación, enumeraré algunas similitudes y diferencias entre estas dos soluciones de cifrado de SQL Server:

Siempre cifradoCifrado de datos transparente (TDE)
Nivel de columnaNivel de base de datos
Cifrado en el cliente (mediante un controlador)Cifrado del lado del servidor (motor de base de datos)
El servidor no conoce las claves de cifradoEl servidor conoce las claves de cifrado
Los datos en la memoria están cifrados.Los datos en la memoria no están protegidos (texto sin formato)
Los datos en la red están encriptados.Los datos en la red no están protegidos (texto sin formato)
Sólo los usuarios con acceso a la clave pueden ver los datos originales. Ni siquiera el DBA puede ver los datos originales sin la clave.DBA puede ver los datos originales sin la clave
Las copias de seguridad y los archivos de registro están cifradosLas copias de seguridad y los archivos de registro están cifrados
Requiere cambios en la aplicación (pueden ser pequeños o grandes, según el algoritmo de cifrado elegido)No requiere cambios en la aplicación.
Disponible a partir de SQL Server 2016: todas las ediciones hasta Express (Express y Standard a partir de 2016 SP1)Disponible a partir de SQL Server 2008: solo para empresas y desarrolladores

Cómo utilizar el cifrado de datos transparente (TDE)

Para implementar el Cifrado de Datos Transparente (TDE), debemos seguir los 4 pasos a continuación:

  • Crear una clave maestra: Se crea una clave maestra por primera vez. Esta clave, accesible con una contraseña, se utiliza para proteger un certificado, que se creará en el siguiente paso. Esta clave se almacena en la base de datos maestra en un formato cifrado.
  • Crear u obtener un certificado protegido por la clave maestra: Este certificado se utiliza para proteger la clave de cifrado de la base de datos que crearemos en el siguiente paso. Además, este certificado está protegido por la clave maestra que creamos en el paso anterior. El certificado se almacena en la base de datos maestra en formato cifrado.
  • Crear una clave de cifrado de base de datos: Esta es la clave que utilizará SQL Server para cifrar los datos. Está protegido por el certificado creado en el paso anterior. Esta clave se almacena en la base de datos cifrada y se almacena en un formato cifrado.
  • Habilitar TDE: Una vez que se haya creado todo lo anterior, se ejecutará un comando para indicarle a SQL Server que comience a cifrar todos los datos utilizando la clave de cifrado de la base de datos creada en el paso anterior. Este proceso puede tardar algún tiempo dependiendo del tamaño de la base de datos. Idealmente, la base de datos no debería usarse en producción hasta que haya completado el proceso de cifrado inicial.

La siguiente imagen demuestra bien esta arquitectura TDE:

Para activar el cifrado de datos transparente (TDE) en una base de datos, debe utilizar los siguientes comandos: (recuerde que tempdb se cifra automáticamente cuando se activa el cifrado en cualquier otra base de datos de la instancia)

USE [master]
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'dirceuresende123_usa_uma_senha_forte_aqui_talquei';  
GO

CREATE CERTIFICATE MeuCertificadoDoServidor WITH SUBJECT = 'Meu Certificado da Instância';  
GO

USE [dirceuresende]
GO

CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_256  
ENCRYPTION BY SERVER CERTIFICATE MeuCertificadoDoServidor;  
GO

ALTER DATABASE dirceuresende  
SET ENCRYPTION ON;  
GO

Después de ejecutar estos comandos, su banco quedará encriptado. Para comprobar qué bancos están cifrados o monitorear el progreso del proceso de cifrado, utilice la siguiente consulta:

SELECT 
    A.[name], 
    A.is_master_key_encrypted_by_server, 
    A.is_encrypted,
    B.*
FROM 
    sys.databases A
    JOIN sys.dm_database_encryption_keys B ON B.database_id = A.database_id

Resultado:

Recordando que la columna porcentaje_completo indica el progreso del proceso de cifrado de la base de datos y la columna estado_cifrado indica en qué estado se encuentra actualmente el cifrado, los valores de esta columna son:
0 = No hay claves de cifrado de base de datos presentes, sin cifrado
1 = Sin cifrado
2 = Cifrado en curso
3 = cifrado
4 = Cambio de clave en curso
5 = Descifrado en curso
6 = Cambio de protección en curso (se está cambiando el certificado o clave asimétrica que cifra la clave de cifrado de la base de datos)

Después de completar el cifrado de su base de datos, verá un mensaje de advertencia que le informará que DEBE hacer una copia de seguridad de su certificado y clave privada INMEDIATAMENTE. Si pierde el certificado o la clave privada y necesita restaurar esta base de datos en otro servidor, no podrá hacerlo.

Advertencia: No se ha realizado una copia de seguridad del certificado utilizado para cifrar la clave de cifrado de la base de datos. Debe hacer una copia de seguridad inmediatamente del certificado y de la clave privada asociada con el certificado. Si el certificado alguna vez deja de estar disponible o si debe restaurar o adjuntar la base de datos en otro servidor, debe tener copias de seguridad tanto del certificado como de la clave privada o no podrá abrir la base de datos.

Comando para hacer una copia de seguridad del certificado y la clave privada:

USE [master]
GO

BACKUP CERTIFICATE MeuCertificadoDoServidor 
TO FILE =  'C:\Backups\Certificados\dirceuresende.cer'
WITH PRIVATE KEY ( FILE = 'C:\Backups\Certificados\dirceuresende_Key.pvk', 
ENCRYPTION BY PASSWORD = 'dirceuresende123_usa_uma_senha_forte_aqui_talquei' );
GO

Restaurar un banco con cifrado de datos transparente (TDE)

Si intenta restaurar un archivo de copia de seguridad cifrado sin restaurar primero la clave maestra, encontrará este mensaje de error:

Mensaje 33111, Nivel 16, Estado 3, Línea 12
No se puede encontrar el certificado del servidor con la huella digital '0xD98C862BF2A4B16D41DC8A96CBE819EFDCF33C00'.
Mensaje 3013, Nivel 16, Estado 1, Línea 12
RESTORE DATABASE está finalizando de forma anormal.

Ahora les mostraré cómo restaurar la base de datos con TDE en otra instancia:

-- Cria uma nova master key.. Aqui você pode escolher uma nova senha
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'n6ApUO(i<8lRNT,2SF-{3LDzRUR;?MPd-Q-Fg3oec[wqMjKfp^';  
GO  

-- Cria o certificado na master
CREATE CERTIFICATE MeuCertificadoDoServidor
FROM FILE = 'C:\Backups\Certificados\dirceuresende.cer'   
WITH PRIVATE KEY (
    FILE = 'C:\Backups\Certificados\dirceuresende_Key.pvk',   
    DECRYPTION BY PASSWORD = 'dirceuresende123_usa_uma_senha_forte_aqui_talquei'
)

-- Restaura o banco
RESTORE DATABASE dirceuresende   
    FROM DISK = 'C:\Backups\dirceuresende.bak'
    WITH REPLACE, STATS = 5,
    MOVE 'dirceuresende_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\dirceuresende.mdf',
    MOVE 'dirceuresende_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\DATA\dirceuresende_log.ldf'

Si encuentra el siguiente mensaje de error, probablemente necesitará corregir los permisos de la clave maestra y la clave privada para habilitar la herencia:

El certificado, clave asimétrica o archivo de clave privada no es válido o no existe; o no tienes permisos para ello.

Para corregir la herencia de estos 2 archivos, siga los pasos a continuación:

Cifrado de datos transparente y registros de transacciones

Habilitar una base de datos para usar TDE tiene el efecto de borrar la parte restante del registro de transacciones virtuales para aplicar el siguiente registro de transacciones virtuales. Esto garantiza que no quede ningún texto claro en los registros de transacciones después de configurar la base de datos en cifrado.

Todos los datos escritos en el registro de transacciones antes de un cambio en la clave de cifrado de la base de datos se cifrarán utilizando la clave de cifrado de la base de datos anterior.

Después de que una clave de cifrado de base de datos se haya modificado dos veces, se debe realizar una copia de seguridad del registro antes de poder modificar nuevamente la clave de cifrado de base de datos.

Cifrado de datos transparente (TDE) y OLTP en memoria

TDE se puede habilitar en una base de datos que tenga objetos OLTP en memoria. En SQL Server 2016 y los registros de OLTP en memoria, los datos se cifran si TDE está habilitado. En SQL Server 2014, los registros de OLTP en memoria se cifran si TDE está habilitado, pero los archivos del grupo de archivos MEMORY_OPTIMIZED_DATA no están cifrados.

Limitaciones del cifrado de datos transparente (TDE)

  • TDE no protege los datos en la memoria, por lo que cualquier persona que tenga derechos DBO sobre una base de datos o derechos SA sobre la instancia de SQL Server puede ver los datos confidenciales. En otras palabras, TDE no puede impedir que los DBA vean los datos que desean ver.
  • TDE no es granular. Toda la base de datos está cifrada.
  • TDE no protege las comunicaciones entre las aplicaciones cliente y SQL Server, por lo que se deben utilizar otros métodos de cifrado para proteger los datos que viajan a través de la red y pueden ser interceptados por usuarios malintencionados.
  • En TDE, todos los archivos y grupos de archivos de la base de datos están cifrados. Si algún grupo de archivos de la base de datos está marcado como SÓLO LECTURA, la operación de cifrado de la base de datos fallará.
  • Los datos de FILESTREAM no están cifrados.
  • Si se utiliza una base de datos en la duplicación de bases de datos o en el envío de registros, ambas bases de datos están cifradas. Las transacciones de registro se cifrarán cuando se envíen entre ellas.
  • Cuando cualquier base de datos en una instancia de SQL Server tiene TDE habilitado, la base de datos tempdb se cifra automáticamente, lo que puede contribuir a un rendimiento deficiente tanto para las bases de datos cifradas como para las no cifradas que se ejecutan en la misma instancia.
  • Aunque se requieren menos recursos para implementar TDE que el cifrado a nivel de columna, aún habrá cierta sobrecarga, lo que puede impedir que se use en servidores SQL que experimentan cuellos de botella en la CPU.
  • Las bases de datos cifradas con TDE no pueden aprovechar la nueva compresión de respaldo de SQL Server 2008. Si desea aprovechar tanto la compresión como el cifrado de la copia de seguridad, deberá utilizar una aplicación de terceros como SQL Backup, que le permite realizar ambas tareas sin penalizaciones.

Enmascaramiento de datos dinámicos

Después de demostrar el uso de esta solución de cifrado, es posible que se pregunte: "¿Qué pasa con el enmascaramiento dinámico de datos (DDM)???". Bueno, para empezar, DDM no es una solución de cifrado de datos sino más bien una solución de enmascaramiento de datos.

Si bien el cifrado de datos evita eficazmente que sus datos se restauren (incluso a partir de copias de seguridad) y se acceda a ellos de manera incorrecta, el enmascaramiento de datos con el enmascaramiento dinámico de datos solo restringe el contenido que se muestra al final de un comando SELECT, es decir, si tiene acceso a un archivo de respaldo, puede restaurarlo en una instancia en la que sea administrador de sistemas y tendrá acceso gratuito a los datos previamente enmascarados.

Para obtener más información sobre el enmascaramiento dinámico de datos, consulte el artículo. SQL Server 2016: enmascaramiento de datos con enmascaramiento de datos dinámico (DDM), donde demuestro cómo usarlo, restricciones e incluso cómo “romper” el enmascaramiento y acceder a los datos originales (incluso sin tener permiso para hacerlo).

Bueno chicos, espero que hayan disfrutado este artículo y ahora comiencen a proteger mejor sus datos.
¡Un abrazo grande y hasta la próxima!