¿Qué es el hashing de contraseñas (y cómo funciona)?

¿Qué es el hashing de contraseñas (y cómo funciona)?

Si eres un usuario frecuente de Internet como yo, es muy probable que hayas recibido un correo electrónico que dice algo como esto:

Querido Cliente Valioso,

Recientemente, nuestro sitio web fue víctima de un ciberataque en nuestra red corporativa. Todas las contraseñas se cifraron, pero como medida de precaución, solicitamos a todos nuestros clientes que restablezcan sus contraseñas de inmediato.

Gracias.

Entonces, hubo una violación, parte de su información, incluida su contraseña cifrada, se filtró. ¿Tu cuenta está en riesgo?

Respuesta corta: SÍ, pero ¿por qué?

Para comprender esto, debe comprender el concepto de «hashing de contraseña».

¿Qué es un hash?

Un hash es solo una forma de representar cualquier dato como una cadena única de caracteres. Puede hacer hash de cualquier cosa: música, películas, su nombre o este artículo. Hablando metafóricamente, hashing es una forma de asignar un «nombre» a sus datos. Le permite tomar una entrada de cualquier longitud y convertirla en una cadena de caracteres que siempre tiene la misma longitud. Obviamente, hay muchos métodos (algoritmos) para hacer esto.

Algunos de los algoritmos hash más populares:

  • MD5: dado cualquier dato, devolverá un hash único de 32 caracteres.
  • SHA1: dado cualquier dato, devolverá un hash único de 40 caracteres.
  • SHA256: dados los datos, se devolverá un hash único de 64 caracteres; diseñado por la Agencia Nacional de Seguridad.

Veamos un ejemplo sencillo:

Mi nombre es «Jamin Becker»

La representación hash MD5 de mi nombre es:

eeb7048c69b088739908f5f5144cd1f5

hash-diagrama-ilustracion1

La representación hash SHA1 de mi nombre es:

ae480b717c08b6ab36a85075864e35b9c528d7c5

La representación hash SHA256 de mi nombre es:

a477cc14eae5fd94fe4cb20b36ec80ac6983bad44973ae7f4f230010f01289b0

¿Por qué Hashing es seguro?

La razón por la que el hashing es seguro es simple: el hashing es una operación unidireccional. No se pueden revertir. Dada una cadena «eeb7048c69b088739908f5f5144cd1f5», no hay forma de revertir el hash MD5 para devolver «Jamin Becker». Esto se debe a la forma en que los matemáticos y programadores estructuraron el algoritmo hash MD5, y se trata de un problema informático fundamental llamado «P frente a NP.” P y NP son solo dos clases de algoritmos.

La mayoría de los algoritmos hash se incluyen en NP, lo que significa que se pueden calcular rápidamente. Sin embargo, los algoritmos de eliminación de hash (es decir, «eeb7048c69b088739908f5f5144cd1f5» -> «Jamin Becker») pertenecen a la clase P y solo se pueden resolver de manera eficiente en tiempo polinomial (es decir, usando una computadora cuántica significativamente más avanzada que las disponibles en la actualidad).

Entonces, ¿por qué es esto bueno para la seguridad?

hash-diagrama-ilustracion2

Digamos que se suscribe a un sitio web y elige la contraseña «12345». Inmediatamente, ese sitio web codificará su contraseña, probablemente con SHA1, y la almacenará en una base de datos. Ahora, cada vez que inicie sesión, el sitio web actualizará su contraseña y la comparará con la almacenada en la base de datos. Si coinciden, se autenticará con éxito. Si alguna vez se viola el sitio web y se filtra la base de datos de contraseñas, su contraseña aparecerá como «8cb2237d0679ca88db6464eac60da96345513964» y no como «12345».

Estrategias de ataque hash

Entonces, el atacante tiene la versión codificada de mi contraseña y no hay forma de revertirla a 12345. No tengo nada de qué preocuparme, ¿verdad? ¡EQUIVOCADO!

Un método que se usa comúnmente para obtener la contraseña de texto sin formato de un hash se denomina ataque de fuerza bruta. En este ataque, el atacante ejecutará una lista de palabras gigante y procesará cada palabra con el algoritmo de hash adecuado. Luego pueden comparar los valores hash en la lista de palabras con los que han obtenido de la base de datos. Si un hash de la lista de palabras coincide con el de la base de datos, simplemente pueden encontrar la contraseña de texto sin formato correspondiente en la lista de palabras original que codificaron. Los atacantes experimentados utilizarán listas de palabras extremadamente grandes combinadas con un software potente para ejecutar millones de posibilidades de contraseña por segundo.

wordlist-bruteforce-hash-cracking

Otro método de ataque intenta explotar el propio algoritmo hash creando una colisión hash. Una colisión de hash ocurre cuando dos conjuntos de datos diferentes se resuelven en el mismo hash y, aunque esto es raro, puede ser mortal. Esto le permitiría al atacante generar una cadena de caracteres que no es su contraseña, pero que aún podría iniciar sesión en su cuenta ya que genera el mismo hash.

Conclusión

Los algoritmos hash son cada vez más avanzados. Los matemáticos y los informáticos están constantemente diseñando algoritmos de hash criptográfico con menores probabilidades de colisiones. Sin embargo, es importante recordar que no importa cuán fuerte sea el algoritmo hash, siempre se puede descifrar mediante un ataque de fuerza bruta. La buena noticia es que también puede defenderse fácilmente contra estos ataques simplemente siguiendo la política de contraseñas de mejores prácticas.

  1. El tamaño sí importa: cuanto más larga sea la contraseña original, es menos probable que aparezca en una lista de palabras
  2. No sea predecible: evite usar palabras como «contraseña» y «myname123»
  3. Use una combinación de caracteres especiales, números, letras mayúsculas y minúsculas

¿Cuál es tu opinión sobre el hash? Comparta sus puntos de vista en el comentario a continuación.

Credito de imagen: lupa en línea huella digital porBigStockPhot

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas