Estoy escribiendo un sistema en el que el usuario debe iniciar sesión con dos contraseñas: una contraseña normal (con sal y hash, almacenada en la base de datos) y una contraseña especial donde el usuario necesita escribir solo algunas letras, por ejemplo. "por favor escriba la segunda, tercera y última letra de su contraseña".
¿Cómo se puede diseñar ese sistema para admitir la segunda contraseña?
Idea 1: almacena la contraseña en texto plano. Por supuesto no.
Idea 2: Almacena cada personaje por separado, salado y picado. Mal porque si el atacante conoce la sal, solo se necesitan unas pocas docenas de conjeturas para forzar al personaje.
¿Hay alguna otra manera?
Aclaraciones:
Las dos contraseñas deben escribirse al mismo tiempo, de esta manera:
Los propósitos de la segunda contraseña son:
- Derrota al atacante que mira por encima de tu hombro mientras escribes la contraseña o un keylogger.
- Derrota el administrador de contraseñas en tu navegador, cuando alguien como tu familiar puede iniciar sesión en tu cuenta si eliges guardar tu contraseña en el navegador.
- Proporcione una alternativa simple a 2FA cuando el usuario no está accediendo a información extremadamente confidencial, por lo que no les molestamos en recuperar su generador de contraseña de hardware (que también tienen).