Función de compresión unidireccional


De Wikipedia, la enciclopedia libre
  (Redirigido desde Davies-Meyer )
Saltar a navegación Saltar a búsqueda

En criptografía , una función de compresión unidireccional es una función que transforma dos entradas de longitud fija en una salida de longitud fija. [1] La transformación es "unidireccional" , lo que significa que es difícil, dada una salida particular, calcular las entradas que se comprimen en esa salida. Las funciones de compresión unidireccionales no están relacionadas con los algoritmos de compresión de datos convencionales , que en su lugar se pueden invertir exactamente (compresión sin pérdida) o aproximadamente (compresión con pérdida) a los datos originales.

Una función de compresión unidireccional

Las funciones de compresión unidireccionales se utilizan, por ejemplo, en la construcción Merkle-Damgård dentro de las funciones hash criptográficas .

Las funciones de compresión unidireccionales a menudo se crean a partir de cifrados en bloque . Algunos métodos para convertir cualquier cifrado de bloque normal en una función de compresión unidireccional son Davies-Meyer , Matyas-Meyer-Oseas , Miyaguchi-Preneel (funciones de compresión de longitud de bloque único) y MDC-2 / Meyer-Schilling , MDC-4 , Hirose (funciones de compresión de longitud de bloque doble). Estos métodos se describen en detalle más abajo. ( MDC-2 también es el nombre de una función hash patentada por IBM ).

Compresión

Una función de compresión mezcla dos entradas de longitud fija y produce una única salida de longitud fija del mismo tamaño que una de las entradas. Esto también puede verse como que la función de compresión transforma una entrada grande de longitud fija en una salida más corta de longitud fija.

Por ejemplo, la entrada A puede ser de 128 bits, la entrada B de 128 bits y se comprimen en una sola salida de 128 bits. Esto equivale a tener una única entrada de 256 bits comprimida en una única salida de 128 bits.

Algunas funciones de compresión no se comprimen a la mitad, sino a algún otro factor. Por ejemplo, la entrada A puede ser de 256 bits y la entrada B de 128 bits, que se comprimen en una única salida de 128 bits. Es decir, un total de 384 bits de entrada se comprimen juntos a 128 bits de salida.

La mezcla se realiza de tal manera que se logre un efecto de avalancha completo . Es decir, cada bit de salida depende de cada bit de entrada.

De una sola mano

Una función unidireccional es una función que es fácil de calcular pero difícil de invertir. Una función de compresión unidireccional (también llamada función hash) debe tener las siguientes propiedades:

  • Fácil de calcular: si tiene alguna entrada, es fácil calcular la salida.
  • Resistencia a la preimagen: si un atacante solo conoce la salida, no debería ser factible calcular una entrada. En otras palabras, dada una salida , no debería ser factible calcular una entrada tal que .
  • Segunda preimagen-resistencia: Dada una entrada cuya salida es , no debería ser factible encontrar otra entrada que tenga la misma salida , es decir .
  • Resistencia a colisiones: debería ser difícil encontrar dos entradas diferentes que se compriman en la misma salida, es decir, un atacante no debería poder encontrar un par de mensajes de ese tipo . Debido a la paradoja del cumpleaños (ver también ataque de cumpleaños ), existe un 50% de probabilidad de que se pueda encontrar una colisión en el tiempo de aproximadamente dónde está el número de bits en la salida de la función hash. Por lo tanto, un ataque a la función hash no debería poder encontrar una colisión con menos de trabajo.

Idealmente, a uno le gustaría que la "inviabilidad" en la resistencia a la preimagen y la segunda resistencia a la preimagen significaran un trabajo de aproximadamente dónde está el número de bits en la salida de la función hash. Sin embargo, particularmente para la segunda preimagen-resistencia, este es un problema difícil. [ cita requerida ]

La construcción Merkle – Damgård

La construcción de hachís Merkle – Damgård. Los cuadros etiquetados [f] son ​​una función de compresión unidireccional.

Un uso común de las funciones de compresión unidireccionales es la construcción Merkle-Damgård dentro de las funciones hash criptográficas. Las funciones hash más utilizadas, incluidas MD5 , SHA-1 (que está en desuso [2] ) y SHA-2 utilizan esta construcción.

