NOTA: El siguiente texto es una compilación de textos de distintas webs que tratan el tema de hashing. A continuación les copiamos los links de los sitios visitados para que puedan acceder al texto completo de cada uno:

Un algoritmo de hash es una función para resumir o identificar probabilísticamente un gran conjunto de información. Es un algoritmo matemático que nos da un resultado B al aplicarlo en A, es como cualquier función matemática. Podemos decir entonces que un HASH no es más que un número resumen. De hecho, en muchos sitios web podemos encontrar expresiones como “checksum MD5″, lo que literalmente se traduce por “suma de comprobación”. Así, el concepto no es complicado, pero sí su implementación.

Por ejemplo: supongamos que tenemos un fichero cualquiera. Pues bien, si consideramos dicho fichero como un flujo de bits y le aplicamos un algoritmo de HASH lo que obtenemos es otro conjunto de bits (de longitud fija y que depende del número de bits de salida del algoritmo o función que utilicemos) que depende bit a bit del contenido del flujo original de bits que sirvió como entrada al algoritmo.

Además, cumplen las siguientes propiedades:

  • Todos los HASHs generados con una función de hash tienen el mismo tamaño, sea cual sea el mensaje utilizado como entrada.
  • Dado un mensaje, es fácil y rápido mediante un ordenador calcular su HASH.
  • Es imposible reconstruir el mensaje original a partir de su HASH.
  • Es imposible generar un mensaje con un HASH determinado.

Es decir, un algoritmo de HASH no es un algoritmo de encriptación, aunque sí se utiliza en esquemas de cifrado, como algoritmos de cifrado asimétrico (por ejemplo en el RSA).

Ahora bien, tener una función de estas características puede tener muchas aplicaciones. Algunas de ellas pueden ser las siguientes:

  • Comprobación de integridad de ficheros: Supongamos que queremos transmitir un fichero a un amigo. Si antes de realizar este envío calculamos la función HASH del fichero, para nuestro amigo del otro extremo es posible verificar la integridad del fichero aplicando el mismo algoritmo al archivo que recibe. Si ambos coinciden, podemos asegurar que el envío ha sido satisfactorio. Ésta es una aplicación real que se utiliza, por ejemplo, para comprobar la integridad de muchos paquetes que se descargan en distribuciones del sistema operativo GNU/Linux.
  • Seguridad en procesos de identificación en sistemas: Los procesos de identificación (Login+Password) se ven reforzados por estos algoritmos. Se utilizan de la siguiente forma: cuando un usuario accede a su computadora debe introducir su nombre de usuario y su password. Pues bien, si el sistema operativo no registra estos datos como “texto claro”, si no que registra el resultado de aplicarles una función HASH, en el caso de que un usuario malicioso logre acceder a nuestro archivo de registros no conseguirá (a menos que el algoritmo utilizado sea malo o disponga de una supercomputadora) revertir el contenido de dicho registro, y por tanto no puede acceder a nuestro sistema. Esta misma idea se aplica en identificación de usuarios en muchas webs, con la diferencia de que para que este esquema sea seguro debe incluir información adicional y “aleatoria”, como marcas de tiempo y redundancias.
  • Firma digital: Estos algoritmos se utilizan en esquemas de firma digital para verificar la integridad de la información enviada por el canal de comunicaciones. Algoritmos de cifrado asimétrico, como RSA por ejemplo, realizan lo siguiente: calculan la función HASH del contenido del mensaje que se va a enviar y luego se firma dicho checksum con la clave privada del emisor. Así se asegura la integridad de la información y el “no repudio”.

En un post posterior vamos a publicar la resolución para el Quest “Hash is”. Por el momento no para que puedan hacer sus investigaciones y ganarse sus puntos.

Anuncios