Articulo de referencia

Función hash criptográfica

Una función hash criptográfica (específicamente SHA-1 ) en acción. Un pequeño cambio en la entrada (en la palabra "over") modifica drásticamente la salida (resumen). Esto se con...

Una función hash criptográfica (específicamente SHA-1 ) en acción. Un pequeño cambio en la entrada (en la palabra "over") modifica drásticamente la salida (resumen). Esto se conoce como el efecto avalancha .

El hashing es una operación matemática unidireccional que se calcula rápidamente, pero es difícil de revertir. [ 1 ] Por lo tanto, el almacenamiento de contraseñas y las firmas digitales se benefician de los hashes. [ 2 ] Incluso un pequeño cambio en la entrada produce un hash muy diferente. Por lo tanto, es útil comprobar si dos copias de datos o software coinciden. [ 3 ] Normalmente, la operación trabaja sobre un bloque de datos de entrada; la salida del hash se aplica con el siguiente bloque, creando un nuevo hash que refleja todo hasta ese punto; y así sucesivamente hasta que el hash final refleja todo hasta el último bloque. [ 2 ]

Más técnicamente: [ 4 ]

  • la probabilidad de un evento en particularnorte{\displaystyle n}El resultado de salida de bits ( valor hash ) para una cadena de entrada aleatoria ("mensaje") es2norte{\displaystyle 2^{-n}}(como ocurre con cualquier buen hash), por lo que el valor hash puede utilizarse como representante del mensaje;
  • Encontrar una cadena de entrada que coincida con un valor hash dado (una preimagen ) es inviable, suponiendo que todas las cadenas de entrada sean igualmente probables. La resistencia a dicha búsqueda se cuantifica como fuerza de seguridad : un hash criptográfico connorte{\displaystyle n}Se espera que los bits del valor hash tengan una fuerza de resistencia a la preimagen denorte{\displaystyle n}bits, a menos que el espacio de posibles valores de entrada sea significativamente menor que2norte{\displaystyle 2^{n}}(un ejemplo práctico se puede encontrar en el apartado §  Ataques a contraseñas cifradas );
  • Una segunda resistencia a la preimagen, con las mismas expectativas, se refiere a un problema similar de encontrar un segundo mensaje que coincida con el valor hash dado cuando ya se conoce un mensaje;
  • También es inviable encontrar cualquier par de mensajes diferentes que produzcan el mismo valor hash (una colisión ): se espera que un hash criptográfico tenga una resistencia a colisiones denorte/2{\displaystyle n/2}bits (menor debido a la paradoja del cumpleaños ).

Las funciones hash criptográficas tienen numerosas aplicaciones en seguridad de la información , especialmente en firmas digitales , códigos de autenticación de mensajes (MAC) y otras formas de autenticación . También pueden utilizarse como funciones hash ordinarias , para indexar datos en tablas hash , para la identificación mediante huellas digitales , para detectar datos duplicados o identificar archivos de forma única, y como sumas de verificación para detectar la corrupción accidental de datos . De hecho, en contextos de seguridad de la información, los valores hash criptográficos a veces se denominan huellas digitales , sumas de verificación , resúmenes de mensajes o simplemente valores hash , aunque todos estos términos se refieren a funciones más generales con propiedades y propósitos bastante diferentes.

Las funciones hash no criptográficas se utilizan en tablas hash y para detectar errores accidentales; su construcción a menudo no ofrece resistencia a un ataque deliberado. Por ejemplo, es posible un ataque de denegación de servicio contra tablas hash si las colisiones son fáciles de encontrar, como en el caso de las funciones de verificación de redundancia cíclica lineal (CRC). [ 7 ]

Propiedades

La mayoría de las funciones hash criptográficas están diseñadas para tomar como entrada una cadena de cualquier longitud y producir un valor hash de longitud fija.

Una función hash criptográfica debe ser capaz de resistir todos los tipos conocidos de ataques criptoanalíticos . En criptografía teórica, el nivel de seguridad de una función hash criptográfica se ha definido utilizando las siguientes propiedades:

Resistencia a la preimagen
Dado un valor hash h , debería ser difícil encontrar cualquier mensaje m tal que h = hash( m ) . Este concepto está relacionado con el de una función unidireccional . Las funciones que carecen de esta propiedad son vulnerables a ataques de preimagen .
Resistencia de la segunda preimagen
Dado un valor de entrada m 1 , debería ser difícil encontrar un valor de entrada diferente m 2 tal que hash( m 1 ) = hash( m 2 ) . Esta propiedad a veces se denomina resistencia débil a colisiones . Las funciones que carecen de esta propiedad son vulnerables a ataques de segunda preimagen .
Resistencia a las colisiones
Debería ser difícil encontrar dos mensajes diferentes m 1 y m 2 tales que hash( m 1 ) = hash( m 2 ) . Dicho par se denomina colisión de hash criptográfico . Esta propiedad a veces se conoce como resistencia fuerte a colisiones . Requiere un valor hash al menos el doble de largo que el requerido para la resistencia a preimágenes; de lo contrario, las colisiones pueden detectarse mediante un ataque de cumpleaños . [ 8 ]

La resistencia a colisiones implica resistencia a la segunda preimagen, pero no implica resistencia a la preimagen. [ 9 ] En criptografía teórica, siempre se prefiere la suposición más débil, pero en la práctica, una función hash que solo es resistente a la segunda preimagen se considera insegura y, por lo tanto, no se recomienda para aplicaciones reales.

En términos informales, estas propiedades implican que un atacante malicioso no puede reemplazar ni modificar los datos de entrada sin alterar su resumen criptográfico. Por lo tanto, si dos cadenas tienen el mismo resumen, se puede tener la certeza de que son idénticas. La resistencia a la preimagen impide que un atacante cree un documento con el mismo hash que un documento que no puede controlar. La resistencia a la colisión impide que un atacante cree dos documentos distintos con el mismo hash.

