Вы находитесь на странице: 1из 5

thesolidqjournal

database administration 24
Por Greg Low

Ecos desde el campo

Cifrado en SQL Server


(Parte 2 de 3)
Este artculo es la segunda parte de una serie de tres que describe cmo empezar a trabajar
con cifrado en Microsoft SQL Server. El mes pasado, hemos introducido las tecnologas de
cifrado necesarias para implementar la encriptacin basada en columnas y el cifrado de datos
transparente (TDE). Este mes, le mostramos cmo trabajar con encriptacin basada en colum-
nas. El mes que viene, le mostraremos cmo utilizar TDE.

D urante una reciente contratacin de consul-


tora, me preguntaron acerca de cmo utilizar
el cifrado basado en columnas en SQL Server. En
En el ltimo artculo, he mencionado que hoy ex-
isten dos formas bsicas de cifrado: cifrado simtri-
co y cifrado asimtrico (o de clave pblica). El cifrado
este artculo, que es la segunda parte de una serie simtrico utiliza la misma clave para cifrar y descifrar
de tres partes, exploraremos cmo comenzar a usar los datos. Las claves que se utilizan en el cifrado
encriptacin basada en columnas. En el artculo ante- simtrico son ms pequeas que las que se utilizan
rior, proporcionbamos informacin bsica acerca del para el cifrado asimtrico, por lo que el cifrado sim-
cifrado y los certificados. Si no est muy familiarizado trico es ms rpido. Sin embargo, el cifrado simtrico
con estas tecnologas, debe leer el artculo del mes presenta un gran desafo: cmo cambiar la clave. El
pasado antes que ste. Puede encontrar el artculo cifrado asimtrico supera este problema mediante
del mes pasado aqu. El prximo mes, extender el una clave para cifrar los datos y otra clave para desci-
tratamiento del cifrado para incluir la proteccin por frarlos. Las dos claves estn relacionadas matemti-
claves de cifrado y TDE. camente, pero la combinacin de la complejidad del
algoritmo que se utiliza y la longitud de las claves
Tecnologas de cifrado en SQL Server (medida en bits) implica que es matemticamente
imposible obtener una clave a partir de la otra clave,
SQL Server 2005 presenta una increble variedad de hoy en da. Una clave (la clave privada) se mantiene
tecnologas. Sospecho que muchos profesionales en secreto, y la otra (la clave pblica) puede enviarse
de SQL Server no son conscientes de cuntas tec- en un formato no cifrado a la otra parte.
nologas cuntos fueron introducidas en esa versin. SQL Server admite claves simtricas, claves asi-
No es sorprendente que los profesionales estn to- mtricas y certificados como objetos de la base de da-
dava aprendiendo algunas de ellas. En particular, tos (y del servidor). Las claves simtricas normalmente
las preguntas relativas a los certificados y claves de se utilizan para cifrar la mayora de los datos y claves
encriptacin basadas en columnas todava obtienen asimtricas se utilizan para proteger otras claves.
respuestas en blanco de la mayora de los profesion- Analicemos un ejemplo concreto de utilizacin
ales de SQL Server. de cifrado de columna basada en SQL Server.

The SolidQ Journal, May 2011 www.solidq.com/sqj

sqj 11 pag. 24-28 esp.indd 1 2/6/11 15:01:00


25

Por ltimo, la propia clave debe ser protegido


Ejemplo de cifrado basado de alguna manera. Para mayor simplicidad, opt por
en la columna utilizar una contrasea. Esto significa que un usu-
ario que quiera descifrar datos mediante esta clave
El Listado 1 muestra el cdigo para crear una base necesita saber esta contrasea para abrir la clave.
de datos de prueba que usar para este ejemplo. Hablaremos sobre algunas otras opciones para pro-
Antes de que se puedan cifrar los datos, debe de teger la clave el mes que viene.
crearse una clave de cifrado. El Listado 2 muestra un Las claves abiertas estn asociadas con las ses-
ejemplo de cmo crear una clave simtrica. iones de usuario. El Listado 3 muestra cmo un usu-

Listado 1: cdigo para crear la base de datos

USE master;
GO

IF EXISTS(SELECT 1 FROM sys.databases WHERE name = NEncryptTest)


