Esta es una situación hipotética, no una en la que estoy actualmente.
Supongamos que estoy usando alguna función hash, llámela H1, que actualmente se considera relativamente segura para almacenar contraseñas. También estoy usando una sal. Si mañana la función hash se considerará comprometida (o algo así), como sucedió con SHA1 , ¿qué debo hacer para volver a proteger las contraseñas?
De manera ingenua, me gustaría reconstruir las contraseñas con H1 y volverlas a utilizar con otra función hash relativamente segura, H2. Pero, por supuesto, esto es imposible ya que el punto principal era no poder reconstruir las contraseñas. Estaba pensando en 2 posibles cursos de acción:
- Hash con H2 los hashes H1. Ahora, para autenticar al usuario, tendría que hacer hash con H1 y luego con H2 y comparar. Básicamente, esto trata los hashes H1 como contraseñas de texto simple, aunque más molestas para el atacante. En este escenario, ¿se necesitaría otra sal para H2 o se puede reutilizar la de H1?
- Revoque de inmediato las contraseñas y el correo electrónico / texto almacenados (o cualquier segundo método de autenticación), una contraseña temporal que debe ser reemplazada por una nueva en el próximo inicio de sesión, esta última con hash con H2 y salada con una nueva sal.
Al compararlos, me parece que 1 tiene la ventaja de no involucrar a los humanos y no confiar en un canal de terceros, aunque restablecer las contraseñas de esta manera parece bastante común. Tiene la desventaja de desorden adicional y el trabajo requerido para la autenticación.
¿Uno de los 2 anteriores se considera el curso de acción correcto o algo más es?