Una función que cumpla con estos criterios aún puede tener propiedades indeseables. Actualmente, las funciones hash criptográficas populares son vulnerables a ataques de extensión de longitud : dados hash( m ) y len( m ) pero no m , al elegir un m adecuado, un atacante puede calcular hash( mm ) , donde denota concatenación . [ 10 ] Esta propiedad puede usarse para romper esquemas de autenticación ingenuos basados ​​en funciones hash. La construcción HMAC soluciona estos problemas.

En la práctica, la resistencia a colisiones resulta insuficiente para muchos usos prácticos. Además de la resistencia a colisiones, debería ser imposible para un adversario encontrar dos mensajes con resúmenes sustancialmente similares, o inferir información útil sobre los datos, dado únicamente su resumen. En particular, una función hash debería comportarse lo más parecido posible a una función aleatoria (a menudo denominada oráculo aleatorio en las pruebas de seguridad), sin dejar de ser determinista y computacionalmente eficiente. Esto descarta funciones como la función SWIFFT , cuya resistencia a colisiones puede demostrarse rigurosamente asumiendo que ciertos problemas en retículos ideales son computacionalmente difíciles, pero que, al ser una función lineal, no satisface estas propiedades adicionales. [ 11 ]

Los algoritmos de suma de verificación, como CRC-32 y otras comprobaciones de redundancia cíclica , están diseñados para cumplir requisitos mucho menos estrictos y, por lo general, no son adecuados como funciones hash criptográficas. Por ejemplo, en el estándar de cifrado WEP se utilizó un CRC para garantizar la integridad de los mensajes , pero se descubrió rápidamente un ataque que explotaba la linealidad de la suma de verificación.

Grado de dificultad

En la práctica criptográfica, "difícil" generalmente significa "casi con toda seguridad fuera del alcance de cualquier adversario, a quien se debe impedir que vulnere el sistema mientras se considere importante su seguridad". Por lo tanto, el significado del término depende en cierta medida de la aplicación, ya que el esfuerzo que un agente malicioso pueda invertir en la tarea suele ser proporcional a la ganancia esperada. Sin embargo, dado que el esfuerzo necesario generalmente se multiplica con la longitud del resumen, incluso una ventaja de mil veces en la capacidad de procesamiento puede neutralizarse añadiendo una docena de bits a este último.

Para mensajes seleccionados de un conjunto limitado, como contraseñas u otros mensajes cortos, es posible invertir un hash probando todos los mensajes posibles del conjunto. Dado que las funciones hash criptográficas suelen estar diseñadas para calcularse rápidamente, se han desarrollado funciones especiales de derivación de claves que requieren mayores recursos computacionales y que dificultan este tipo de ataques de fuerza bruta .

En algunos análisis teóricos, "difícil" tiene un significado matemático específico, como "no resoluble en tiempo polinomial asintótico ". Estas interpretaciones de la dificultad son importantes en el estudio de las funciones hash criptográficas con seguridad demostrable , pero no suelen tener una fuerte conexión con la seguridad práctica. Por ejemplo, un algoritmo de tiempo exponencial a veces puede ser lo suficientemente rápido como para permitir un ataque factible. Por el contrario, un algoritmo de tiempo polinomial (por ejemplo, uno que requiere n²⁰ pasos para claves de n dígitos) puede ser demasiado lento para cualquier uso práctico.

Ilustración

Un ejemplo del uso potencial de una función hash criptográfica es el siguiente: Alice le plantea a Bob un problema matemático complejo y afirma haberlo resuelto. Bob quiere intentarlo él mismo, pero desea asegurarse de que Alice no esté mintiendo. Por lo tanto, Alice anota su solución, calcula su hash y le comunica a Bob el valor hash (manteniendo la solución en secreto). Luego, cuando Bob encuentra la solución por sí mismo unos días después, Alice puede demostrar que ella tenía la solución antes revelándola y pidiéndole a Bob que calcule su hash y luego verifique que coincide con el valor hash que se le dio previamente. (Este es un ejemplo de un esquema de compromiso simple ; en la práctica, Alice y Bob suelen ser programas informáticos, y el secreto sería algo más difícil de falsificar que la supuesta solución de un problema).

Aplicaciones

Verificación de la integridad de los mensajes y archivos.

Una aplicación importante de los hashes seguros es la verificación de la integridad del mensaje . Comparar los resúmenes de mensajes (resúmenes hash del mensaje) calculados antes y después de la transmisión permite determinar si se han realizado cambios en el mensaje o archivo .

Los resúmenes hash MD5 , SHA-1 o SHA-2 se publican a veces en sitios web o foros para permitir la verificación de la integridad de los archivos descargados, [ 12 ] incluidos los archivos obtenidos mediante el intercambio de archivos como el mirroring . Esta práctica establece una cadena de confianza siempre que los hashes se publiquen en un sitio de confianza, normalmente el sitio de origen, autenticado mediante HTTPS . El uso de un hash criptográfico y una cadena de confianza detecta cambios maliciosos en el archivo. Los códigos de detección de errores no criptográficos, como las comprobaciones de redundancia cíclica, solo previenen alteraciones no maliciosas del archivo, ya que se puede crear fácilmente una suplantación intencional para obtener el valor del código de colisión .

Generación y verificación de firmas

Casi todos los sistemas de firma digital requieren el cálculo de una función hash criptográfica sobre el mensaje. Esto permite realizar el cálculo de la firma sobre el resumen hash, relativamente pequeño y de tamaño fijo. El mensaje se considera auténtico si la verificación de la firma es exitosa, considerando la firma y el resumen hash recalculado sobre el mensaje. Por lo tanto, la propiedad de integridad del mensaje de la función hash criptográfica se utiliza para crear sistemas de firma digital seguros y eficientes.

Verificación de contraseña

La verificación de contraseñas suele basarse en funciones hash criptográficas. Almacenar todas las contraseñas de los usuarios en texto plano puede provocar una brecha de seguridad masiva si el archivo de contraseñas se ve comprometido. Una forma de reducir este riesgo es almacenar únicamente el resumen hash de cada contraseña. Para autenticar a un usuario, la contraseña que este introduce se somete a una función hash y se compara con el hash almacenado. Se requiere un método de restablecimiento de contraseña cuando se realiza el hash; las contraseñas originales no se pueden recalcular a partir del valor hash almacenado.

