DESCARGA ESTE POST EN PDF + CONTENIDO EXTRA >> PINCHA AQUÍ <<
« Regresar índice WikiTrader

¿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:

algoritmo hash

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, mira esta página de Wikipedia muy completa.

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
hash que es

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 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:

sinhash

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í.

conhash

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.

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:

hash database

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!

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.

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

Conclusion

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.

Y no te cuento en las criptomonedas….

¿Qué puntuación le das a lo que has leído?
(Votos: 0 Promedio: 0)
« Regresar índice WikiTrader