/es/encriptacion-en-bases-de-datos/media/secure_passwords-619x346.jpg

Encriptación en Bases de Datos

INTRODUCCIÓN

En este artículo presentamos dos técnicas de cifrado de bases de datos en sql-server y cómo poner a buen recaudo todas las herramientas que utilicemos durante estos procesos.

En primer lugar, la encriptación simétrica  es una técnica que nos permite  cifrar ciertas partes de la base de datos.  Es la técnica más oóptima sopesando criterios de rendimiento y seguridad.

En segundo lugar veremos el TDE (cifrado de datos transparente), que es una técnica que nos permite tener cifrada la información en las copias de seguridad sin ningún coste de rendimiento para la base de datos(de ahí que se le llame transparente).

Por último, os mostraré cómo se hacen copias de seguridad y restauración (en otro servidor si se desea) de las claves y los certificados que usamos para realizar las técnicas de cifrado.

 

ENCRIPTACIÓN CLAVE SIMETRICA

La encriptación simetrica utiliza la misma clave para encriptar y para desencriptar, las claves simetricas son mas pequeñas que las asimetricas, por lo que el proceso de cifrado/descifrado es mas rápido.

La encriptación simetrica permite obtener el máximo rendimiento de la BBDD respecto a certificados y claves asimétricas.

No podemos cifrar una base de datos  completamente porque el rendimiento se reduciría drásticamente, la solución es cifrar las columnas que requieran mayor seguridad.

Esta técnica la podéis hacer servir también en la versión de SQL-Server 2005, sin embargo las otras técnicas que comento en este articulo sólo las podéis utilizar a partir de la versión 2008

1. Creamos la tabla tarjetas, donde contraseña será el valor que guardaremos cifrado, por eso lo definimos VARBINARY.

create table tarjetas

(id_tarjeta varchar(20),

numero varchar(16),

nombre varchar(50),

apellido varchar(50)

banco varchar(20),

codigo_seguridad varchar(3)

contraseña varbinary(80))

 

2. Creamos una clave simetrica llamada MICLAVESIMETRICA.

CREATE SYMMETRIC KEY MICLAVESIMETRICA WITH ALGORITHM = RC4

ENCRYPTION BY PASSWORD =’PASSWORDCHUNGO’

 

3. Activamos la clave simetrica

OPEN SYMMETRIC KEY MICLAVESIMETRICA DECRYPTION BY PASSWORD = ‘PASSWORDCHUNGO’

 

4. Insertamos un registro, introduciendo la contraseña cifrada con la orden ENCRYPTbykEY

INSERT INTO tarjetas(id_tarjeta,numero,contraseña)

VALUES(’17’,234567889,

ENCRYPTbykEY(KEY_GUID(‘MICLAVESIMETRICA’),’2345′))

 

5. Visualizamos el contenido de la tabla tarjetas, fijaros como el campo contraseña está cifrado.

select * from tarjetas

 

6. Con la orden DecryptByKey mostramos el contenido del campo contraseña desencriptado, lógicamente lo podemos ver porque está abierta la clave simetrica(y ahí le hemos dado el password)

SELECT contraseña,cast(DecryptByKey(contraseña) as varchar(20)) as [nombre desencriptado]

FROM tarjetas

 

7. Cerrar la clave simétrica, a partir de ahora no podremos visualizar la contraseña sin desencriptar, a no ser que la volvamos a abrir

CLOSE SYMMETRIC KEY MICLAVESIMETRICA

 

 

 

 

 

 

 

CIFRADO DE DATOS TRANSPARENTE(TDE)

  • La encriptación de una BBDD entera tiene unos costes prohibitivos.
  • Para impedir el robo de datos que residen en disco o copia de seguridad existe TDE(transparent data encryption)
  • Proteger la base de datos del robo de medios físicos(discos, cintas)
  • Es un cifrado en tiempo real que permiten que los contenidos al completo de una BBDD permanezcan encriptados en disco y en Backup sin tener impacto sobre las aplicaciones existentes.
  • El que sea «transparente» significa no sólo que los clientes no son afectados y no se enteran, sino que es realizado en forma nativa por el motor de base de datos. Es una manera fácil de lograr cifrado sin tener que cambiar ni las aplicaciones cliente ni los objetos de base de datos.
  • El TDE se realiza con la MASTER KEY de la base de datos master.
  • Cada BBDD puede tener su propia MASTER KEY​​​​​​

 

Grafico sacado de la web: http://msdn.microsoft.com/es-es/library/bb934049.aspx

 

Ejemplo