Sin embargo, el uso de funciones hash criptográficas estándar, como la serie SHA, ya no se considera seguro para el almacenamiento de contraseñas. [ 13 ] : 5.1.1.2 Estos algoritmos están diseñados para ser calculados rápidamente, por lo que si los valores hash se ven comprometidos, es posible intentar contraseñas adivinadas a altas tasas. Las unidades de procesamiento gráfico comunes pueden intentar miles de millones de contraseñas posibles cada segundo. Las funciones hash de contraseñas que realizan estiramiento de clave , como PBKDF2 , scrypt o Argon2 , comúnmente utilizan invocaciones repetidas de un hash criptográfico para aumentar el tiempo (y en algunos casos la memoria de la computadora) necesario para realizar ataques de fuerza bruta en los resúmenes hash de contraseñas almacenados. Para obtener más detalles, consulte §  Ataques a contraseñas hash .

El hash de una contraseña también requiere el uso de un valor de sal aleatorio y no secreto de gran tamaño que se puede almacenar junto con el hash de la contraseña. El valor de sal se aplica al hash junto con la contraseña, lo que modifica la asignación del hash de cada contraseña y, por lo tanto, imposibilita que un atacante almacene tablas de valores hash precalculados con los que pueda comparar el resumen del hash de la contraseña o que pruebe un gran número de valores hash robados en paralelo.

Prueba de trabajo

Un sistema (o protocolo, o función) de prueba de trabajo es una medida económica para disuadir los ataques de denegación de servicio y otros abusos, como el spam, en una red, al requerir cierto esfuerzo por parte del solicitante del servicio, generalmente tiempo de procesamiento por parte de una computadora. Una característica clave de estos esquemas es su asimetría: el esfuerzo debe ser moderadamente difícil (pero factible) para el solicitante, pero fácil de verificar para el proveedor del servicio. Un sistema popular, utilizado en la minería de Bitcoin y Hashcash , utiliza inversiones parciales de hash para demostrar que se realizó el trabajo, desbloquear una recompensa de minería en Bitcoin y como token de buena voluntad para enviar un correo electrónico en Hashcash. El remitente debe encontrar un mensaje cuyo valor hash comience con una cantidad de bits cero. El esfuerzo promedio que el remitente necesita realizar para encontrar un mensaje válido es exponencial con respecto a la cantidad de bits cero requeridos en el valor hash, mientras que el destinatario puede verificar la validez del mensaje ejecutando una sola función hash. Por ejemplo, en Hashcash, se le pide al remitente que genere una cabecera cuyo valor hash SHA-1 de 160 bits tenga los primeros 20 bits en cero. El remitente tendrá que intentarlo, en promedio, 2¹⁹ veces para encontrar una cabecera válida.

Identificador de archivo o datos

Un resumen de mensaje también puede servir como un medio para identificar un archivo de forma fiable; varios sistemas de gestión de código fuente , incluidos Git , Mercurial y Monotone , utilizan el sha1sum de varios tipos de contenido (contenido del archivo, árboles de directorios, información de ancestros, etc.) para identificarlos de forma única. Los hashes se utilizan para identificar archivos en redes de intercambio de archivos entre pares . Por ejemplo, en un enlace ed2k , un hash variante MD4 se combina con el tamaño del archivo, proporcionando información suficiente para localizar las fuentes del archivo, descargarlo y verificar su contenido. Los enlaces magnet son otro ejemplo. Dichos hashes de archivo suelen ser el hash superior de una lista de hashes o un árbol de hashes , lo que permite beneficios adicionales.

Una de las principales aplicaciones de una función hash es permitir la búsqueda rápida de datos en una tabla hash . Al ser funciones hash de un tipo particular, las funciones hash criptográficas también se prestan bien para esta aplicación.

Sin embargo, en comparación con las funciones hash estándar, las funciones hash criptográficas tienden a ser mucho más costosas computacionalmente. Por esta razón, suelen utilizarse en contextos donde es necesario que los usuarios se protejan contra la posibilidad de falsificación (la creación de datos con el mismo resumen que los datos esperados) por parte de participantes potencialmente maliciosos, como en aplicaciones de código abierto con múltiples fuentes de descarga, donde se podrían sustituir archivos maliciosos con la misma apariencia para el usuario, o modificar un archivo auténtico para que contenga datos maliciosos. [ 14 ]

Almacenamiento direccionable por contenido

El almacenamiento direccionable por contenido (CAS), también conocido como almacenamiento de contenido fijo, es una forma de almacenar información para que pueda recuperarse en función de su contenido, no de su nombre o ubicación. Se ha utilizado para el almacenamiento y la recuperación de alta velocidad de contenido fijo, como documentos almacenados para el cumplimiento de normativas gubernamentales. El almacenamiento direccionable por contenido es similar a la memoria direccionable por contenido .

Los sistemas CAS funcionan procesando el contenido del archivo mediante una función hash criptográfica para generar una clave única: la "dirección del contenido". El directorio del sistema de archivos almacena estas direcciones y un puntero al almacenamiento físico del contenido. Dado que cualquier intento de almacenar el mismo archivo generará la misma clave, los sistemas CAS garantizan la unicidad de los archivos que contienen. Asimismo, como cualquier modificación del archivo dará como resultado una nueva clave, los sistemas CAS aseguran que el archivo permanezca inalterado.

Los sistemas de almacenamiento de contenido (CAS) se convirtieron en un mercado importante durante la década de 2000, especialmente tras la entrada en vigor de la Ley Sarbanes-Oxley de 2002 en Estados Unidos, que exigía el almacenamiento de enormes cantidades de documentos durante largos periodos y su recuperación poco frecuente. El rendimiento cada vez mayor de los sistemas de archivos tradicionales y los nuevos sistemas de software han mermado el valor de los sistemas CAS heredados, que se han vuelto cada vez más escasos desde aproximadamente 2018. Sin embargo, los principios de direccionamiento de contenido siguen siendo de gran interés para los informáticos y constituyen la base de numerosas tecnologías emergentes, como el intercambio de archivos entre pares , las criptomonedas y la computación distribuida .

