Está en la página 1de 8

¿Qué es un hash?

Digamos que tienes un archivo importante para enviar y quieres asegurarte de que llegue al
destinatario sin cambios, en una sola pieza. Podrías usar algunos métodos triviales, como enviarlo
varias veces, contactar al destinatario y verificar el archivo, y así sucesivamente… pero hay un
enfoque mucho mejor: usar un algoritmo hashing.

Los algoritmos hash son funciones que generan un resultado de longitud fija (el valor hash, o hash) a
partir de una entrada determinada. El valor hash es un resumen de los datos originales.

Por ejemplo, piensa en un documento de papel que sigues arrugando hasta el punto de que ya no
puedes leer su contenido. Es casi (en teoría) imposible restaurar la entrada original sin saber cuáles
eran los datos de partida.

Veamos un ejemplo de algoritmo hash con una simple función hash:

1
Podríamos discutir si es un algoritmo seguro (alerta de spoiler – no lo es). Por supuesto, cada
número de entrada es individual (hablaremos más sobre esto en las próximas secciones), pero es
fácil adivinar cómo funciona. Este es un ejemplo muy simple, pero nos da una idea de cómo puede
ser un algoritmo hashing.

Para saber más sobre el hash, https://es.wikipedia.org/wiki/Función_hash

Explicación del algoritmo Hashing

Un algoritmo hash es una función hash criptográfica. Es un algoritmo matemático que mapea
datos de tamaño arbitrario a un hash de tamaño fijo.

Un algoritmo de función hash está diseñado para ser una función unidireccional. Sin embargo, en los
últimos años varios algoritmos de hash se han visto comprometidos.

Esto sucedió con MD5, por ejemplo – una función de hash ampliamente conocida diseñada para ser
una función de hash criptográfica, que ahora es tan fácil de invertir – que sólo podríamos usar para
verificar los datos contra la corrupción no intencional.

Es fácil averiguar cómo debería ser la función de hash criptográfica ideal:

1. Debe ser rápido calcular el valor de hash para cualquier tipo de datos;

2. Debería ser imposible regenerar un mensaje a partir de su valor de hash (ataque de fuerza
bruta como única opción);

3. No debería ser posible encontrar dos mensajes con el mismo hash (una colisión);

4. Cada cambio en un mensaje, incluso el más pequeño, debería cambiar el valor del hash.
Debería ser completamente diferente. Se llama el efecto de avalancha

2
Incluso el más pequeño cambio (una letra) hace que todo el hash sea diferente (ejemplo SHA-1)

¿Para qué lo usamos?

Las funciones de hash criptográficas se utilizan ampliamente en la informática y las criptomonedas.

Podemos usarlas para firmas digitales, códigos de autenticación de mensajes (MAC) y otras formas
de autenticación. También podemos utilizarlas para indexar datos en tablas hash, para huellas
dactilares, para identificar archivos, para detectar duplicados o como sumas de verificación
(podemos detectar si un archivo enviado no sufrió corrupción accidental o intencional de datos).

También podemos usarlos para guardar contraseñas. Si tienes un sitio web, lo más probable es que
no necesites almacenar la contraseña de tus usuarios.

Sólo necesitas comprobar si la contraseña del usuario y la contraseña de un determinado intento


coinciden, así que los hashes deberían funcionar bien y dar alguna protección adicional a tus
usuarios.

Ejemplo de algoritmo de hashing

Entonces… ¿cómo funciona? Volvamos a nuestro ejemplo de algoritmo de hashing. Estamos


enviando un archivo a nuestro amigo. Es un archivo muy importante y queremos asegurarnos de que

3
ha sido recibido en una sola pieza. Es entonces cuando nuestro algoritmo hash entra en acción. Pero
primero, pensemos cómo se vería nuestra transferencia de archivos sin él:

Podemos descubrir algunas ideas triviales. Podrías, por ejemplo, llamar a User2 y podrías
comprobar el contenido del archivo juntos. Pero entonces, ¿qué sentido tiene enviar un archivo? Las
sumas de verificación son nuestra bendición aquí.

4
Antes de enviar un archivo, User1 utiliza un algoritmo hash para generar una suma de comprobación
para un archivo. Luego lo envía junto con el propio archivo. El usuario 2 recibe tanto el archivo como
la suma de verificación. Ahora él/ella puede usar el mismo algoritmo hashing en el archivo recibido.

¿Qué sentido tiene? Ya sabemos que un hash es individual (por lo que no puede haber ningún otro
archivo con el mismo hash) y tiene que ser siempre el mismo para un archivo individual.

No importa cuántas veces utilices el algoritmo de hashing, siempre te dará el mismo resultado. Así
que ahora, User2 puede comparar ambos hashes. Si son iguales, significa que se generan a partir
del mismo archivo. No hay forma de que ningún otro archivo tenga el mismo hash y no hay
posibilidad de que un hash sea diferente para el mismo archivo.

5
De esta manera, el usuario 2 puede verificar si el archivo no está corrupto de ninguna manera.
¿Fácil? Ciertamente.

Muchos servicios de descarga utilizan sumas de verificación para validar la integridad de sus
archivos. Gracias a eso, puedes averiguar si tu archivo descargado no está corrupto.

Algoritmos de hashing más populares

MD5

¡Antes de que vayamos más lejos – MD5 está completamente roto!

Si alguna vez aprendiste algún lenguaje de programación y fue hace algún tiempo, seguramente
conoces este algoritmo. Es uno de los más conocidos.