Una función hash debe poder procesar un mensaje de longitud arbitraria en una salida de longitud fija. Esto se puede lograr dividiendo la entrada en una serie de bloques de igual tamaño y operando en ellos en secuencia usando una función de compresión unidireccional. La función de compresión puede diseñarse especialmente para hash o construirse a partir de un cifrado de bloque.

El último bloque procesado también debe tener una longitud acolchada , esto es crucial para la seguridad de esta construcción. Esta construcción se llama construcción Merkle-Damgård . Las funciones hash más utilizadas, incluidas SHA-1 y MD5 , adoptan esta forma.

Cuando se aplica el relleno de longitud (también llamada MD-refuerzo), los ataques no pueden encontrar colisiones más rápido que la paradoja del cumpleaños ( , siendo el tamaño de bloque en bits) si la función utilizada es resistente a colisiones. [3] [4] Por lo tanto, la construcción de hash Merkle-Damgård reduce el problema de encontrar una función hash adecuada para encontrar una función de compresión adecuada.

Un segundo ataque de preimagen (dado un mensaje, un atacante encuentra otro mensaje para satisfacer, se puede realizar de acuerdo con Kelsey y Schneier [5] para un mensaje de bloqueo de mensajes a tiempo . Tenga en cuenta que la complejidad de este ataque alcanza un mínimo de para mensajes largos cuándo y acerca de cuándo los mensajes son breves.

Construcción a partir de cifrados en bloque

Un cifrado de bloques moderno típico

Las funciones de compresión unidireccionales a menudo se crean a partir de cifrados en bloque.

Los cifrados de bloque toman (como las funciones de compresión unidireccionales) dos entradas de tamaño fijo (la clave y el texto sin formato ) y devuelven una única salida (el texto cifrado ) que es del mismo tamaño que el texto sin formato de entrada.

Sin embargo, los cifrados de bloques modernos son solo parcialmente unidireccionales. Es decir, dado un texto sin formato y un texto cifrado, no es factible encontrar una clave que cifre el texto sin formato en el texto cifrado. Pero, dado un texto cifrado y una clave, se puede encontrar un texto plano coincidente simplemente usando la función de descifrado del cifrado en bloque. Por lo tanto, para convertir un cifrado de bloque en una función de compresión unidireccional, se deben agregar algunas operaciones adicionales.

Algunos métodos para convertir cualquier cifrado de bloque normal en una función de compresión unidireccional son Davies-Meyer, Matyas-Meyer-Oseas, Miyaguchi-Preneel (funciones de compresión de longitud de bloque simple) y MDC-2, MDC-4, Hirose (doble -Funciones de compresiones de longitud de bloque).

Las funciones de compresión de longitud de bloque único dan salida a la misma cantidad de bits que procesa el cifrado de bloque subyacente. En consecuencia, las funciones de compresión de longitud de bloque doble producen el doble de bits.

Si un cifrado de bloque tiene un tamaño de bloque de, digamos, 128 bits, los métodos de longitud de bloque único crean una función hash que tiene un tamaño de bloque de 128 bits y produce un hash de 128 bits. Los métodos de longitud de bloque doble hacen hash con el doble del tamaño de hash en comparación con el tamaño de bloque del cifrado de bloque utilizado. Por lo tanto, un cifrado de bloque de 128 bits se puede convertir en una función hash de 256 bits.

Estos métodos se utilizan luego dentro de la construcción Merkle-Damgård para construir la función hash real. Estos métodos se describen en detalle más abajo.

El uso de un cifrado de bloque para construir la función de compresión unidireccional para una función hash suele ser algo más lento que usar una función de compresión unidireccional especialmente diseñada en la función hash. Esto se debe a que todas las construcciones seguras conocidas realizan la programación clave para cada bloque del mensaje. Black, Cochran y Shrimpton han demostrado que es imposible construir una función de compresión unidireccional que realice una sola llamada a un cifrado de bloque con una clave fija. [6] En la práctica, se alcanzan velocidades razonables siempre que la programación clave del cifrado de bloque seleccionado no sea una operación demasiado pesada.

Pero, en algunos casos, es más fácil porque una sola implementación de un cifrado de bloque se puede usar tanto para un cifrado de bloque como para una función hash. También puede ahorrar espacio en el código en sistemas integrados muy pequeños como, por ejemplo, tarjetas inteligentes o nodos en automóviles u otras máquinas.

Por lo tanto, la tasa de hash o tasa da una idea de la eficiencia de una función de hash basada en una determinada función de compresión. La tasa de una función hash iterada describe la relación entre el número de operaciones de cifrado de bloques y la salida. Más precisamente, la tasa representa la relación entre el número de bits procesados ​​de entrada , la longitud de bits de salida del cifrado de bloque y las operaciones de cifrado de bloque necesarias para producir estos bits de salida. Generalmente, el uso de menos operaciones de cifrado de bloques da como resultado un mejor rendimiento general de toda la función hash, pero también conduce a un valor hash más pequeño que podría ser indeseable. La tasa se expresa mediante la fórmula:

La función hash solo se puede considerar segura si se cumplen al menos las siguientes condiciones:

  • El cifrado de bloque no tiene propiedades especiales que lo distingan de los cifrados ideales, como claves débiles o claves que conducen a cifrados idénticos o relacionados (puntos fijos o colisiones de claves).
  • El tamaño de hash resultante es lo suficientemente grande. De acuerdo con el ataque de cumpleaños, es deseable un nivel de seguridad de 2 80 (generalmente se supone que no es factible de calcular hoy) [ cita requerida ], por lo que el tamaño de hash debe ser de al menos 160 bits.
  • El último bloque se rellena adecuadamente antes del hash. (Ver construcción Merkle-Damgård ). El relleno de longitud normalmente se implementa y se maneja internamente en funciones hash especializadas como SHA-1, etc.

Las construcciones que se presentan a continuación: Davies-Meyer, Matyas-Meyer-Oseas, Miyaguchi-Preneel e Hirose han demostrado ser seguras bajo el análisis de caja negra . [7] [8] El objetivo es demostrar que cualquier ataque que se pueda encontrar es tan eficaz como el ataque de cumpleaños.bajo ciertos supuestos. El modelo de caja negra asume que se usa un cifrado de bloque que se elige al azar de un conjunto que contiene todos los cifrados de bloque apropiados. En este modelo, un atacante puede cifrar y descifrar libremente cualquier bloque, pero no tiene acceso a una implementación del cifrado de bloque. La función de cifrado y descifrado está representada por oráculos que reciben un par de un texto plano y una clave o un texto cifrado y una clave. Luego, los oráculos responden con un texto plano o cifrado elegido al azar, si se le preguntó al par por primera vez. Ambos comparten una tabla para estos tripletes, un par de la consulta y la respuesta correspondiente, y devuelven el registro si se recibió una consulta por segunda vez. Para la prueba, hay un algoritmo de búsqueda de colisiones que realiza consultas elegidas al azar a los oráculos. El algoritmo devuelve 1,si dos respuestas dan como resultado una colisión que involucra la función hash que se construye a partir de una función de compresión que aplica este cifrado de bloque (0 más). La probabilidad de que el algoritmo devuelva 1 depende del número de consultas que determinan el nivel de seguridad.

Davies – Meyer

La función de compresión unidireccional de Davies-Meyer

La función de compresión de longitud de bloque único de Davies-Meyer alimenta cada bloque del mensaje ( ) como clave para un cifrado de bloque. Alimenta el valor hash anterior ( ) como texto sin formato que se va a cifrar. El texto cifrado de salida también se XORed (⊕) con el valor hash anterior ( ) para producir el siguiente valor hash ( ). En la primera ronda, cuando no hay un valor hash previo, usa un valor inicial preestablecido constante ( ).

En notación matemática, Davies-Meyer se puede describir como:

El esquema tiene la tasa (k es el tamaño de la clave):

Si el cifrado de bloques utiliza, por ejemplo, claves de 256 bits, entonces cada bloque de mensaje ( ) es una parte del mensaje de 256 bits. Si el mismo cifrado de bloque usa un tamaño de bloque de 128 bits, entonces los valores hash de entrada y salida en cada ronda son 128 bits.

Las variaciones de este método reemplazan XOR con cualquier otra operación de grupo, como la suma de enteros sin signo de 32 bits.

Una propiedad notable de la construcción de Davies-Meyer es que incluso si el cifrado de bloque subyacente es totalmente seguro, es posible calcular puntos fijos para la construcción: para cualquiera , uno puede encontrar un valor de tal que : uno solo tiene que establecer . [9] Esta es una propiedad que las funciones aleatorias ciertamente no tienen. Hasta ahora, ningún ataque práctico se ha basado en esta propiedad, pero se debe tener en cuenta esta "característica". Los puntos fijos se pueden usar en un segundo ataque de preimagen (dado un mensaje , el atacante encuentra otro mensaje para satisfacer a Kelsey y Schneier [5] para un mensaje de bloqueo de -mensaje en el tiempo. Si la construcción no permite la creación fácil de puntos fijos (como Matyas – Meyer – Oseas o Miyaguchi – Preneel), este ataque se puede realizar a tiempo. Tenga en cuenta que en ambos casos la complejidad está por encima pero por debajo cuando los mensajes son largos y que cuando los mensajes se acortan, la complejidad del ataque se aproxima .

La seguridad de la construcción Davies-Meyer en el modelo de cifrado ideal fue probada por primera vez por R. Winternitz. [10]

Matyas – Meyer – Oseas

La función de compresión unidireccional Matyas-Meyer-Oseas

La función de compresión unidireccional de longitud de bloque único de Matyas-Meyer-Oseas se puede considerar la dual (lo opuesto) de Davies-Meyer.

Alimenta cada bloque del mensaje ( ) como texto sin formato a cifrar. El texto cifrado de salida también se XORed (⊕) con el mismo bloque de mensaje ( ) para producir el siguiente valor hash ( ). El valor hash anterior ( ) se alimenta como clave para el cifrado de bloque. En la primera ronda, cuando no hay un valor hash previo, usa un valor inicial preestablecido constante ( ).

Si el cifrado de bloque tiene diferentes tamaños de bloque y clave, el valor hash ( ) tendrá el tamaño incorrecto para usarlo como clave. El cifrado también puede tener otros requisitos especiales en la clave. Luego, el valor hash se alimenta primero a través de la función que se convertirá / rellenará para que se ajuste como clave para el cifrado.

En notación matemática, Matyas-Meyer-Oseas se puede describir como:

El esquema tiene la tarifa:

Un segundo ataque de preimagen (dado un mensaje, un atacante encuentra otro mensaje para satisfacer ) se puede realizar de acuerdo con Kelsey y Schneier [5] para un mensaje de bloqueo de -mensaje en el tiempo . Tenga en cuenta que la complejidad está por encima pero por debajo cuando los mensajes son largos, y que cuando los mensajes se acortan, la complejidad del ataque se aproxima .

Miyaguchi – Preneel

La función de compresión unidireccional Miyaguchi-Preneel

La función de compresión unidireccional de longitud de bloque único Miyaguchi – Preneel es una variante extendida de Matyas – Meyer – Oseas. Fue propuesto de forma independiente por Shoji Miyaguchi y Bart Preneel .

Alimenta cada bloque del mensaje ( ) como texto sin formato a cifrar. El texto cifrado de salida es luego XORed (⊕) con el mismo bloque de mensaje ( ) y luego también XORed con el valor hash anterior ( ) para producir el siguiente valor hash ( ). El valor hash anterior ( ) se alimenta como clave para el cifrado de bloque. En la primera ronda, cuando no hay un valor hash previo, usa un valor inicial preestablecido constante ( ).

Si el cifrado de bloque tiene diferentes tamaños de bloque y clave, el valor hash ( ) tendrá el tamaño incorrecto para usarlo como clave. El cifrado también puede tener otros requisitos especiales en la clave. Luego, el valor hash se alimenta primero a través de la función que se convertirá / rellenará para que se ajuste como clave para el cifrado.

En notación matemática, Miyaguchi – Preneel se puede describir como:

El esquema tiene la tarifa:

Los roles de y pueden cambiarse, de modo que se encripta bajo la clave , lo que convierte a este método en una extensión de Davies-Meyer.

Un segundo ataque de preimagen (dado un mensaje, un atacante encuentra otro mensaje para satisfacer ) se puede realizar de acuerdo con Kelsey y Schneier [5] para un mensaje de bloqueo de -mensaje en el tiempo . Tenga en cuenta que la complejidad está por encima pero por debajo cuando los mensajes son largos, y que cuando los mensajes se acortan, la complejidad del ataque se aproxima .

Hirose

La función de compresión de longitud de bloque doble de Hirose

La función de compresión unidireccional de longitud de bloque doble de Hirose [8] consta de un cifrado de bloque más una permutación . Fue propuesto por Shoichi Hirose en 2006 y se basa en un trabajo [11] de Mridul Nandi .

Utiliza un cifrado de bloque cuya longitud de clave es mayor que la longitud del bloque y produce un hash de tamaño . Por ejemplo, cualquiera de los candidatos AES con una clave de 192 o 256 bits (y bloque de 128 bits).

Cada ronda acepta una parte del mensaje que tiene una longitud de bits y la usa para actualizar los valores de estado de dos bits y .

Primero, se concatena con para producir una clave . Luego, los dos valores de retroalimentación se actualizan de acuerdo con:

es una permutación arbitraria de punto fijo libre en un valor de -bit, típicamente definido como para una constante arbitraria distinta de cero (todos unos pueden ser una opción conveniente).

Cada cifrado se asemeja a la construcción estándar de Davies-Meyer. La ventaja de este esquema sobre otros esquemas propuestos de doble longitud de bloque es que ambos cifrados usan la misma clave y, por lo tanto, se puede compartir el esfuerzo de programación de claves.

La salida final es . El esquema tiene la tasa relativa al cifrado del mensaje con el cifrado.

Hirose también proporciona una prueba en el modelo de cifrado ideal.

Construcción de esponja

La construcción de esponja se puede utilizar para construir funciones de compresión unidireccionales.

Ver también

  • Whirlpool : una función de hash criptográfica creada con la construcción Miyaguchi-Preneel y un cifrado de bloque similar a Square y AES .
  • CBC-MAC , OMAC y PMAC : métodos para convertir cifrados de bloque en códigos de autenticación de mensajes (MAC).

Referencias

Citas

  1. ^ Manual de criptografía aplicada por Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Quinta impresión (agosto de 2001) página 328.
  2. ^ "Anuncio de la primera colisión SHA1" . Blog de seguridad en línea de Google . Consultado el 12 de enero de 2020 .
  3. ^ Ivan Damgård. Un principio de diseño para funciones hash . En Gilles Brassard, editor, CRYPTO, volumen 435 de LNCS, páginas 416–427. Springer, 1989.
  4. ^ Ralph Merkle. Funciones hash unidireccionales y DES . En Gilles Brassard, editor, CRYPTO, volumen 435 de LNCS, páginas 428–446. Springer, 1989.
  5. ^ a b c d John Kelsey y Bruce Schneier. Segundas imágenes previas en funciones hash de n bits por mucho menos de 2 n de trabajo . En Ronald Cramer, editor, EUROCRYPT, volumen 3494 de LNCS, páginas 474–490. Springer, 2005.
  6. ^ John Black, Martin Cochran y Thomas Shrimpton. Sobre la imposibilidad de las funciones hash altamente eficientes basadas en cifrado de bloques. Advances in Cryptology - EUROCRYPT '05, Aarhus, Dinamarca, 2005. Los autores definen una función hash "altamente eficiente si su función de compresión utiliza exactamente una llamada a un cifrado de bloque cuya clave es fija".
  7. ^ John Black, Phillip Rogaway y Tom Shrimpton. Análisis de caja negra de las construcciones de función hash basadas en cifrado de bloques de PGV. Avances en Criptología - CRYPTO '02, Lecture Notes in Computer Science, vol. 2442, págs. 320–335, Springer, 2002. Véase la tabla en la página 3, Davies – Meyer, Matyas – Meyer – Oseas y Miyaguchi – Preneel están numerados en la primera columna como funciones hash 5, 1 y 3.
  8. ^ a b S. Hirose, Algunas construcciones plausibles de funciones hash de longitud de bloque doble . En: Robshaw, MJB (ed.) FSE 2006, LNCS, vol. 4047, págs. 210-225, Springer, Heidelberg 2006.
  9. ^ Manual de criptografía aplicada por Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Quinta impresión (agosto de 2001) página 375.
  10. ^ R. Winternitz. Una función hash unidireccional segura construida a partir de DES. En Proceedings of the IEEE Symposium on Information Security and Privacy, p. 88-90. IEEE Press, 1984.
  11. ^ M. Nandi, Hacia funciones de hash de doble longitud óptimas , en: Actas de la 6ª Conferencia Internacional sobre Criptología en India (INDOCRYPT 2005), Lecture Notes in Computer Science 3797, páginas 77–89, 2005.

Fuentes

  • Menezes; van Oorschot; Vanstone (2001). "Funciones hash e integridad de datos" (PDF) . Manual de criptografía aplicada .
Obtenido de " https://en.wikipedia.org/w/index.php?title=One-way_compression_function&oldid=1043267327#Davies–Meyer "