Funciones hash basadas en cifrados de bloques

Existen varios métodos para utilizar un cifrado por bloques para construir una función hash criptográfica, específicamente una función de compresión unidireccional .

Los métodos se asemejan a los modos de operación de cifrado por bloques que se utilizan habitualmente para el cifrado. Muchas funciones hash conocidas, como MD4 , MD5 , SHA-1 y SHA-2 , se construyen a partir de componentes similares a los cifrados por bloques diseñados para tal fin, con retroalimentación para garantizar que la función resultante no sea invertible. Entre los finalistas de SHA-3 se incluyeron funciones con componentes similares a los cifrados por bloques (por ejemplo, Skein , BLAKE ), aunque la función finalmente seleccionada, Keccak , se construyó sobre una esponja criptográfica .

Se puede utilizar un cifrado de bloques estándar como AES en lugar de estos cifrados de bloques personalizados; esto puede ser útil cuando un sistema embebido necesita implementar tanto cifrado como hash con un tamaño de código o área de hardware mínimos. Sin embargo, este enfoque puede tener costos en eficiencia y seguridad. Los cifrados en las funciones hash están diseñados para el hash: utilizan claves y bloques grandes, pueden cambiar las claves de manera eficiente en cada bloque y han sido diseñados y probados para resistir ataques de clave relacionada . Los cifrados de propósito general tienden a tener objetivos de diseño diferentes. En particular, AES tiene tamaños de clave y bloque que hacen que no sea trivial usarlo para generar valores hash largos; el cifrado AES se vuelve menos eficiente cuando la clave cambia en cada bloque; y los ataques de clave relacionada lo hacen potencialmente menos seguro para su uso en una función hash que para el cifrado.

Diseño de función hash

Construcción Merkle-Damgård

La construcción hash de Merkle-Damgård

Una función hash debe ser capaz de procesar un mensaje de longitud arbitraria y generar una salida de longitud fija. Esto se logra dividiendo la entrada en una serie de bloques de igual tamaño y procesándolos secuencialmente mediante una función de compresión unidireccional . Esta función de compresión puede diseñarse específicamente para el hashing o construirse a partir de un cifrado de bloques. Una función hash construida con la construcción Merkle-Damgård es tan resistente a las colisiones como su función de compresión; cualquier colisión en la función hash completa puede rastrearse hasta una colisión en la función de compresión.

El último bloque procesado también debe rellenarse de forma inequívoca ; esto es crucial para la seguridad de esta construcción. Esta construcción se denomina construcción Merkle-Damgård . La mayoría de las funciones hash clásicas comunes, incluidas SHA-1 y MD5 , adoptan esta forma.

Tubo ancho versus tubo estrecho

Una aplicación directa de la construcción Merkle-Damgård, donde el tamaño de la salida hash es igual al tamaño del estado interno (entre cada paso de compresión), resulta en un diseño de hash de canal estrecho . Este diseño causa muchos defectos inherentes, incluyendo extensión de longitud , multicolisiones, [ 15 ] ataques de mensajes largos, [ 16 ] ataques de generación y pegado, y tampoco se puede paralelizar. Como resultado, las funciones hash modernas se construyen sobre construcciones de canal ancho que tienen un tamaño de estado interno mayor, que van desde ajustes de la construcción Merkle-Damgård [ 15 ] hasta nuevas construcciones como la construcción esponja y la construcción HAIFA . [ 17 ] Ninguno de los participantes en la competencia de funciones hash del NIST utiliza una construcción Merkle-Damgård clásica. [ 18 ]

Mientras tanto, truncar la salida de un hash más largo, como el utilizado en SHA-512/256, también neutraliza muchos de estos ataques. [ 19 ]

Uso en la construcción de otras primitivas criptográficas

Las funciones hash se pueden utilizar para construir otras primitivas criptográficas . Para que estas otras primitivas sean criptográficamente seguras, se debe tener cuidado al construirlas.

Los códigos de autenticación de mensajes (MAC, por sus siglas en inglés) (también llamados funciones hash con clave) suelen construirse a partir de funciones hash. HMAC es un ejemplo de MAC.

Así como los cifrados de bloques se pueden usar para construir funciones hash, las funciones hash se pueden usar para construir cifrados de bloques. Las construcciones de Luby-Rackoff que utilizan funciones hash pueden ser demostrablemente seguras si la función hash subyacente es segura. Además, muchas funciones hash (incluidas SHA-1 y SHA-2 ) se construyen utilizando un cifrado de bloques de propósito especial en una construcción de Davies-Meyer u otra. Ese cifrado también se puede usar en un modo de operación convencional, sin las mismas garantías de seguridad; por ejemplo, SHACAL , BEAR y LION .

Los generadores de números pseudoaleatorios (PRNG) se pueden construir utilizando funciones hash. Esto se logra combinando una semilla aleatoria (secreta) con un contador y aplicando una función hash.

Algunas funciones hash, como Skein , Keccak y RadioGatún , generan una secuencia de longitud arbitraria y pueden utilizarse como cifrado de flujo . Los cifrados de flujo también pueden construirse a partir de funciones hash digest de longitud fija. A menudo, esto se logra creando primero un generador de números pseudoaleatorios criptográficamente seguro y utilizando su secuencia de bytes aleatorios como secuencia de claves . SEAL es un cifrado de flujo que utiliza SHA-1 para generar tablas internas, las cuales se emplean posteriormente en un generador de secuencia de claves más o menos independiente del algoritmo hash. No se garantiza que SEAL sea tan robusto (o débil) como SHA-1. De manera similar, la expansión de clave de los cifrados de flujo HC-128 y HC-256 utiliza ampliamente la función hash SHA-256 .

Concatenación

