Tag Archive for: hash md5

16Ago 2009 2 Comments */?>

Como proteger a tus usuarios cuando te hackean la base de datos

Categories: Seguridad, Tutoriales - Tags:

Como proteger a tus usuarios cuando te hackean la base de datos? o en otras palabras ¿Como mejorar un HASH MD5 para que no sea tan facil de descifrar?

Para empezar, vamos a explicar que es un HASH MD5 . MD5 es un algoritmo de reducción criptográficos diseñados por el profesor Ronald Rivest del MIT. Hoy en dia es el sistema más utilizado en internet para almacenar las contraseñas . Por lo general cada vez que nos registramos en una web , foro, blog, etc , nuestra contraseña pasa a formar parte de una base de datos que se va a usar cada ves que queremos logear en dicha web para comprobar nuestra identidad.

El algoritmo MD5 es usado para no almacenar las contraseñas como simple cadenas de texto y así proteger la privacidad de cada uno. Imaginense lo que un administrador malicioso o descontento podría hacer con un listado de emails y sus respectivas contraseñas…

Todo programa web , foro , blog ,etc suele traer algun BUG o fallo de software que un usuario mal intensionado puede aprovechar para acceder de forma ilícita y substraer datos importantes (Por eso siempre hay que mantener las actualizaciones al día). El botín más preciado suelen ser las base de datos que cuentan con miles y miles de usuarios. Haganse una idea que cada página que nos registramos nos pide un email y por lo general la gente (me incluyo) suele usar la misma contraseña una y otra ves ( email, foros, paypal, banco, etc).

La función md5 de PHP tiene un solo sentido —>  por lo que si la contraseña es “pepe” su HASH (o cadena) en md5 es 926e27eecdbc7a18858b3798ba99bddd .

1
2
$pass=md5('pepe');
//$pass= '926e27eecdbc7a18858b3798ba99bddd'

Cuando el usuario se conecta e ingresa su clave simplemente se comprueba si el hash md5 de la contraseña ingresada concuerda con el hash md5 almacenado en la base de datos. No existe una función que devuelva de un hash md5 su valor en texto plano.
Pero lo que si existe hoy en día ,son grandes base de datos con millones de hash md5 y sus respectivos valores en texto plano. Por lo que si usamos una contraseña facil o comun es 100% seguro que aparecerá en dicha base de datos.

También existen webs con cientos de ordenadores interconectados que se dedican a crackear los hash md5 y si la contraseña no es compleja (numeros + letras + mayusculas) suelen dar con ella en cuestión de horas o minutos.

Volviendo al principio, y suponiendo que un usuario mal intencionado consiguió acceso a nuestra base de datos , aun tenemos una forma de protegernos. Es mediante la combinación de un hash md5 y una cadena de texto aleatoria, más conocida como SALT.

Para agregar salt a un hash md5 debemo seguir este simple paso:

1
2
3
$contraseña =$_POST['pass'];
$salt= 'Soy un pedazo de texto aleatorio lalalala';
$pass=md5($contraseña . $salt);

Con esa pequeña modificación ya seria imposible crackear el hash md5 siempre y cuando no dispongan del salt. Por lo que si solo tuvieron acceso a la base de datos, lo máximo que nos podrian sacar es un listado de emails, pero no sus respectivos passwords.

Espero que haya servido de ayuda, cualquier duda dejen un comentario.