No, está perjudicando activamente la usabilidad sin ningún beneficio para la seguridad.
¡Esto suena como un mal caso de Security Theatre * !
Digo esto porque lo que estás haciendo actualmente es tan seguro como enviar el nombre de usuario y la contraseña a través de HTTPS de todos modos. Todo lo que agrega es un par de comunicaciones adicionales de configuración. Las vulnerabilidades de esta implementación, así como las vulnerabilidades del envío de contraseña y nombre de usuario de HTTPS son exactamente iguales .
Vamos a desglosar el ejemplo:
Configuración y uso del secreto
- Establecer conexión segura
- Enviar carga útil para ser almacenada
- Confirme la carga útil y, si se confirma, inicie sesión
Configuración y uso de una contraseña
- Establecer conexión segura
- Enviar carga útil para ser almacenada
- Confirme la carga útil y, si se confirma, inicie sesión
Estos pasos son exactamente iguales y no ofrecen seguridad adicional. Si se produce una toma de control completa (MITM / nivel de sistema), lo mismo que sucedería con un nombre de usuario y una contraseña ocurrirá en su sistema. El atacante seguirá viendo todos los datos a medida que se transfieren y acceden entre su sistema y el servidor. Es por eso que las adquisiciones completas son tan peligrosas. Básicamente, no hay nada que pueda hacer para proteger al usuario. El usuario está utilizando un sistema de comunicación que ya no es el suyo, pero los atacantes y ese atacante pueden ver y usar todo lo que hay en la comunicación.
Realmente todo lo que estás haciendo es generar un secreto (comúnmente llamado contraseña) para almacenar, y algunos metadatos (comúnmente llamado nombre de usuario) para identificarlo. Si los metadatos y el secreto coinciden con una entrada, recupera esa información. La única ventaja que está obteniendo es que el usuario obtiene una contraseña extra larga. ¿Pero a qué fin? Bcrypt tiene una longitud máxima de caracteres, por lo que está limitando el número de caracteres que puede tener una contraseña individual. Ahora también tiene ese secreto compartido para preocuparse de obtener lo mismo cada vez o de su usuario o nunca podrán iniciar sesión.
Las contraseñas y los nombres de usuario sobre HTTPS se han usado con tanta frecuencia porque después de cierto punto (la conexión HTTPS) no hay nada que pueda hacer para aumentar la seguridad. Si alguien tiene acceso a todas las comunicaciones, o al espacio de la memoria, todas sus técnicas acaban de ser vencidas, ya que solo tienen que recrear sus pasos y es posible que nunca lo sepan hasta que ejecuten su ataque.
*: A partir de la semana pasada, esta frase ahora se macro en mi teclado ...
*: ¡El teatro de seguridad es el acto de poner en práctica prácticas que no hacen nada para mejorar la seguridad, y realmente pueden dañarlo!