La concatenación de salidas de múltiples funciones hash proporciona una resistencia a colisiones tan buena como la del algoritmo más robusto incluido en el resultado concatenado. Por ejemplo, versiones anteriores de Transport Layer Security (TLS) y Secure Sockets Layer (SSL) utilizaban sumas MD5 y SHA-1 concatenadas . [ 20 ] [ 21 ] Esto garantiza que un método para detectar colisiones en una de las funciones hash no invalide los datos protegidos por ambas funciones.

Para las funciones hash de construcción Merkle-Damgård , la función concatenada es tan resistente a colisiones como su componente más fuerte, pero no más resistente a colisiones. Antoine Joux observó que las colisiones de 2 conducen a colisiones de n : si es factible para un atacante encontrar dos mensajes con el mismo hash MD5, entonces puede encontrar tantos mensajes adicionales con ese mismo hash MD5 como desee, sin mayor dificultad. [ 22 ] Entre esos n mensajes con el mismo hash MD5, es probable que haya una colisión en SHA-1. El trabajo adicional necesario para encontrar la colisión SHA-1 (más allá de la búsqueda exponencial de cumpleaños) requiere solo tiempo polinomial . [ 23 ] [ 24 ]

algoritmos hash criptográficos

Existen numerosos algoritmos de hash criptográficos; en esta sección se enumeran algunos de los más utilizados. Una lista más extensa se puede encontrar en la página que compara las funciones hash criptográficas .

MD5

MD5 fue diseñado por Ronald Rivest en 1991 para reemplazar una función hash anterior, MD4, y se especificó en 1992 como RFC 1321. Las colisiones con MD5 se pueden calcular en segundos, lo que hace que el algoritmo no sea adecuado para la mayoría de los casos de uso donde se requiere un hash criptográfico. MD5 produce un resumen de 128 bits (16 bytes).

SHA-1

SHA-1 se desarrolló como parte del proyecto Capstone del gobierno estadounidense . La especificación original del algoritmo, ahora conocida como SHA-0, se publicó en 1993 bajo el título Secure Hash Standard, FIPS PUB 180, por la agencia de estándares del gobierno estadounidense NIST (Instituto Nacional de Estándares y Tecnología). Poco después de su publicación, la NSA la retiró y la sustituyó por la versión revisada, publicada en 1995 en FIPS  PUB 180-1 y comúnmente denominada SHA-1. Mediante el ataque de fragmentación  , se pueden producir colisiones contra el algoritmo SHA-1 completo , por lo que se considera que la función hash está comprometida. SHA-1 genera un resumen hash de 160 bits (20 bytes).

Es posible que los documentos se refieran a SHA-1 simplemente como "SHA", aunque esto pueda entrar en conflicto con otros algoritmos de hash seguros como SHA-0, SHA-2 y SHA-3.

RIPEMD-160

RIPEMD (RACE Integrity Primitives Evaluation Message Digest) es una familia de funciones hash criptográficas desarrollada en Lovaina, Bélgica, por Hans Dobbertin, Antoon Bosselaers y Bart Preneel en el grupo de investigación COSIC de la Universidad Católica de Lovaina, y publicada por primera vez en 1996. RIPEMD se basa en los principios de diseño utilizados en MD4 y su rendimiento es similar al de SHA-1, más popular. Sin embargo, RIPEMD-160 no ha sido vulnerado. Como su nombre indica, RIPEMD-160 produce un resumen hash de 160 bits (20 bytes).

Torbellino

Whirlpool es una función hash criptográfica diseñada por Vincent Rijmen y Paulo SLM Barreto, quienes la describieron por primera vez en el año 2000. Whirlpool se basa en una versión sustancialmente modificada del Estándar de Cifrado Avanzado (AES). Whirlpool genera un resumen hash de 512 bits (64 bytes).

SHA-2

SHA-2 (Secure Hash Algorithm 2) es un conjunto de funciones hash criptográficas diseñadas por la Agencia de Seguridad Nacional (NSA) de Estados Unidos, publicadas por primera vez en 2001. Se construyen utilizando la estructura Merkle-Damgård, a partir de una función de compresión unidireccional construida a su vez utilizando la estructura Davies-Meyer de un cifrado de bloques especializado (clasificado).

SHA-2 se compone básicamente de dos algoritmos hash: SHA-256 y SHA-512. SHA-224 es una variante de SHA-256 con valores iniciales diferentes y salida truncada. SHA-384 y los menos conocidos SHA-512/224 y SHA-512/256 son variantes de SHA-512. SHA-512 es más seguro que SHA-256 y suele ser más rápido que SHA-256 en máquinas de 64 bits como AMD64 .

El tamaño de salida en bits viene dado por la extensión del nombre "SHA", así que SHA-224 tiene un tamaño de salida de 224 bits (28 bytes); SHA-256, 32 bytes; SHA-384, 48 bytes; y SHA-512, 64 bytes.

SHA-3

SHA-3 (Algoritmo de Hash Seguro 3) fue publicado por el NIST el 5 de agosto de 2015. SHA-3 es un subconjunto de la familia de algoritmos criptográficos Keccak. El algoritmo Keccak es obra de Guido Bertoni, Joan Daemen, Michael Peeters y Gilles Van Assche. Keccak se basa en una construcción de esponja, que también puede utilizarse para construir otros algoritmos criptográficos, como un cifrado de flujo. SHA-3 proporciona los mismos tamaños de salida que SHA-2: 224, 256, 384 y 512 bits.

También se pueden obtener tamaños de salida configurables mediante las funciones SHAKE-128 y SHAKE-256. En este caso, las extensiones -128 y -256 en el nombre indican el nivel de seguridad de la función, no el tamaño de salida en bits.

BLAKE2

