TCNICAS DE
ENCRIPTACIN DE BASE
DE DATOS EN MYSQL
Ing. Cristian Garca Estrella
Definicin
La encriptacin es el proceso para volver ilegible
informacin considerada importante. La informacin una
vez encriptada slo puede leerse aplacndole una clase.
Caractersticas de la criptografa
Pequeas variaciones de textos llanos
Los tamaos de los textos planos deben ser comparables
con los cifrados.
Los textos cifrados deben calcularse eficientemente a
partir de los planos.
Tipos de Criptografa
Criptografa simtrica
La criptografa simtrica solo utiliza una clave para cifrar y
descifrar el mensaje.
Tipos de Criptografa
Criptografa asimtrica
La criptografa asimtrica se basa en el uso de dos claves: la
pblica y la privada .
Tipos de
Criptografa
Criptografa hbrida
Este sistema es la unin de las ventajas de los dos anteriores, El
proceso para usar un sistema criptogrfico hbrido es el siguiente
(para enviar un archivo):
Generar una clave pblica y otra privada (en el receptor).
Cifrar un archivo de forma sncrona.
El receptor nos enva su clave pblica.
Ciframos la clave que hemos usado para encriptar el archivo con la
clave pblica del receptor.
Enviamos el archivo cifrado (sncronamente) y la clave del archivo
cifrada (asncronamente y solo puede ver el receptor).
Implementar Opciones para Encriptacin de
Datos en Trnsito
El cifrado es una tecnologa madura, y la obtencin de base de datos
de las comunicaciones implica generalmente asegurar TCP / IP de
sesiones. Como resultado de ello, puede elegir entre un buen nmero
de opciones de ejecucin cuando se desea cifrar la base de datos
sesiones. Estos van desde la base de datos especfica de los
servicios de cifrado para el uso de los servicios bsicos prestados por
el sistema operativo. En concreto, vers las siguientes opciones que
ofrecen una muestra de la amplia gama de tcnicas:
Caractersticas especficas de la Base de datos (ejemplo, Oracle Advanced
Security).
Mtodos de conexin de base (ejemplo, usar protocolo Secure Sockets Layer
[SSL]).
Garantizar los tneles (ejemplo, mediante el sistema Secure Shell [SSH]
tneles).
Basndose en el sistema operativo (ejemplo, el cifrado IPSec).
Uso de SSL para conexiones de base de datos segura
Encriptacin de conexion
MySQL puede establecer conexiones seguras encriptndolas
mediante el protocolo SSL*; de esta manera, los datos que se
transmiten (tanto la consulta, en un sentido, como el resultado, en
el otro) entre el cliente y el servidor estarn protegidos contra
intrusos. Para especificar que un usuario debe conectarse
obligatoriamente con este protocolo, se utiliza la clusula requiere:
mysql> grant all
-> on *.*
-> to visitante@localhost
-> require ssl;
Encriptacin de contraseas
MySQL nos da diferentes herramientas para hacer
nuestras contraseas ms seguras, vamos a enumerarlas
desde la menos segura hasta la ms segura de todas:
1. MD5
2. SHA y SHA1: En MySQL 5.1 son iguales, pueden ser usadas
indiscriminadamente.
3. AES
MD5
Para guardar una contrasea encriptada con MD5 necesitaremos una tabla con
un campo de 32 caracteres, aunque se ha demostrado que el algoritmo MD5
puede ser vulnerado, la prctica es tan compleja que no merece la pena el
esfuerzo, el algoritmo MD5 no puede ser revertido, es decir, no se pueden
recuperar contraseas de este sistema.
Insertar una contrasea con MD5:
mysql> INSERT INTO usuarios VALUES('usuario',MD5('contrasea'));
SHA y SHA1
La funcin SHA y SHA1 son sinnimos, por lo que hacen el mismo efecto, al
igual que MD5 no puede ser revertido y este necesita un campo de 40
caracteres para su almacenamiento, es ms seguro que MD5 ya que calcula
el cheksum SHA de 160 bits de una cadena, mientras que MD5 la calcula de
128.
Insertar una contrasea con SHA:
mysql> INSERT INTO usuarios VALUES('usuario',SHA('contrasea'));
AES
El algoritmo AES es el ms completo y complejo, tiene posibilidad de
revertirse y se utiliza con una llave privada. Para almacenar estas
contraseas necesitamos que nuestro campo sea de tipo BLOB, ya que el
resultado de la operacin ser un dato binario muy aleatorio.
Insertar una contrasea con AES:
mysql> INSERT INTO usuarios
VALUES('usuario',AES_ENCRYPT('contrasea','llave'));
Para desencriptar:
mysql> INSERT INTO usuarios
VALUES('usuario',AES_DECRYPT('contrasea','llave'));
Para obtener o realizar un Query basta con usar la misma
funcin que encripto excepto en el caso de AES para el
cual deberemos usar:
SELECT AES_DECRYPT (password, my_secret_key_to_encrypt)
AS unencrypted FROM user_aes;
En los otros casos bastara con:
SELECT * FROM user WHERE user_name=member1 AND
password=MD5(secret password).