BLOG

Funciones Hash: MD5 y SHA-256
Seguridad-Tecnología

En el último artículo exploramos las posibilidades que nos ofrece la criptografía asimétrica para mejorar la seguridad de nuestras comunicaciones digitales. Hoy pondremos el foco en otro tipo de operación especial usada ampliamente en el campo de la seguridad: las funciones hash. Aprenderemos de forma práctica a usar algunas de las funciones hash más populares y utilizadas como son MD5 y SHA-256.

¿Qué es un una función Hash?

La función hash es un tipo de operación que toma una entrada de datos arbitraria  y la mapea a una salida de un tamaño fijo, llamado hash o resumen. El tamaño de salida suele especificarse en bits de datos y se incluye a menudo en el nombre de la función hash.

Las funciones hash criptográficas se usan para diversas aplicaciones como autenticación, integridad de mensajes, huellas digitales, detección de datos corruptos y firmas digitales. El hash criptográfico difiere claramente de la encriptación porque las funciones hash criptográficas deben ser unidireccionales. es decir, en una función hash puedes introducir texto sin formato y obtener una salida ininteligible, pero no se puede tomar la salida del hash y recuperar el texto sin formato.

La función hash criptográfica ideal debe ser determinista, lo que significa que el mismo valor de entrada debe devolver siempre el mismo resumen hash de salida. Un pequeño cambio en la entrada debería dar como resultado una salida totalmente distinta, tratando de evitar que ante dos entradas de datos diferentes nunca se produzca el mismo resultado hash (colisiones de hash).

MD5 y SHA

MD5 es una función hash popular y ampliamente usada, diseñada a principios de la década de 1990 como una función hash criptográfica. Trabaja con bloques de 512 bits y genera resúmenes de hash de 128 bits. MD5 fue publicada en 1992, y aunque durante estos años fue usada y adoptada en forma generalizada, se han descubierto varias vulnerabilidades durante los últimos años por lo que actualmente se recomienda usar algoritmos más seguros como SHA-256, PBKDF2 bcrypt scrypt  en lugar de MD5.

SHA-1 es otra de las funciones hash criptográficas más populares. Fue diseñada por la NSA y publicada en 1995. Trabaja con bloques de 512 bits y genera un resumen hash de 160 bits. Se utiliza en protocolos como TLS/SSL, PGP SSH y en IPsec. Muchas organizaciones recomiendan reemplazar SHA-1 por SHA-2 o SHA-3 y los principales proveedores de navegadores anunciaron sus intenciones de suprimir la compatibilidad con certificados SSL que utilizaban SHA-1 en 2017 debido a la identificación de algunas vulnerabilidades. Actualmente SHA-256 es uno de los hash más utilizados.

MD5: Caso práctico con md5sum

Md5sum es un programa de hash que calcula y verifica los hashes MD5 de 128 bits. Se utiliza principalmente para verificar la integridad de los archivos. Para comenzar, crearemos un archivo de texto con algunos datos llamado «file.txt» que contendrá una sola línea de texto básico:

$ echo 'hello world' > file.txt

A continuación utilizaremos md5sum para generar un hash del archivo y almacenar el resultado en un fichero llamado “file.txt.md5”:

$ md5sum file.txt > file.txt.md5

Para ver el hash que acabas de generar:

$ cat file.txt.md5

Con md5sum es posible verificar que el hash sea correcto y que el archivo original no haya sido manipulado desde que se creó el fichero “file.txt.md5”. Para ello, escribe el siguiente comando y observa el resultado mostrado:

$ md5sum -c file.txt.md5

Ahora vamos a modificar el fichero original “file.txt” y comprobar que en este caso la verificación del hash falla.

$ nano file.txt

Para guardar los cambios en el archivo, presiona Ctrl-X y luego Yes.

Una vez modificado el archivo, volvemos a realizar la verificación del hash. Comprueba que validación ha fallado lo que demuestra que cualquier cambio que introduzcamos en el fichero, por muy pequeño que sea, generará un hash diferente:

SHA-256: Caso práctico con shasum

Vamos a repetir los pasos que hicimos en el caso práctico anterior pero esta vez utilizando la función hash SHA-256 mediante el uso de la herramienta shasum. SHA-256 ofrece mayor seguridad que MD5 y es uno de los hash más utilizados.

Lo primero que haremos será generar de nuevo el hash del fichero “file.txt”. El argumento –a especifica el algoritmo que se quiere utilizar, siendo SHA-1 el predeterminado si no se indica ningún otro valor.

$ shasum -a 256 file.txt > file.txt.sha256

SHA-256 genera un hash más largo que MD5 y, por tanto, más difícil de adivinar:

$ cat file.txt.sha256

Por último vamos verificar el hash generado y comprobar que el fichero original no ha sido modificado:

$ shasum -c file.txt.sha256

Con esto finalizamos el caso práctico. Puedes probar a modificar de nuevo el fichero original «file.txt«, volver a verificar el hash y comprobar que la validación fallaría. Espero que te haya resultado interesante aprender a utilizar estos dos algoritmos de hashing para verificar la integridad de la información contenida en los archivos de texto.

Referencias

Comparte este artículo si te gustó:

3 Responses

  1. Buens noches. Gusto en saludarte.Estoy comenzando clases sobre cyberseguridad, e investigando sobre los Hash donde cada una tiene diferentes funciones. ¿Porque los valores que arrojan tiene variación de longitud diferente?

    En esper de tu pronta respuesta.

  2. ¿ Md5 no se considera roto ?

    Ahora mismo las unicas alternativas que veo son SHA-2 y PBKDF2.

    Aunque no se cual es mejor. ¿ Que opinion tienes ? Yo en principio prefiero PBKDF2 pero realmente no he informado lo suficiente.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.