BLAKE2, una versión mejorada de BLAKE, se anunció el 21 de diciembre de 2012. Fue creado por Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn y Christian Winnerlein con el objetivo de reemplazar los algoritmos MD5 y SHA-1, ampliamente utilizados pero defectuosos. Al ejecutarse en arquitecturas x64 y ARM de 64 bits, BLAKE2b es más rápido que SHA-3, SHA-2, SHA-1 y MD5. Aunque BLAKE y BLAKE2 no se han estandarizado como SHA-3, BLAKE2 se ha utilizado en muchos protocolos, incluido el hash de contraseñas Argon2 , por la alta eficiencia que ofrece en las CPU modernas. Dado que BLAKE fue candidato para SHA-3, tanto BLAKE como BLAKE2 ofrecen los mismos tamaños de salida que SHA-3, incluyendo un tamaño de salida configurable.

BLAKE3

BLAKE3, una versión mejorada de BLAKE2, se anunció el 9 de enero de 2020. Fue creado por Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves y Zooko Wilcox-O'Hearn. BLAKE3 es un algoritmo único, a diferencia de BLAKE y BLAKE2, que son familias de algoritmos con múltiples variantes. La función de compresión de BLAKE3 se basa en gran medida en la de BLAKE2, con la principal diferencia de que el número de rondas se reduce de 10 a 7. Internamente, BLAKE3 es un árbol Merkle y admite un mayor grado de paralelismo que BLAKE2.

Algoritmos de hash nacionales adicionales

Existen varios algoritmos de hash que generalmente solo se utilizan en ciertas localidades o jurisdicciones; algunos de los más conocidos incluyen:

Ataques a algoritmos hash criptográficos

Existe una larga lista de funciones hash criptográficas, pero se ha descubierto que muchas son vulnerables y no deberían utilizarse. Por ejemplo, el NIST seleccionó 51 funciones hash [ 25 ] como candidatas para la primera ronda de la competición de hash SHA-3, de las cuales 10 se consideraron defectuosas y 16 mostraron debilidades significativas, por lo que no pasaron a la siguiente ronda; se puede encontrar más información en el artículo principal sobre las competiciones de funciones hash del NIST .

Aunque una función hash nunca haya sido vulnerada, un ataque exitoso contra una variante debilitada puede minar la confianza de los expertos. Por ejemplo, en agosto de 2004 se detectaron colisiones en varias funciones hash populares en aquel entonces, incluyendo MD5. [ 26 ] Estas debilidades pusieron en entredicho la seguridad de algoritmos más robustos derivados de las funciones hash débiles, en particular, SHA-1 (una versión reforzada de SHA-0), RIPEMD-128 y RIPEMD-160 (ambas versiones reforzadas de RIPEMD). [ 27 ]

El 12 de agosto de 2004, Joux, Carribault, Lemuel y Jalby anunciaron una colisión para el algoritmo SHA-0 completo. [ 22 ] Joux et al. lograron esto utilizando una generalización del ataque de Chabaud y Joux. Descubrieron que la colisión tenía una complejidad de 2 51 y tomó alrededor de 80 000 horas de CPU en una supercomputadora con 256 procesadores Itanium 2 , lo que equivale a 13 días de uso a tiempo completo de la supercomputadora.

En febrero de 2005, se informó de un ataque a SHA-1 que encontraría colisiones en aproximadamente 2 69 operaciones de hash, en lugar de las 2 80 esperadas para una función hash de 160 bits. En agosto de 2005, se informó de otro ataque a SHA-1 que encontraría colisiones en 2 63 operaciones. Se conocen otras debilidades teóricas de SHA-1, [ 28 ] [ 29 ] y en febrero de 2017 Google anunció una colisión en SHA-1. [ 30 ] Los investigadores de seguridad recomiendan que las nuevas aplicaciones pueden evitar estos problemas utilizando miembros posteriores de la familia SHA, como SHA-2 , o utilizando técnicas como el hash aleatorio [ 31 ] que no requieren resistencia a colisiones.

Un ataque práctico y exitoso rompió MD5 (utilizado dentro de los certificados para Transport Layer Security ) en 2008. [ 32 ]

Muchos algoritmos hash criptográficos se basan en la construcción Merkle-Damgård . Todos los algoritmos hash que utilizan directamente el resultado completo de una construcción Merkle-Damgård son vulnerables a ataques de extensión de longitud . Esto hace que los algoritmos MD5, SHA-1, RIPEMD-160, Whirlpool y SHA-256/SHA-512 sean vulnerables a este ataque específico. SHA-3, BLAKE2, BLAKE3 y las variantes truncadas de SHA-2 no son vulnerables a este tipo de ataque.

Ataques a contraseñas cifradas

En lugar de almacenar las contraseñas de usuario sin cifrar, los sistemas de acceso controlado suelen guardar el hash de cada contraseña en un archivo o base de datos. Cuando alguien solicita acceso, la contraseña que introduce se somete a un proceso de hash y se compara con el valor almacenado. Si la base de datos es robada (un suceso demasiado frecuente [ 33 ] ), el ladrón solo tendrá los valores hash, no las contraseñas.

Un atacante aún puede recuperar las contraseñas a partir de los hashes, ya que la mayoría de las personas eligen contraseñas de forma predecible. Las listas de contraseñas comunes circulan ampliamente y muchas contraseñas son lo suficientemente cortas como para que se puedan probar todas las combinaciones posibles si el cálculo del hash no lleva demasiado tiempo. [ 34 ]

El uso de sal criptográfica previene algunos ataques, como la creación de archivos de precomputación de valores hash, por ejemplo, tablas arcoíris . Sin embargo, con procesadores gráficos de gama alta es posible realizar búsquedas del orden de 100 mil millones de pruebas por segundo , lo que posibilita los ataques directos incluso con sal. [ 35 ] [ 36 ] El Instituto Nacional de Estándares y Tecnología de los Estados Unidos recomienda almacenar contraseñas utilizando funciones hash especiales llamadas funciones de derivación de clave (KDF), creadas para ralentizar las búsquedas por fuerza bruta. [ 13 ] : 5.1.1.2 Las funciones hash lentas incluyen pbkdf2 , bcrypt , scrypt , argon2 , Balloon y algunos modos recientes de Unix crypt . Para las KDF que realizan múltiples hashes para ralentizar la ejecución, el NIST recomienda un número de iteraciones de 10 000 o más. [ 13 ] : 5.1.1.2

