XOR-Cascade of hash secure secure?

1

Tengo la siguiente pregunta teórica:

Sea H(X) una función hash que se considera débil porque se pueden producir colisiones (por ejemplo, SHA1, MD5).

Me pregunto si las siguientes funciones:

H2(X) = H(H(X)) xor H(X)
H3(X) = H(H(H(X))) xor H(H(X)) xor H(X)
H4(X) = ...

puede considerarse seguro, si H(X) se considera inseguro. Si el atacante pudiera encontrar una colisión en H(X) , también tendría que encontrar una colisión en H(H(X)) , para poder tener una colisión en H2(X) = H(H(X)) xor H(X) . ¿O todavía no es seguro? (¿Por qué?)

Soy consciente de que dicha cascada no es eficaz en comparación con una función hash más nueva como SHA256 o SHA3.

    
pregunta Daniel Marschall 25.10.2014 - 01:35
fuente

2 respuestas

1

No. Una colisión para H es un par de entradas m y m ' de tal manera que m m' pero H ( m ) = H ( m '). De ello se deduce que H ( H ( m )) = H ( H ( m ')), y también H ( H ( m )) xor H ( m ) = H ( H ( m ')) xor H ( m '), etc.

Por lo tanto, cualquier colisión para H también es una colisión para todas sus funciones H 2 , H < sub> 3 , H 4 ... Estas funciones no son de ninguna manera más seguras que H cuando se considera la resistencia a las colisiones . Es muy posible que estén menos seguros, incluso, ya que su premisa es incorrecta:

  

Si el atacante pudiera encontrar una colisión en H (X), también necesitaría encontrar una colisión en H (H (X)) para poder tener una colisión en H2 (X) = H (H (X)) xo H (X).

Esto no es cierto. Si un atacante encuentra una colisión para H que también colisiona para H ( H ), luego consigue una colisión para H 2 . Pero eso no funciona al revés: no hay un requisito absoluto para que una colisión en H 2 sea tal que sea una colisión en ambas H y H ( H ).

Por lo tanto, todas las colisiones para H son colisiones para H 2 (y H 3 , H 4 ...) pero H 2 puede tener colisiones propias que no son colisiones para H . Encontrar colisiones en H 2 solo puede ser más fácil que encontrar colisiones en H .

    
respondido por el Thomas Pornin 24.11.2014 - 01:45
fuente
0

No, generalmente no. La iteración de hashes aumenta el riesgo de colisión, ya que la iteración de H (000 ... 128 ... 000) a H (111 ... 128 ... 111) - asumiendo que H tiene una salida de 128 bits, no está garantizada a la salida 000 ... 128 ... 000 a 111 ... 128 ... 111. En su lugar, al usar tal cosa, realmente disminuye la resistencia a la colisión.

Las funciones hash de iteración solo se deben realizar como un factor de fortalecimiento clave, por ejemplo, si desea generar una clave de cifrado segura a partir de una contraseña no segura. Un factor de fortalecimiento clave ralentizará al atacante lo suficiente como para hacer que la fuerza bruta de la contraseña sea desfavorable que la fuerza bruta. Entonces, no importa ninguna colisión, ya que el atacante tardará más tiempo en encontrar una colisión en una función de fortalecimiento de la clave que en atacar directamente la clave de cifrado.

Tenga en cuenta que el atacante tiene la función hash, de modo que el atacante puede ejecutar fácilmente pruebas contra la función hash para encontrar cualquier colisión y luego ejecutar ese resultado de prueba en sus datos reales.

En cambio, cambia la función hash en tu sistema a una nueva función hash, como SHA512.

    
respondido por el sebastian nielsen 25.10.2014 - 02:12
fuente

Lea otras preguntas en las etiquetas