BBDD: Empresa

Tabla: Altos_cargos

create table altos_cargos

(cif varchar(10),

nombre varchar(20),

apellido varchar(20),

sueldo int,

dietas int)

 

SELECT * FROM Altos_cargos

23465490J      ELENA           ORTEGA        3450000          800000

46564567Y     ALBERTO      MILIAN           1200000          234000

54367834U     JUANJO         BOTIN            4500000          456000

Hacemos una copia de seguridad

EMPRESA/Tareas/Copia de seguridad

 

Si abrimos el fichero empresa.bak con el block de notas podemos encontrar y leer los datos de la empresa(y muchos datos del sistema):

 

Encriptación TDE(pasos).

Los pasos 1 y 2 a nivel de servidor(en bbdd master), los pasos 3 y 4 a nivel de BBDD.

1.Crearemos una master key de BBDD en master(Hay una sola master key en un servidor)

USE master

GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD=’Passwordchunguisimo’

 

2. Creamos un certificado en master

USE master

GO

CREATE CERTIFICATE Alberto_certificado WITH SUBJECT =’Mi certificado para TDE’

 

3. Creamos una DATABASE ENCRYPTION KEY (DEK) para la base de datos empresa

USE EMPRESA

GO

CREATE DATABASE ENCRYPTION KEY

WITH ALGORITHM= AES_128

ENCRYPTION BY SERVER CERTIFICATE Alberto_certificado

 

4. Activar la encriptación para la base de datos empresa

ALTER DATABASE EMPRESA

SET ENCRYPTION ON

 

Ahora realizamos una nueva copia de seguridad (empresa_encriptada.bak)

Y abrimos el fichero con el block de notas, fijaros como el contenido cambia.Está encriptado y no podemos ver nada.

 

BACKUP Y RESTORE DE CLAVES Y CERTIFICADOS

Por último, debemos hacer una copia de seguridad de la clave maestra, del certificado y de la clave privada, para asegurar la recuperación de los datos.

  • En caso de borrado o perdida; ya que si volviésemos a ejecutar las claves y contraseñas de nuevo, los valores internos de los certificados variarían.
  • En caso de que quisiésemos restaurar una BBDD en otra instancia.

–Backup de master key

USE master

GO

OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘Passwordchunguisimo’;

GO

BACKUP MASTER KEY TO FILE = ‘c:admon_bbddexportedmasterkey’

ENCRYPTION BY PASSWORD = ‘sd092735kjn$&adsg’;

 

‘sd092735kjn$&adsg’à Es la contraseña utilizada para cifrar la clave maestra en el archivo

 

–Backup del certificado

USE master

GO

BACKUP CERTIFICATE Alberto_certificado TO FILE = ‘C:admon_bbddservercert.cer’

WITH PRIVATE KEY(FILE = ‘C:admon_bbddservercert.key’,

ENCRYPTION BY PASSWORD =’pass_q_encripta_file_servert’)

 

RESTAURAR MASTER KEY

 

Suponer que durante la vida de la base de datos alguien cambia la master key de la tabla master o la borra

use master

drop certificate Alberto_certificado

drop MASTER KEY

Ahora intentamos restaurar la BBDD

 

¡¡HORROR!! Algo ha ocurrido con el certificado!!!

1. Restauramos la clave y el certificado.

–Clave (para el caso de TDE no es necesario restaurar la master key, puedes crear una nueva y restaurar el certificado, eso SÍ)

USE master

RESTORE MASTER KEY

FROM FILE = ‘c:admon_bbddexportedmasterkey’

DECRYPTION BY PASSWORD = ‘sd092735kjn$&adsg’

ENCRYPTION BY PASSWORD = ‘Passwordchunguisimo’;

 

–Certificado

OPEN MASTER KEY DECRYPTION BY PASSWORD = ‘Passwordchunguisimo’

GO

CREATE CERTIFICATE Alberto_certificado FROM FILE = ‘C:admon_bbddservercert.cer’

WITH PRIVATE KEY(FILE = ‘C:admon_bbddservercert.key’,

DECRYPTION BY PASSWORD =’pass_q_encripta_file_servert’)

 

–Y por último y muy importante, lanzamos la siguiente orden que lo que hace es aplicar el nuevo certificado sobre el contenido de la (nueva o no) base de datos

ALTER MASTER KEY

ADD ENCRYPTION BY SERVICE MASTER KEY

 

Si ahora restauráis el backup en la nueva base de datos veréis como funciona correctamente.

Procesando la petición. ¡Espera, por favor!