Véase también

Referencias

Citas

  1. "Introducción al uso de teclas en imágenes de firmware integradas" . Intel.com . Consultado el 18 de julio de 2026 .
  2. 1 2 "¿Qué es el Hashing?" . Codeacademy.com . 27 de marzo de 2025 . Consultado el 18 de julio de 2026 .
  3. "Proceso de prueba y revisión" . Junta Electoral del Estado de Nueva York . Consultado el 18 de julio de 2026 .
  4. ^ Menezes, van Oorschot y Vanstone 2018 , p. 33.
  5. "resumen del mensaje" . Centro de recursos de seguridad informática - Glosario . NIST .
  6. Schneier, Bruce . "Criptoanálisis de MD5 y SHA: Es hora de un nuevo estándar" . Computerworld . Archivado del original el 16 de marzo de 2016. Consultado el 20 de abril de 2016. Mucho más que algoritmos de cifrado, las funciones hash unidireccionales son los pilares de la criptografía moderna.
  7. Aumasson 2017 , pág. 106.
  8. Katz y Lindell 2014 , págs. 155–157, 190, 232.
  9. Rogaway y Shrimpton 2004 , en la Sec. 5. Implicaciones.
  10. Duong, Thai; Rizzo, Juliano. "Vulnerabilidad de falsificación de firmas de API de Flickr" . Archivado del original el 15 de agosto de 2013. Recuperado el 7 de diciembre de 2012 .
  11. Lyubashevsky et al. 2008 , págs. 54–72.
  12. Perrin, Chad (5 de diciembre de 2007). "Utilice hashes MD5 para verificar las descargas de software" . TechRepublic . Archivado del original el 18 de octubre de 2012. Recuperado el 2 de marzo de 2013 .
  13. 1 2 3 Grassi Paul A. (junio de 2017). SP 800-63B-3 – Directrices de identidad digital, autenticación y gestión del ciclo de vida . NIST. doi : 10.6028/NIST.SP.800-63b .
  14. "Hashing de archivos" (PDF) . AGENCIA DE CIBERSEGURIDAD E INFRAESTRUCTURA . Archivado (PDF) del original el 2 de febrero de 2025. Recuperado el 10 de marzo de 2025 .
  15. 1 2 Lucks, Stefan (2004). "Principios de diseño para funciones hash iteradas" . Cryptology ePrint Archive . Informe 2004/253. Archivado del original el 21 de mayo de 2017. Recuperado el 18 de julio de 2017 .
  16. Kelsey y Schneier 2005 , págs. 474–490.
  17. Biham, Eli; Dunkelman, Orr (24 de agosto de 2006). Un marco para funciones hash iterativas – HAIFA . Segundo taller de funciones hash criptográficas del NIST. Cryptology ePrint Archive . Informe 2007/278. Archivado del original el 28 de abril de 2017. Recuperado el 18 de julio de 2017 .
  18. Nandi y Paul 2010 .
  19. Dobraunig, Christoph; Eichlseder, Maria; Mendel, Florian (febrero de 2015). Evaluación de seguridad de SHA-224, SHA-512/224 y SHA-512/256 (PDF) (Informe). Archivado (PDF) del original el 27 de diciembre de 2016. Consultado el 18 de julio de 2017 .
  20. Mendel et al. , pág. 145: La concatenación... es utilizada a menudo por los implementadores para "cubrir riesgos" en las funciones hash. Un combinador de la forma MD5
  21. Harnik et al. 2005 , p. 99: la concatenación de funciones hash como se sugiere en TLS... está garantizada para ser tan segura como el candidato que permanece seguro.
  22. 1 2 Joux 2004 .
  23. Finney, Hal (20 de agosto de 2004). "Más problemas con las funciones hash" . The Cryptography Mailing List . Archivado del original el 9 de abril de 2016. Recuperado el 25 de mayo de 2016 .
  24. ^ Hoch y Shamir 2008 , págs .
  25. Andrew Regenscheid, Ray Perlner, Shu-Jen Chang, John Kelsey, Mridul Nandi, Souradyuti Paul, Informe de estado de la primera ronda de la competición del algoritmo hash criptográfico SHA-3. Archivado el 5 de junio de 2018 en Wayback Machine.
  26. XiaoyunWang, Dengguo Feng, Xuejia Lai, Hongbo Yu, Colisiones para las funciones hash MD4, MD5, HAVAL-128 y RIPEMD. Archivado el 20 de diciembre de 2004 en Wayback Machine.
  27. Alshaikhli, Imad Fakhri; AlAhmad, Mohammad Abdulateef (2015), "Función hash criptográfica", Manual de investigación sobre detección de amenazas y contramedidas en seguridad de redes , IGI Global, págs. 80–94 , doi : 10.4018/978-1-4666-6583-5.ch006 , ISBN  978-1-4666-6583-5
  28. Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu, " Encontrando colisiones en el SHA-1 completo, archivado el 15/07/2017 en Wayback Machine ".
  29. Schneier, Bruce (18 de febrero de 2005). "Criptoanálisis de SHA-1" . Schneier on Security . Archivado del original el 16 de enero de 2013. Recuperado el 30 de marzo de 2009 .Resume los resultados de Wang et al. y sus implicaciones.
  30. Brewster, Thomas (23 de febrero de 2017). "Google acaba de 'destrozar' un antiguo algoritmo criptográfico: he aquí por qué esto es importante para la seguridad web" . Forbes . Archivado del original el 24 de febrero de 2017. Consultado el 24 de febrero de 2017 .
  31. Halevi, Shai; Krawczyk, Hugo. "Randomized Hashing and Digital Signatures" . Archivado del original el 22 de mayo de 2022.
  32. Sotirov, A; Stevens, M; Appelbaum, J; Lenstra, A; Molnar, D; Osvik, DA; de Weger, B (30 de diciembre de 2008). "MD5 considerado dañino hoy: Creación de un certificado CA malicioso" . HashClash . Departamento de Matemáticas e Informática de la Universidad Tecnológica de Eindhoven. Archivado del original el 25 de marzo de 2017. Recuperado el 29 de marzo de 2009 .
  33. Swinhoe, Dan; Hill, Michael (17 de abril de 2020). "Las 15 mayores filtraciones de datos del siglo XXI" . Revista CSO. Archivado del original el 24 de noviembre de 2020. Recuperado el 25 de noviembre de 2020 .
  34. Goodin, Dan (10 de diciembre de 2012). "Un clúster de 25 GPU descifra todas las contraseñas estándar de Windows en menos de 6 horas" . Ars Technica . Archivado del original el 21 de noviembre de 2020. Consultado el 23 de noviembre de 2020 .
  35. Claburn, Thomas (14 de febrero de 2019). "¿Usar una contraseña NTLM de Windows de 8 caracteres? No lo hagas. Todas se pueden descifrar en menos de 2,5 horas" . The Register . Archivado del original el 25 de abril de 2020. Consultado el 26 de noviembre de 2020 .
  36. "Desarrollo asombroso en el rendimiento de las GPU" . Improsec. 3 de enero de 2020. Archivado del original el 9 de abril de 2023.

