¿Cómo se puede explotar la igualdad de hash de cortocircuito?

6

Hace poco encontré un código de contraseña que ocultaba la contraseña y luego lo comparaba con el hash guardado de forma ingenua: un personaje a la vez, cortocircuita tan pronto como se encuentra una no coincidencia. Estuvimos de acuerdo en que era un error de seguridad y lo arreglamos.

Sin embargo, este código despertó mi curiosidad: supongamos que un atacante puede deducir del momento en que la contraseña verifica el número de dígitos hash que coinciden. ¿Cómo podría ser explotado este error en la práctica? Entiendo que la seguridad debe ser profunda y que no necesita encontrar un exploit práctico para tomar una medida de seguridad; lo pregunto por pura curiosidad.

Por ejemplo, el atacante podría intentar extender progresivamente el hash un carácter a la vez. Pero si el hash tiene n dígitos, el atacante eventualmente debe extender de n-1 a n dígitos. Asumiendo una buena función hash, esto parece requerir un ataque completo de pre-imagen. Asumiendo que el atacante puede calcular el hash, lo que requiere que el atacante tenga el salt si hay uno, este ataque podría realizarse en gran parte del lado del cliente (dados n dígitos en la base b, se requieren un máximo de n * b consultas al servidor ). Pero las funciones hash se eligen para resistir los ataques de pre-imagen, así que ¿es esta vulnerabilidad práctica?

    
pregunta Solomonoff's Secret 11.05.2018 - 14:05
fuente

1 respuesta

3

Esta respuesta en crypto.SE describe el ataque que Anders señala en los comentarios. Incluso si hay una sal, todavía es una buena práctica hacerla una comparación segura, simplemente porque se supone que las sales son información pública, aunque en la práctica parece poco probable que sea un gran problema a menos que divulgue la sal sin divulgar la sal. hash de contraseña.

Su suposición sobre este ataque que requiere un primer ataque de pre-imagen en el hash parece lógica, pero tiene un problema importante: el espacio de pre-imagen que importa es el espacio de pre-imagen de las contraseñas hash, no del hash en sí. (es decir, la preimagen de H(p) donde p es una contraseña en lugar de H(d) donde d es cualquier dato). Este es un problema incluso con un hash lento porque el espacio de pre-imagen puede ser mucho más pequeño, como probar las contraseñas más reutilizadas 2 20 (vs, por ejemplo, 2 128 para el hash en sí).

    
respondido por el AndrolGenhald 11.05.2018 - 15:48
fuente

Lea otras preguntas en las etiquetas