Davies-Meyer es una función de compresión que se puede utilizar para crear funciones de cifrado hash, un ejemplo simple sería una cadena Merkle-Damgard de construcciones Davies-Meyer.
La idea básica de la construcción de DM es que comprime un bloque de texto en “n” bits usando un algoritmo de encriptación poniendo un valor inicial aleatorio de “n” bit como mensaje y usando su bloque de texto como clave. Por lo tanto, el resultado después del cifrado es un bloque de n bits.
Es muy importante luego XOR el resultado del cifrado con el valor inicial, de lo contrario, es muy fácil crear una colisión y eso es un gran no-no para una función hash criptográfica.
- ¿Cuáles son las limitaciones de IPv4?
- ¿Qué es mejor para derribar sistemas, ataques DDoS (recuadro negro) o vulnerabilidades (recuadro blanco)?
- ¿Qué hago si alguien me está engañando?
- ¿Qué es la traducción de direcciones de puerto (PAT)?
- Cómo describir la diferencia entre conmutación de paquetes y circuitos
Por ejemplo, digamos que no es XOR, solo encripta el IV con el bloque de texto que está troquelando. Llamemos al resultado h.
h = E (IV, texto)
Ahora podemos crear un bloque aleatorio del mismo tamaño que el IV y descifrar.
texto2 = D (IV2, h)
Y ahora sabemos que:
E (IV2, texto2) = h
Luego
E (IV, texto) = E (IV2, texto2)
Y hemos creado una colisión.
Lo dejaré como ejercicio para mostrar por qué eliminar el resultado con el texto sin formato inicial evita estas colisiones fáciles.
Las construcciones de DM se pueden encadenar, puede alimentar el resultado de DM como texto sin formato del próximo DM utilizando el siguiente bloque de texto como clave, etc.
Si no recuerdo mal, SHA256 es una combinación de funciones de compresión de Davies-Meyer que utilizan Merkle-Damgard y SHACAL-2 como algoritmo de cifrado.