Trabajo en una aplicación web con el lado del cliente como una aplicación de Javascript de una sola página y el lado del servidor como un servicio REST. Esta aplicación administra datos de usuario confidenciales que no deben ser legibles ni siquiera por un atacante con acceso completo de lectura a la base de datos en vivo o algún archivo de base de datos.
Nuestro plan es:
- cuando el usuario se registra, genera claves asimétricas en el lado del cliente y las envía al servidor, con la clave privada cifrada con una clave derivada de la contraseña del usuario
- autentique al usuario pidiendo la clave privada cifrada del servidor y descifrela en el lado del cliente usando la contraseña del usuario. El descifrado exitoso equivale a una autenticación exitosa
- genere claves simétricas cuando se crea un documento confidencial, cifre el documento y comparta estas claves con los usuarios autorizados, estilo PGP
- para la recuperación de la contraseña, le damos al usuario su clave privada y confiamos en él para que esté seguro
Tenga en cuenta que asumimos que el atacante no controla ni el navegador ni un servidor en ejecución.
En este escenario, ¿qué vectores de ataque ves?
¿Es posible implementar un mecanismo de recuperación más simple que no requiera que el usuario almacene la clave privada?
¿Tiene alguna otra inquietud / recomendación?
Gracias