UC-IIC3253 / 2022

37 stars 6 forks source link

[T2P1] Construcción Davies-Meyer #48

Closed Zetaku1 closed 2 years ago

Zetaku1 commented 2 years ago

Hola!

La verdad es que estoy un poco confundido con la función Davies-Meyer. Según lo que entiendo está calcula el siguiente bloque de un hash de la siguiente forma: $Hi = Enc(H{i-1}) ⊕ H_{i-1}$.

Sin embargo, la función en el enunciado toma solamente una función de encriptación: Enc, el largo de la llave y el largo del mensaje. Por lo que en mi mente, no tengo cómo calcular el hash del bloque siguiente, dado que no obtengo un hash de ningún lado.

Que es lo que no estoy entendiendo?

Muchas gracias de antemano!

BFFV commented 2 years ago

Según entendí yo, la función que piden debe retornar OTRA función que sería la que aplica la compresión (la que recibe un input que en tu ejemplo sería el siguiente pedazo del mensaje a hashear + lo que viene del bloque anterior, ya que así funciona Merkle-Damgard). Si te fijas en la firma de la función del enunciado sale que lo que retorna es una función que recibe un bytearray y retorna otro bytearray (su compresión):

(bytearray) -> bytearray

marceloarenassaavedra commented 2 years ago

Dada una función de encriptación encrypt que recibe una llave de largo l_key y un mensaje de largo l_message, la construcción de Davies-Meyer define una función de compresión de mensajes de largo l_key + l_message a mensajes de largo l_message de la siguiente forma. Dado un string x de largo l_key + l_message, la construcción divide x en una primera parte u de largo l_key y una segunda v de largo l_message (tenemos que x = u||v), y después calcula encrypt(u,v) XOR v.

Como comenta @BFFV, lo que se pide en la tarea es que la función davies_meyer retorne la función de compresión obtenida usando la construcción de Davies-Meyer descrita en el párrafo anterior.

Saludos!

Zetaku1 commented 2 years ago

Muchas gracias!

Jaluco commented 2 years ago

Es necesario entonces ese l_message? no bastaria con tener el largo de la key para poder conseguirlo con un simple len(x) - l_key?

marceloarenassaavedra commented 2 years ago

Es cierto que l_message se puede obtener de esta manera, pero lo que queremos que produzca davies_meyer es una función de compresión para mensajes de largo fijo y que retorne valores de hash de largo fijo, y esto puede hacerse porque davies_meyer incluye como parámetro a l_message.

Saludos!

ibaeza1 commented 2 years ago

Hola profe @marceloarenassaavedra! Aun no entiendo bien en la funcion de davies-meyer de donde se saca la key y el mensaje para poder encriptar. La funcion que esta adentro de davies-meyer recibe un bytearray que tiene el bloque de mensaje a codificar + el hash anterior todo concatenado para despues separarlo con los largos l_key y l_message? Gracias!

marceloarenassaavedra commented 2 years ago

Hola!

La función davies_meyer debe retornar una función de compresión obtenida usando la construcción de Davies-Meyer. De esta forma, la función davies_meyer no recibe como parámetros una llave y un mensaje para poder encriptar, solo recibe como parámetros una función de encriptación encrypt, el largo de la llave l_key y el largo del mensaje l_message, y a partir de ellos genera la función de compresión mencionada (que va a ser usada en la construcción de Merkle-Damgard).