DROP DATABASE EncryptTest;
GO

CREATE DATABASE EncryptTest;


GO

USE EncryptTest;
GO

En este cdigo, en primer lugar he especificado que ario puede abrir la clave dentro de una sesin. Una
quiero crear una clave simtrica llamada GregsKey. A vez que la clave est abierta, se puede utilizar para
continuacin, he indicado qu algoritmo de cifrado que cifrar y descifrar datos.
El Listado 4 pgina 26, muestra cmo consultar
las claves simtricas dentro de la base de datos, y la
Listado 2: cdigo para crear una clave simtrica
figura 1, pgina 26, muestra el resultado de ejecutar
este comando.
CREATE SYMMETRIC KEY GregsKey
WITH ALGORITHM = TRIPLE_DES Listado 3: Cdigo para abrir una clave simtrica
ENCRYPTION BY
PASSWORD = VerySecretStuff;
GO OPEN SYMMETRIC KEY GregsKey
DECRYPTION BY PASSWORD = VerySecretStuff;
GO
se utiliza. SQL Server admite algoritmos de cifrado que
estn, a su vez, basados en la API cifrado (CAPI) del
sistema operativo. Estos algoritmos tienen nombres
como DES, Triple DES, DESX, RC2, RC4, RC4 de 128 Tenga en cuenta que la clave tiene un ID (sym-
bits, AES de 128 bits, 192 bits AES y AES de 256 bits. metric_key_id) y un valor de identificador nico glob-
Cada sistema operativo soporta una lista especfica al (GUID) (key_guid). Hablaremos en breve de cmo
de algoritmos de cifrado. Por ejemplo, Windows XP y utilizar esta clave para cifrar datos.
Windows 2000 no admiten el algoritmo AES. En este El Listado 5, pgina 26, muestra un ejemplo de
ejemplo, he seleccionado la opcin TRIPLE_DES. cmo cifrar y descifrar datos.

The SolidQ Journal, Mayo 2011 www.solidq.com/sqj

sqj 11 pag. 24-28 esp.indd 2 2/6/11 15:01:00


thesolidqjournal
database administration 26

Figura 1: Salida de la consulta de las claves simtricas (dividida en dos lneas)

Listado 4: Cdigo para consultar las claves simtricas podra haber varias claves abiertas al mismo tiempo.
disponibles La clave es identificada por su key_guid. En este
ejemplo, obtuve el GUID pasando el nombre de la
SELECT * FROM sys.symmetric_keys; clave a la funcin Key_GUID.
GO Cuando se ejecuta el cdigo en el listado 5, se
reciben dos conjuntos de resultados. La figura 2
muestra el primero de ellos.
En este cdigo, declarado una variable varbinary Como muestra este resultado, al cifrar los da-
(Max), @ CipherData, que se utilizar para el texto tos mediante la ejecucin del comando SELECT @
cifrado. Tenga en cuenta que esto podra ser fcil- CipherData; se devuelve un valor binario. Observe
mente una columna de base de datos del mismo que este valor es mucho ms grande que el texto

Listado 5: Cdigo para cifrar y descifrar datos

DECLARE @CipherData varbinary(max);

SET @CipherData = EncryptByKey(Key_GUID(GregsKey),


Text that I dont want anyone to read);

SELECT @CipherData;

SELECT CONVERT(varchar(200),DecryptByKey(@CipherData));
GO

tipo. A continuacin, utilizo la funcin EncryptByKey() original. Esto es importante, ya que no se desea que
para cifrar el texto. Adems de proporcionar el texto nadie para poder calcular los datos basndose en la
cifrado, identifica qu clave de cifrado utilizar, ya que longitud de los valores cifrados. Esto es parte de la

Figura 2: Salida del comando que cifra los datos

The SolidQ Journal, Mayo 2011 www.solidq.com/sqj

sqj 11 pag. 24-28 esp.indd 3 2/6/11 15:01:00


27

razn por la que los algoritmos de cifrado agregar


