Funciones de hash de criptografía
Las funciones hash son extremadamente útiles y aparecen en casi todas las aplicaciones de seguridad de la información.
Una función hash es una función matemática que convierte un valor de entrada numérico en otro valor numérico comprimido. La entrada a la función hash es de longitud arbitraria pero la salida siempre es de longitud fija.
Los valores devueltos por una función hash se llaman message digest o simplemente hash values. La siguiente imagen ilustra la función hash:
Características de las funciones hash
Las características típicas de las funciones hash son:
Fixed Length Output (Hash Value)
La función hash convierte los datos de longitud arbitraria en una longitud fija. Este proceso a menudo se denominahashing the data.
En general, el hash es mucho más pequeño que los datos de entrada, por lo que las funciones hash a veces se denominan compression functions.
Dado que un hash es una representación más pequeña de un dato más grande, también se denomina digest.
La función hash con una salida de n bits se denomina n-bit hash function. Las funciones hash populares generan valores entre 160 y 512 bits.
Efficiency of Operation
Generalmente, para cualquier función hash h con entrada x, el cálculo de h (x) es una operación rápida.
Las funciones de hash computacional son mucho más rápidas que un cifrado simétrico.
Propiedades de las funciones hash
Para ser una herramienta criptográfica eficaz, se desea que la función hash posea las siguientes propiedades:
Pre-Image Resistance
Esta propiedad significa que debería ser computacionalmente difícil invertir una función hash.
En otras palabras, si una función hash h produjo un valor hash z, entonces debería ser un proceso difícil encontrar cualquier valor de entrada x que tenga un valor hash en z.
Esta propiedad protege contra un atacante que solo tiene un valor hash y está tratando de encontrar la entrada.
Second Pre-Image Resistance
Esta propiedad significa que dada una entrada y su hash, debería ser difícil encontrar una entrada diferente con el mismo hash.
En otras palabras, si una función hash h para una entrada x produce un valor hash h (x), entonces debería ser difícil encontrar cualquier otro valor de entrada y tal que h (y) = h (x).
Esta propiedad de la función hash protege contra un atacante que tiene un valor de entrada y su hash, y quiere sustituir un valor diferente como valor legítimo en lugar del valor de entrada original.
Collision Resistance
Esta propiedad significa que debería ser difícil encontrar dos entradas diferentes de cualquier longitud que den como resultado el mismo hash. Esta propiedad también se conoce como función hash libre de colisiones.
En otras palabras, para una función hash h, es difícil encontrar dos entradas diferentes xey tales que h (x) = h (y).
Dado que la función hash es una función de compresión con una longitud de hash fija, es imposible que una función hash no tenga colisiones. Esta propiedad de libre de colisiones solo confirma que estas colisiones deberían ser difíciles de encontrar.
Esta propiedad hace que sea muy difícil para un atacante encontrar dos valores de entrada con el mismo hash.
Además, si una función hash es resistente a colisiones then it is second pre-image resistant.
Diseño de algoritmos hash
En el corazón de un hash hay una función matemática que opera en dos bloques de datos de tamaño fijo para crear un código hash. Esta función hash forma parte del algoritmo hash.
El tamaño de cada bloque de datos varía según el algoritmo. Normalmente, los tamaños de bloque van desde 128 bits hasta 512 bits. La siguiente ilustración demuestra la función hash:
El algoritmo de hash implica rondas de la función hash anterior como un cifrado de bloque. Cada ronda toma una entrada de un tamaño fijo, generalmente una combinación del bloque de mensaje más reciente y la salida de la última ronda.
Este proceso se repite tantas rondas como sean necesarias para aplicar un hash a todo el mensaje. El esquema del algoritmo hash se muestra en la siguiente ilustración:
Dado que, el valor hash del primer bloque de mensajes se convierte en una entrada para la segunda operación hash, cuya salida altera el resultado de la tercera operación, y así sucesivamente. Este efecto, conocido comoavalanche efecto de hash.
El efecto de avalancha da como resultado valores hash sustancialmente diferentes para dos mensajes que difieren incluso en un solo bit de datos.
Comprenda correctamente la diferencia entre la función hash y el algoritmo. La función hash genera un código hash operando en dos bloques de datos binarios de longitud fija.
El algoritmo hash es un proceso para usar la función hash, que especifica cómo se dividirá el mensaje y cómo se encadenan los resultados de los bloques de mensajes anteriores.
Funciones hash populares
Veamos brevemente algunas funciones hash populares:
Resumen de mensajes (MD)
MD5 fue la función hash más popular y ampliamente utilizada durante varios años.
La familia MD se compone de funciones hash MD2, MD4, MD5 y MD6. Fue adoptado como estándar de Internet RFC 1321. Es una función hash de 128 bits.
Los resúmenes MD5 se han utilizado ampliamente en el mundo del software para garantizar la integridad del archivo transferido. Por ejemplo, los servidores de archivos a menudo proporcionan una suma de comprobación MD5 calculada previamente para los archivos, de modo que un usuario pueda comparar la suma de comprobación del archivo descargado con él.
En 2004, se encontraron colisiones en MD5. Se informó que un ataque analítico tuvo éxito solo en una hora mediante el uso de un grupo de computadoras. Este ataque de colisión resultó en MD5 comprometido y, por lo tanto, ya no se recomienda su uso.
Función de hash seguro (SHA)
La familia de SHA se compone de cuatro algoritmos SHA; SHA-0, SHA-1, SHA-2 y SHA-3. Aunque de la misma familia, son estructuralmente diferentes.
La versión original es SHA-0, una función hash de 160 bits, fue publicada por el Instituto Nacional de Estándares y Tecnología (NIST) en 1993. Tenía pocas debilidades y no se hizo muy popular. Más tarde en 1995, SHA-1 fue diseñado para corregir supuestas debilidades de SHA-0.
SHA-1 es la más utilizada de las funciones hash SHA existentes. Se emplea en varias aplicaciones y protocolos ampliamente utilizados, incluida la seguridad Secure Socket Layer (SSL).
En 2005, se encontró un método para descubrir colisiones para SHA-1 dentro de un marco de tiempo práctico, lo que dificultaba la empleabilidad a largo plazo de SHA-1.
La familia SHA-2 tiene cuatro variantes SHA adicionales, SHA-224, SHA-256, SHA-384 y SHA-512, dependiendo del número de bits en su valor hash. Aún no se han reportado ataques exitosos en la función hash SHA-2.
Aunque SHA-2 es una función hash potente. Aunque significativamente diferente, su diseño básico sigue el diseño de SHA-1. Por lo tanto, NIST pidió nuevos diseños de funciones hash competitivos.
En octubre de 2012, el NIST eligió el algoritmo Keccak como el nuevo estándar SHA-3. Keccak ofrece muchos beneficios, como un rendimiento eficiente y una buena resistencia a los ataques.
RIPEMD
RIPEMD es un acrónimo de RACE Integrity Primitives Evaluation Message Digest. Este conjunto de funciones hash fue diseñado por una comunidad de investigación abierta y generalmente se conoce como una familia de funciones hash europeas.
El conjunto incluye RIPEMD, RIPEMD-128 y RIPEMD-160. También existen versiones de 256 y 320 bits de este algoritmo.
El RIPEMD original (128 bits) se basa en los principios de diseño utilizados en MD4 y se ha demostrado que proporciona una seguridad cuestionable. La versión de RIPEMD de 128 bits vino como un reemplazo de solución rápida para superar las vulnerabilidades en el RIPEMD original.
RIPEMD-160 es una versión mejorada y la versión más utilizada de la familia. Las versiones de 256 y 320 bits reducen la posibilidad de colisión accidental, pero no tienen niveles más altos de seguridad en comparación con RIPEMD-128 y RIPEMD-160 respectivamente.
Torbellino
Esta es una función hash de 512 bits.
Se deriva de la versión modificada de Advanced Encryption Standard (AES). Uno de los diseñadores fue Vincent Rijmen, co-creador de la AES.
Se han lanzado tres versiones de Whirlpool; es decir, WHIRLPOOL-0, WHIRLPOOL-T y WHIRLPOOL.
Aplicaciones de las funciones hash
Hay dos aplicaciones directas de la función hash basadas en sus propiedades criptográficas.
Almacenamiento de contraseña
Las funciones hash brindan protección al almacenamiento de contraseñas.
En lugar de almacenar la contraseña en claro, la mayoría de los procesos de inicio de sesión almacenan los valores hash de las contraseñas en el archivo.
El archivo de contraseña consiste en una tabla de pares que tienen el formato (identificación de usuario, h (P)).
El proceso de inicio de sesión se muestra en la siguiente ilustración:
Un intruso solo puede ver los valores hash de las contraseñas, incluso si accedió a la contraseña. No puede iniciar sesión usando hash ni puede derivar la contraseña del valor hash, ya que la función hash posee la propiedad de resistencia a la imagen previa.
Comprobación de la integridad de los datos
La verificación de la integridad de los datos es una aplicación más común de las funciones hash. Se utiliza para generar las sumas de verificación en archivos de datos. Esta aplicación proporciona seguridad al usuario sobre la exactitud de los datos.
El proceso se muestra en la siguiente ilustración:
La verificación de integridad ayuda al usuario a detectar cualquier cambio realizado en el archivo original. Sin embargo, no ofrece ninguna garantía de originalidad. El atacante, en lugar de modificar los datos del archivo, puede cambiar todo el archivo y calcular todos juntos un nuevo hash y enviarlo al receptor. Esta aplicación de verificación de integridad es útil solo si el usuario está seguro de la originalidad del archivo.