¿Por qué es útil conocer una colisión específica del algoritmo de hash? [duplicar]

2

No hace mucho tiempo, se encontró la primera colisión del SHA-1 . Si lo hago bien, eso significa que alguien encontró dos entradas diferentes que dan la misma salida. Dos mensajes diferentes dan la misma salida. Que esto sea posible es trivial ya que la salida siempre tiene una longitud fija. Por lo que entiendo y escucho, encontrar una colisión es un problema importante para un algoritmo de hash y señala que el algoritmo está más o menos muerto .

Aunque creo que puedo ver que puede haber diferentes tipos de colisiones, mis preguntas generales son: ¿Por qué es un problema encontrar una colisión? ¿Cómo puede ser explotado?

No me queda claro cómo encontrar dos mensajes aleatorios con el mismo hash permitirá a alguien "fácilmente", por ejemplo, firmar mensajes o romper archivos de contraseña con hash (está bien, tal vez almacenar las contraseñas hash no es una buena idea de todos modos ). Si yo, por ejemplo (quizás simplificado en exceso), firmo un mensaje y desea firmar otro mensaje con el mismo hash, ¿cómo lo ayudaría el conocimiento de una colisión específica?

EDITAR: veo la pregunta / respuesta aquí: ¿Cuáles son las implicaciones de una colisión SHA-1? pero no creo que responda a mi pregunta. Entiendo que "en teoría, sería posible que un atacante genere dos archivos ejecutables que tengan el mismo hash SHA-1, pero que realicen cosas diferentes cuando se ejecuten". por ejemplo. Pero, ¿qué tan probable es eso? ¿Cómo es posible saber esto un hash específico? (Actualicé el título de la pregunta).

    
pregunta Thomas 11.04.2017 - 17:37
fuente

4 respuestas

1

La forma en que generalmente se explotan los ataques de colisión es la siguiente:

  1. Mallory (el atacante) genera dos documentos, que etiquetaremos good y bad , cuyos hashes colisionan.
  2. Mallory le da good a Alice para que la firme.
  3. Alice firma good , dando la firma que etiquetaremos good_signature , y se la da a Mallory.
  4. Mallory ahora presenta el documento bad y el good_signature a Bob.
  5. Bob verifica que el good_signature de Alice es válido para el documento bad .
  6. Ahora Bob cree erróneamente que Alice firmó el documento bad y actúa sobre él.

Un ejemplo concreto de esto es PKI (por ejemplo, certificados SSL). Si puedo crear dos solicitudes de firma de certificado que colisionen, y enviar la "buena" a una CA para obtener su firma, podría extraer esa firma para falsificar un certificado "malo". Así es exactamente como funcionó el ataque de falsificación de certificados MD5 de hace unos años; los investigadores pudieron transferir la firma de una CA en un certificado legítimo que solicitaron a un certificado malicioso que les permitió emitir el suyo también.

    
respondido por el Luis Casillas 11.04.2017 - 19:44
fuente
1

La pregunta a la que se vinculó @PwdRsch cubre tu pregunta, pero te daré una respuesta más específica:

Imagina que tú y yo estamos negociando un contrato. Digamos que se me ocurren dos documentos que tienen el mismo valor hash, digamos

  

Acepto pagarle a Mike Ounsworth $ 1,000 por estos servicios.

Y

  

Acepto pagarle a Mike Ounsworth $ 1,000,000 por estos servicios.

Luego le pido que firme el primero, pero como los hashes son los mismos, también firmó el segundo.

Yo crearía estos dos documentos jugando con diferentes expresiones, puntuación, caracteres que no se pueden imprimir, etc., hasta que tenga una colisión. Para una función hash ininterrumpida con una salida de 256 bits, tendría que probar un promedio de 2 255 permutaciones antes de encontrar una colisión. Esto me costaría mucho más en electricidad de lo que vale el crimen. Cualquier acceso directo que me permita hacer esto en menos tiempo se consideraría una vulnerabilidad en la función hash y se retiraría.

Por un argumento similar, almacenar contraseñas con hash está bien siempre y cuando la función de hash no esté rota .

    
respondido por el Mike Ounsworth 11.04.2017 - 18:03
fuente
0

En un nivel alto, el hash se usa para determinar la singularidad: la salida será única para una entrada específica. Las colisiones son escenarios en los que se viola esa suposición: más de una entrada llevará la misma salida.

Un posible ataque con nuestro ejemplo sería que Alice quisiera enviarle un mensaje a Bob, y Bob debe asegurarse de que el mensaje que recibió sea realmente de Alice. Si el hash del mensaje que Alice envió coincide con el hash del mensaje que Bob recibió, Bob puede confirmar que recibió el mensaje que Alice envió. Ahora, si Mallory puede manipular el mensaje de Alice y hacerlo de manera que tenga el mismo hash que el mensaje original de Alice (una colisión), Bob confiará en el mensaje de Mallory, que cree que es el mensaje original de Alice.

    
respondido por el user52472 11.04.2017 - 17:56
fuente
-1

En esta publicación, Linus Torlvalds habla sobre esto. enlace

    
respondido por el gonisimchuk 11.04.2017 - 19:51
fuente

Lea otras preguntas en las etiquetas