un dato adicional, conocidos como vector de inicial-
izacin (IV), que se denomina comnmente salt, y -a SQL Server 2005 introdujo
menudo- agregan cierta cantidad de relleno para los una increble variedad de
datos cifrados. Otro uso importante de un IV, es evi-
tar las situaciones en las que cifrar el mismo texto
tecnologas. Sospecho que
claro siempre producira el mismo texto cifrado. muchos profesionales de SQL
La figura 3 muestra el segundo conjunto de re- Server no son conscientes
sultados que contiene la salida del comando SE-
LECT Convert (varchar 200), DecryptByKey(@Ci-
ms que de una pequea
pherData));. parte de las novedades que se
introdujeron en esa versin.

de la clave de cifrado como el primer componente


Figura 3: Salida del comando que descifra los datos
de los datos cifrados, por lo que ya sabe qu clave
de cifrado se utiliza para descifrar los datos. El usu-
ario slo necesita tener la clave de cifrado abierta. Si
Esta salida muestra cmo es el resultado de desci- se ejecuta el cdigo en el listado 6, podr ver lo que
frar los datos. La funcin DecryptByKey() se ha utiliza- ocurre cuando una clave no est abierta.
do para realizar el descifrado. Tenga en cuenta que slo La Figura 5, pgina 28, muestra la salida del in-
fue pasado a la funcin el texto cifrado. Cmo sabe tento de descifrar los datos con la clave cerrada y el
SQL Server qu clave usar para descifrar los datos? mensaje que aparece en la solapa Mensajes.
La respuesta est en los datos en s. En este
caso, el GUID de la clave era 6183B200-4F22-4235- Listado 6: Cdigo que intenta descifrar datos con una
8682-408551F9CF2F. Los valores GUID pueden es- clave cerrada
cribirse en varias formas. El Listado 6 muestra esta
misma clave recuperada como una cadena binaria.
Y el resultado de ejecutar el cdigo del listado 6 se DECLARE @CipherData varbinary(max);
muestra en la figura 4.
Si echa un vistazo a la salida en la figura 2, obser- SET @CipherData = EncryptByKey(Key_GUID(GregsKey),
var que este mismo valor es el primer componente Text that I dont want anyone to read);
de los datos cifrados. SQL Server almacena el GUID
SELECT @CipherData;

Listado 6: cdigo para recuperar el Key_GUID como una SELECT CONVERT(varchar(200),DecryptByKey(@CipherData));


cadena binaria
CLOSE SYMMETRIC KEY GregsKey;
SELECT CAST(key_guid AS varbinary) FROM sys.symmetric_keys;
SELECT DecryptByKey(@CipherData);
GO

Figura 4: Salida de la sentencia anterior para recuperar el Lo que resulta particularmente potente de este
Key_GUID como cadena binaria diseo es que varios usuarios pueden ejecutar la

The SolidQ Journal, Mayo 2011 www.solidq.com/sqj

sqj 11 pag. 24-28 esp.indd 4 2/6/11 15:01:00


thesolidqjournal
database administration 28

Figura 5: Intento de descifrar datos con una clave cerrada

misma instruccin SELECT pero los datos que cada cin disponible, que se vuelve an ms importante
usuario ver dependen de la clave de cifrado de que en TDE.
l o ella hayan abierto en ese momento, y todo esto
ocurre sin que se produzca ningn error.

Resumen
Acerca del Autor
En este artculo, se describe el proceso bsico para
el uso de claves simtricas para cifrar y descifrar los Dr. Greg Low (blog | podcast | twitter)
datos de SQL Server. En el siguiente artculo, habla- director gerente y mentor en SolidQ.
remos ms sobre cmo se protegen las claves de Es MVP de Microsoft para SQL Server
cifrado. En particular, es importante darse cuenta de y Director Regional de Microsoft para
que la proteccin con contrasea no es la nica op- Australia.

PowerPivot for Excel 2010 promises to put the power of self-service Business Intelligence solutions in the hands of users
while giving IT the tools to efficiently manage these solutions through SQL Server 2008 R2.
What can this new data analysis tool do to
speed the delivery of better business insights for your organization?
Solid Quality Mentors is currently involved in several PowerPivot client engagements, and wed love
to explore the possibilities with you.
If youre ready to get started or just curious, give us a call at 1-800-757-6543
or drop us an email at info@solidq.com.

www.solid.com
sqj 11 pag. 24-28 esp.indd 5 2/6/11 15:01:00

Вам также может понравиться