26 dic. 2015

Seguridad en el almacenamiento de contraseñas + SALT

De un tiempo para acá algunas páginas importantes han sufrido por el robo de sus contraseñas. Recientemente LinkedIn perdió más de 6 Millones de passwords y a Yahoo le metieron un gol de 450 mil contraseñas. Lo más preocupante de estas fugas es que es posible deducir las contraseñas con relativa facilidad.

LinkedIn guardaba las contraseñas en forma de un Hash SHA-1 y Yahoo por su parte tenía los passwords en texto plano, sin nigún tipo de protección.... eso amigos, no se hace!

Antes de hablar sobre como asegurar ese tipo de información en una base de datos, empezemos por lo más básico....

¿Que es Hashing?

Un hash (también conocido como digest) se puede visualizar como una huella digital relacionada a algún dato (sea un archivo, un string, etc). El hash se logra atraves de un proceso matemático de una sola vía, lo que quiere decir que es complicado recuperar el dato/texto original a partir del hash.

SHA y MD5 son algoritmos para calcular hashes, cada uno genera strings con una cantidad fija de caracteres (que depende del algoritmo que se use). Hay muchos más algoritmos, la función hash_hmac en php nos sirve para calcular muchos más.

Ahora, recordemos algo, como los algoritmos para hashear datos, convierten una cantidad arbitraria de datos a un string con una longitúd fija. Eso deja abierta la posibilidad de que 2 strings distintos resulten en un mismo hash. Esa situación no es algo que suceda con frecuencia, de hecho es muy improbable!

LinkedIn guardaba las contraseñas como un hash SHA-1. Cual es el problema? Que pueden usar un ataque de fuerza bruta (o con un diccionario) para dar con el texto que resulte en ese hash. Este es un problema aún más preocupante si la contraseña es muy popular, como por ejemplo '123456'. De ahí la importancia de usar una contraseña segura... pero ese ya es otro tema.

Adicionalmente también existen las tablas arcoíris y lookup tables que también son herramientas que se usan a la hora de crackear hashes.

En este post de Michael Pratt se brindan los detalles para generar hash y SALT seguros en PHP utilizando las funciones mcrypt_create_iv, Blowfish, crypt y bcrypt y aquí se pueden ver ejemplos de su implementación.

0 comentarios:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info
Si vas a dejar una consulta, procura tener habilitado tu perfil en Blogger o deja una forma de contacto.

Gracias por comentar!