SEGURIDAD : ¿Qué es un HASH ? ¿Para qué "sirve"?


Se pueden ver cada vez más en sitios web de descargas pero en el mundo de la seguridad informática, en sistemas operativos para almacenar las contraseñas de usuarios y en protocolos de red se llevan usando desde hace años. En este artículo explicamos de manera sencilla en qué consisten y el uso que se les puede dar para comprobar la seguridad en archivos descargados.


Una definición "técnica" de hash podría ser: un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud.

Explicándolo con otras palabras, un hash consiste en crear a partir de una entrada (un texto, una contraseña, un archivo por ejemplo) una salida alfanumérica (letras + números) que siempre va tener el mismo tamaño, gracias a unas funciones matemáticas que por ahora no es necesario que entendamos en que consisten. Al resultado del hash, no le puedes dar la vuelta, es decir, no puedes obtener el texto de entrada a partir del hash de salida

En términos coloquiales, sería parecido a coger un gran muslo de carne y pasarlo por una máquina de picar carne. No puedes volver a recomponer del picadillo de carne el mismo muslo idéntico.


Pongamos un ejemplo real para entenderlo mejor, quiero obtener el hash de cada una de estas tres palabras que bien podrían ser 3 contraseñas : * "dios" es la contraseña más utilizada en el mundo. Un grave error usar esa contraseña. 
dios 
frikéalo 
frikealo

Son tres palabras diferentes (observar que la segunda tiene tilde y la tercera no). Según la teoría el resultado del hash de cada contraseña debería ser un conjunto de letras y números , a ese conjunto también le podemos llamar hash, y cada hash tendrá el mismo tamaño (40 carácteres en este ejemplo) pero cada uno será diferente puesto que son tres palabras diferentes. Veamoslo gráficamente:

(Hemos usado un programa para calcular hashes llamado HasCalc , lo puedes descargar gratuitamente en http://www.slavasoft.com/hashcalc/index.htm)

El resultado de calcular el hash a la palabra " dios" es el que ven en el segundo recuadro azul: 46ffd5161bf89b317bb617b376a22344ed6f6a3b . Este hash se ha calculado por el método SHA1 (señalado en rojo) . Hay una variedad de métodos, cada uno con algoritmos diferentes, por ejemplo vemos que también lo hemos calculado mediante el método MD5 y que este método tiene menos caracteres (32) por lo sería menos seguro que el SHA1 entre otras cosas, pero no vamos a entrar en ese tema.



Para las palabras "frikéalo" y "frikealo" obtenemos estos otros:

frikéalo: acbb6974794e75d609ea25c7db1c0b8fb19a8d7c

frikealo: e4617414d89eaf7fc1935c79e771dddd3c21739d




Puede parecer que al usar dos palabras parecidas que sólo difieren en una tilde el resultado será parecido, pero la respuesta es NO. Aquí está el truco, como hemos comentado, cada hash de cada palabra tendrá el mismo tamaño (40 caracteres) independientemente de que escribas "dios" o todo el texto de este artículo (el tamaño viene delimitado por el método que se utilice) pero serán diferentes uno del otro. Esto sirve para entender que si tu tienes un archivo y le calculas el hash, luego le cambias cualquier cosa,  al volver a calcular el hash el resultado ya será diferente a pesar de que el cambio haya sido el mínimo. 

Tanto en Windows como en Linux, las contraseñas de los usuarios están almacenadas en un fichero de texto. Esas contraseñas no las puedes ver en texto plano si no que están" hasheadas" para evitar que cualquiera que tenga acceso a ese fichero descubra tan fácil las contraseñas.

Y por último y a donde queremos llegar después de esta explicación, es que se le puede dar también otro uso, como comprobar si un fichero descargado no está corrupto ni contiene algún troyano.

Cada vez son más los sitios web que están empezando a poner en la información de la descarga el hash del archivo que ellos han calculado previamente mediante el método  MD5, SHA1 o MD2 , etc. Una vez te has descargado un archivo, si tu le calculas el hash (con HashCalc puedes)  y el resultado es el mismo que el que ellos publican en la web, significa que ese archivo no ha sido alterado, nadie le ha metido mano ni ha colado algún troyano y que por lo tanto es el original y debería estar libre de virus. 

Digamos que no es el método mas fiable para comprobar si un archivo está infectado, pero si es algo que poco a poco se está viendo más en la nube y es interesante saber. La próxima vez que veas un hash en una web de descargas ya sabrás "para que sirve".

Si quieres saber mas formas de comprobar la seguridad en tus ficheros e incluso antes de descargar cualquier archivo puedes ver este otro artículo: