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?