Si g (x) es una función unidireccional débil, ¿es f (x) = x (exclusivo o) g (x) una función unidireccional? Si es así, ¿puede ser fuerte?

Intuitivamente, no tiene que ser una función unidireccional, y puede ser fuerte. Pero no tengo experiencia particular con las pruebas de función unidireccionales, y no estoy seguro de cómo probar este resultado en particular.

Para la intuición, dejemos que f (x) sea un cifrado de bloque con una clave fija, es decir, una permutación fea pero fácilmente invertible. Esta no es una función unidireccional. Pero g (x) = f (x) ^ x es la construcción hash de Davies-Meyer, que es probablemente una función unidireccional fuerte. Entonces g (x) es una función unidireccional pero f (x) no lo es.

Si desea que g (x) sea “estrictamente débil”, es decir, no fuerte, simplemente haga algo diferente dependiendo de si x es par o impar, por ejemplo, f (x) = 0 si x es par. Entonces g (x) no será fuerte.

Del mismo modo, podría hacer que g (x) sea una permutación fea pero fácilmente invertible cuando x es par, y una función unidireccional fuerte si x es impar (no use la patológica anterior). Entonces g (x) sería débil, pero con suerte f (x) sería fuerte.

Esto no constituye una prueba, porque aunque sé que los cifrados de bloque se siguen de funciones unidireccionales, no estoy seguro de lo que puede probar sobre las construcciones de Davies-Meyer.

EDITAR: f () definitivamente puede ser una función no unidireccional. Sea h (x) una función unidireccional, y sea g (x) = h (x) << | x |. Entonces f (x) = h (x) || x revela x.