Actualmente estoy trabajando en una aplicación web con un importante riesgo de seguridad asociado a su función. Estamos utilizando Microsoft Identity Framework para administrar los inicios de sesión de los usuarios, con el sistema forzando contraseñas seguras y el registro, que requiere la confirmación adicional por correo electrónico antes del primer uso.
Tenemos la sensación de que esto no es del todo suficiente. Uno de nuestros competidores utiliza un sistema de inicio de sesión de dos pasos con una contraseña, seguido por el usuario que ingresa tres dígitos de un PIN de seis dígitos al desplegar. Hay una sugerencia de que deberíamos copiar esto.
Personalmente, me siento incómodo al implementar una solución de este tipo sin comprender mejor sus ventajas y desventajas en comparación con las alternativas. Me parece que una entrada de capa de datos adicional que es inmune al registro de teclas no es una pieza de seguridad adicional significativa. Seguramente, si un atacante ya tiene una combinación de correo electrónico / contraseña, ¿casi cualquier forma imaginable de que hayan podido obtener esto también dará lugar a que tengan el PIN?
La alternativa obvia para fortalecer la seguridad es tener una autenticación de dos factores a través de SMS. Esto incurrirá en un costo, pero si la seguridad es primordial, parece que en realidad se agrega una protección significativa al sistema a través de un PIN, que creo que no agregará casi ninguna.
¿Cuál es el punto de tener una autenticación de PIN adicional? ¿Tiene alguna ventaja sobre la autenticación de 2 factores?
EDITAR: La solución de PIN propuesta emitiría al usuario un número de 6 dígitos generado aleatoriamente por correo electrónico. Al iniciar sesión en el sitio, primero tendrían que ingresar una contraseña (que, por supuesto, puede ser almacenada por el navegador). Si tienen éxito, se les pedirá que ingresen tres dígitos seleccionados al azar de los seis (es decir, que ingresen los caracteres primero, segundo y quinto de su PIN) a través del cuadro desplegable.
Reflexionando, supongo que esto al menos detiene el acceso no autorizado a través de alguien que confía en una contraseña almacenada desde el navegador.