Hosting - Cyberneticos.com

HASH: Una de hashes, por favor

Hola a todos. Aquí estamos de nuevo. Hoy vamos a hacer un parón en nuestra serie de critografía y vamos a hablar de la funcion hash. Aunque forma parte de la criptografía no se trata de un sistema de cifrado como los que hemos estado viendo en los anteriores post de la serie. Empecemos por el principio.

¿Que es un hash?

Un hash es una función resumen o también llamada digest.  Esta función o algoritmo recibe una cadena de elementos y devuelve otra cadena de longitud fija. La cadena de origen se puede tratar de un archivo, una palabra, una frase o un disco entero. La principal diferencia con un sistema de cifrado es que esta función no tiene inversa, es decir, a partir de un hash no podemos obtener la cadena original, mientras que en los sistemas de cifrados, con el uso de la clave, podíamos recuperar el mensaje original.

¿Y esto vale para algo?

Pues aunque parezca que no, es muy útil y prácticamente lo usamos a diario. El uso principal de un hash es verificar la integridad de un archivo.  Vamos a ver un ejemplo que nos aclarara esto. Podéis hacerlo vosotros mismo, deberíais obtener los mismo resultados.

Lo primero, creamos un archivo de texto con con una frase:

root$ echo «Jar jar binks nunca debio existir» > archivo.txt
root$ cat archivo.txt
Jar jar binks nunca debio existir
root$ md5sum archivo.txt
289f43d414b783610e364be7bfa4a2d5 archivo.txt

Ya tenemos el hash (289f43d414b783610e364be7bfa4a2d5), en este caso obtenido con el comando md5sum. Ademas de md5 (128 bits) existen otros algoritmos de calculo de hashes que seguro que os suenan: sha1 (160 bits), sha256 (256 bits), sha512 (512 bits).

Ahora vamos a modificar el archivo mínimamente, tan solo modificamos una letra:

root$ cat archivo.txt
Jar Jar binks nunca debio existir
root$ md5sum archivo.txt
1f470f45c752b03bf6592a26b62384f0 archivo.txt

Tan solo cambiando una jota minúscula por una mayúscula, el hash cambia completamente. Gracias a los hash, podemos verificar que un archivo no ha cambiado, por ejemplo, cuando se analizó como prueba para un juicio. Gracias al hash, si la prueba digital hubiera sido modificada podríamos saberlo. También podemos hacer hashes a discos enteros, muy útil también el procesos de peritaje informático.

Otra utilidad muy útil es para comparar archivos. Si dos archivos tienen el mismo contenido, tendrán el mismo hash. Esta función es muy usada por los sistemas de antivirus. Muchas veces habréis oído hablar de las firmas de virus. Una firma simplemente es un hash del virus, de modo que si aparece otro archivo con el virus, el antivirus detectara que es el mismo archivo y lo bloqueara.

Uno de los usuos las mas extendidos es la ofuscación de contraseñas. Cuando nos registramos en una web, si tiene unas medidas de seguridad mínimas, nuestra contraseña no se almacenara tal y como la escribimos (llamado texto plano) si no que se hará un hash de esta contraseña. De este modo, si alguien consigue acceso al servidor solo tendra acceso a los hashes y no podra obtener directamente las contraseñas a traves de estos hashes.

BBDD con usuarios y passwords hasheadas

¿Quieres decir que nadie podrá descifrar la contraseña hasheada?

No todo es tan bonito. Existen paginas y diccionarios enteros que se dedican a a obtener el hash de contraseñas. De este modo, si obtienes dos hashes iguales puedes estar seguro de que las contraseñas originales son iguales

En los enlaces de la derecha podéis encontrar un link a CrackStation, una de las múltiples paginas que existen con miles de hashes almacenados para comparar los vuestros.

Muy importante: Colisiones

Una colisión se produce cuando 2 archivos distintos producen hashes iguales. En esta pagina podéis obtener muchísima información y ejemplos de colisiones md5.

En temas forenses, para validar la integridad de los archivos/imágenes de disco, es recomendable obtener 2 hashes distintos de cada prueba. Con esto disminuimos muchísimo la posibilidad de colisión (debería aparecer la colisión en los 2 hashes).


Me dejo gran parte en el tintero, los hashes dan para mucho pero tampoco quiero hacer un tratado de hashing. La idea es daros las herramientas básicas y a partir de ahí que vosotros vayáis investigando.

Os planteo un reto. Coged un archivo, obtener el hash y a continuación haced las siguientes operación.

  • Haced una copia del archivo. ¿El nuevo archivo tiene el mismo hash?
  • Cambiad el nombre al archivo.¿Sigue teniendo el mismo hash? ¿Por que?
  • Cambiad la fecha de modificación, por ejemplo, haciendo un touch en Linux. ¿Cambia el hash? ¿Por que?

Podéis poner vuestros resultados, dudas, agradecimientos, insultos… en los comentarios

Series Navigation<< Vigenère, el código indescifrable

Deja un comentario

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.