Fuentes

  • Harnik, Danny; Kilian, Joe; Naor, Moni; Reingold, Omer; Rosen, Alon (2005). «Sobre combinadores robustos para transferencia ciega y otras primitivas». Avances en criptología – EUROCRYPT 2005. Notas de clase en ciencias de la computación. Vol.  3494. pp. 96–113 . doi : 10.1007/11426639_6 . ISBN  978-3-540-25910-7ISSN 0302-9743 
  • Hoch, Jonathan J.; Shamir, Adi (2008). "Sobre la fuerza del combinador hash concatenado cuando todas las funciones hash son débiles". Autómatas, lenguajes y programación . Notas de clase en ciencias de la computación. Vol.  5126. pp. 616–630 . doi : 10.1007/978-3-540-70583-3_50 . ISBN  978-3-540-70582-6ISSN 0302-9743 
  • Joux, Antoine (2004). "Multicolisiones en funciones hash iteradas. Aplicación a construcciones en cascada". Avances en criptología – CRYPTO 2004. Notas de clase en ciencias de la computación. Vol.  3152. Berlín, Heidelberg: Springer Berlin Heidelberg. pp. 306–316 . doi : 10.1007/978-3-540-28628-8_19 . ISBN  978-3-540-22668-0ISSN 0302-9743 
  • Kelsey, John; Schneier, Bruce (2005). "Segundas preimágenes en funciones hash de n bits para mucho menos de 2n trabajo" . Avances en criptología – EUROCRYPT 2005. Notas de clase en ciencias de la computación. Vol.  3494. pp. 474–490 . doi : 10.1007/11426639_28 . ISBN  978-3-540-25910-7ISSN 0302-9743 . Archivado del original el 16 de marzo de 2017. Consultado el 18 de julio de 2017 . 
  • Katz, Jonathan; Lindell, Yehuda (2014). Introducción a la criptografía moderna (2.ª  ed.). CRC Press. ISBN 978-1-4665-7026-9.
  • Lyubashevsky, Vadim; Micciancio, Daniele; Peikert, Chris; Rosen, Alon (2008). «SWIFFT: Una propuesta modesta para el hash FFT». Cifrado rápido de software . Notas de clase en ciencias de la computación. Vol.  5086. págs. 54–72 . doi : 10.1007/978-3-540-71039-4_4 . ISBN  978-3-540-71038-7ISSN 0302-9743 
  • Mendel, Florian; Rechberger, Christian; Schläffer, Martin (2009). "MD5 es más débil que débil: ataques a combinadores concatenados". Avances en criptología – ASIACRYPT 2009. Notas de clase en ciencias de la computación. Vol.  5912. pp. 144–161 . doi : 10.1007/978-3-642-10366-7_9 . ISBN  978-3-642-10365-0ISSN 0302-9743 
  • Nandi, Mridul; Paul, Souradyuti (2010). «Acelerando el Wide-Pipe: Hashing seguro y rápido» . Progress in Cryptology - INDOCRYPT 2010. Lecture Notes in Computer Science. Vol.  6498. pp. 144–162 . doi : 10.1007/978-3-642-17401-8_12 . ISBN  978-3-642-17400-1ISSN 0302-9743 
  • Rogaway, P.; Shrimpton, T. (2004). «Fundamentos de las funciones hash criptográficas: definiciones, implicaciones y separaciones para la resistencia a la preimagen, la resistencia a la segunda preimagen y la resistencia a la colisión» . En Roy, B.; Mier, W. (eds.). Cifrado rápido de software: 11.º Taller Internacional, FSE 2004. Vol.  3017. Lecture Notes in Computer Science: Springer. pp. 371–388 . doi : 10.1007/978-3-540-25937-4_24 . ISBN  3-540-22171-9Archivado del original el 30/11/2022 . Consultado el 30/11/2022 .
  • Menezes, Alfred J.; van Oorschot, Paul C.; Vanstone, Scott A. (7 de diciembre de 2018). «Funciones hash» . Manual de criptografía aplicada . CRC Press. págs.  33–. ISBN 978-0-429-88132-9.
  • Aumasson, Jean-Philippe (6 de noviembre de 2017). Criptografía seria: Una introducción práctica al cifrado moderno . No Starch Press. ISBN 978-1-59327-826-7OCLC 1012843116 
  • Paar, Christof; Pelzl, Jan (2009). "11: Funciones hash" . Comprensión de la criptografía, un libro de texto para estudiantes y profesionales . Springer .{{cite book}}: CS1 maint: servicio de archivo obsoleto ( enlace ) (el sitio web complementario contiene un curso de criptografía en línea que abarca funciones hash)
  • "El sitio web de la función hash ECRYPT" .
  • Buldas, A. (2011). "Serie de miniconferencias sobre funciones hash criptográficas" .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  • Aplicación de código abierto basada en Python con interfaz gráfica de usuario (GUI) utilizada para verificar las descargas.