Un hash es una función matemática que convierte una entrada de longitud arbitraria (una longitud cualquiera) en una salida cifrada de longitud fija. Si! has leído bien: Independientemente de la cantidad de datos que haya en el original o del tamaño del archivo en cuestión, el resultado de la función siempre tendrá el mismo tamaño.
Es importante diferenciar entre:
- Función hash: Es el proceso criptográfico mediante el cual se obtiene el hash
- Hash: Es el resultado de la función hash. El dato concreto y cifrado final.
Veamos con un ejemplo:
Usando un cifrado SHA256, si escribimos «hola», nos devolverá este hash:
e633f4fc79badea1dc5db970cf397c8248bac47cc3acf9915ba60b5d76b0e88f
por otro lado, si ponemos «HOLA» en mayúscula, nos devolverá:
73c3de4175449987ef6047f6e0bea91c1036a8599b43113b3f990104ab294a47
Cambiando simplemente el tipo de letra, ha cambiado el hash resultado final, (con la misma función hash SHA256) pero mantiene la misma longitud.
Si por ejemplo escribimos las dos primeras frases del libro más famoso de la historia, ¿Qué nos devuelve? Pues si escribimos:
«En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún palomino de añadidura los domingos, consumían las tres partes de su hacienda»
nos devuelve:
e23028ac425843dfae9181e1e5444871ec893cfa38f8eaa97bb87121381429c3
exacto! un hash del mismo tamaño que «hola» y que «HOLA». Y bastaría que modificáramos una sola coma, nos comiéramos un sólo espacio o una simple palabra para que el hash resultante fuera completamente diferente, pero del mismo tamaño.
Os invitamos a probar si los hash que hemos puesto son ciertos o no en este convertidor online de hash
https://emn178.github.io/online-tools/sha256.html
También dejamos esta imagen para que nos ayude a comprender el concepto:
Una de las principales características de los hash es que son unidireccionales, y no valen para hacer ingeniería inversa.
¿Para qué se usan los hash?
Esta es en muchas ocasiones, la pregunta del millón. Pero la verdad es que no tienen una utilidad concreta, sino que tienen un montón de utilidades relacionadas con la criptografía y con la seguridad web.
Aunque se han utilizado desde hace tiempo, es ahora con el auge del Bitcoin cuando han visto su popularidad aumentada. Esto es debido a que su uso y complejidad son clave para asegurar el sistema de bloques que vertebra la seguridad del sistema de criptos. (blockchain).
Como hemos visto, los hash permiten identificar de manera inequívoca los datos que componen un archivo concreto. Y si se modifica un sólo elemento, el hash cambia. Esto significa que los hash permiten reconocer de manera inequívoca un archivo o documento y así estar seguros de que no se ha modificado con fines maliciosos.
Estas características hacen que los códigos hash sean un elemento imprescindible en la verificación de bloques mediante el minado de éstos hash. De este modo, sólo cuando un minero encuentra el hash del bloque que contiene los datos del bloque, lo puede verificar para así crear el bloque siguiente.
Otro uso mucho más clásico es el cifrado de contraseñas. Lejos de lo que muchos podáis creer, los distintos servicios online no guardan las contraseñas en texto plano (o no deberían xD), sino que las «hashean» para almacenarlas de forma segura.