Este algoritmo de hash solía ser ampliamente utilizado y sigue siendo uno de los algoritmos de hash
más conocidos. Pero a pesar de haber sido diseñado inicialmente para ser utilizado como una
función de algoritmo criptográfico, ya no se considera seguro para su uso con fines criptográficos, ya
que está comprometido. En particular, es posible generar rápidamente colisiones en ordenadores
ordinarios.

Cuando el MD5 se usa para hacer hash de las contraseñas directamente, hay una forma aún más
fácil de romperlo… Google.

Escribiendo el hash en el cuadro de búsqueda, hay una buena posibilidad de que recibas su estado
anterior en milisegundos!

Ahora veamos este ejemplo:

Podrías pensar que estás seguro si tus contraseñas se almacenan como hash MD5, pero si alguien
accede a tu base de datos, puede escribir el hash en Google y obtener su valor real!

6
El Instituto de Ingeniería de Software de la CMU considera que el MD5 está esencialmente
«criptográficamente roto e inadecuado para su uso posterior». Fue aceptado durante muchos años,
pero ahora se utiliza principalmente para verificar los datos contra la corrupción involuntaria.

Familia SHA-x

El Algoritmo Hash Seguro es una función de hash criptográfica diseñada por la NSA de los Estados
Unidos. SHA-0 (publicada en 1993) ha sido comprometida hace muchos años. SHA-1 (1995)
produce un valor de hash de 160 bits (20 bytes). Típicamente se representa como un número
hexadecimal de 40 dígitos de longitud. Se ha visto comprometido en 2005 cuando se descubrieron
las colisiones teóricas, pero su verdadera «muerte» se produjo en 2010 cuando muchas
organizaciones comenzaron a recomendar su sustitución.

Los tres grandes -Microsoft, Google y Mozilla- han dejado de aceptar los certificados SSL SHA-1 en
2017 en sus navegadores, después de múltiples ataques exitosos. SHA-1 se construyó sobre
principios similares a los utilizados en el diseño de los MD4 y MD5. Sin embargo, tiene un enfoque
más conservador

Más seguro, por ahora, es SHA-2. SHA-2 incluye varios cambios importantes. Su familia tiene seis
funciones de hashing : SHA-224, SHA-256 o 512 bits: SHA-224, SHA-256, SHA-384, SHA-512, SHA-
512/224, SHA-512/256.

Hay numerosas razones por las que deberías mudarte al SHA-2 si aún no lo has hecho.

En resumen, el SHA-2 es mucho más complicado y todavía se considera seguro.

Sin embargo, el SHA-2 comparte la misma estructura y operaciones matemáticas que su predecesor
(SHA-1), por lo que es probable que se vea comprometido en un futuro próximo.

Actualmente, Bitcoin usa este algoritmo de hash para mantener la seguridad en sus cadenas de
bloques. ¡Ojo a esto!

Así pues, una nueva opción para el futuro es SHA-3.

SHA-3 (Secure Hash Algorithm 3)  fue diseñado por Guido Bertoni, Joan Daemen, Michaël Peeters y
Gilles Van Assche. Su algoritmo Keccak ganó el concurso del NIST en 2009 y ha sido adoptado
como un algoritmo oficial del SHA. Fue lanzado por el NIST el 5 de agosto de 2015.

Uno de los requisitos de SHA-3 era ser resistente a los posibles ataques que pudieran
comprometer el SHA-2.

7
Keccak es significativamente más rápido que el SHA-2 (del 25% al 80%, dependiendo de la
aplicación). Utiliza la construcción de la esponja. Los datos son primero «absorbidos» en la
«esponja» y el resultado es «exprimido».

Mientras se absorben, los bloques de mensajes son XOR en un subconjunto del estado. Luego se
transforma como un elemento. Mientras se aprieta, los bloques de salida se leen desde este
elemento, pero se alternan con transformaciones de estado.

Un aspecto clave del SHA-3 es que fue diseñado para reemplazar fácilmente al SHA-2 en las
aplicaciones que actualmente utilizan esa variante . Por lo tanto, la transición de SHA-2 a SHA-3
debe ser analizada en lo que respecta al nivel de seguridad requerido y los gastos generales
(refactorización/pruebas) – que dependen en gran medida de la estructura y la arquitectura de la
aplicación.

Los autores del SHA-3 han propuesto características adicionales como un sistema de encriptación
autenticado y un esquema de «tree hashing», pero aún no están estandarizados. Aún así, es el
algoritmo de hashing más seguro por ahora.

Es sin duda a lo que tiene que ir Bitcoin

Conclusión

Los algoritmos Hashing pueden ser muy útiles. Sin embargo, la TI es una industria que cambia muy
rápidamente y esta entropía también se extiende a los algoritmos hashing.

MD5, una vez considerado realmente seguro, ahora está completamente comprometido. Luego
estaba el SHA-1, que ahora es inseguro. Lo mismo ocurrirá seguramente algún día con el
ampliamente utilizado SHA-2.

Para mantener sus estándares de seguridad, debe seguir siempre las últimas tecnologías,
especialmente cuando utiliza algoritmos de hash para la seguridad.

Una gran parte de los buenos estándares de seguridad si estás desarrollando aplicaciones web
es asegurar que los atacantes no puedan hacer ingeniería inversa o manipular tu código
JavaScript.

También podría gustarte