Estoy diseñando una aplicación web que manejará datos muy confidenciales y los almacenará en nombre de sus usuarios. Una especie de caja fuerte en línea, por así decirlo.
Los datos seguros de un usuario solo deben ser visibles para ella, ni siquiera para el software del servidor o el propietario. Esto abre el camino a prácticas de seguridad sólidas, como el uso de una contraseña de usuario final para cifrar / descifrar directamente sus datos, o mejor aún, para cifrar una clave simétrica utilizada para cifrar sus datos. Esto último permitiría cambiar la contraseña sin volver a cifrar todos los registros en la base de datos.
¿Puedo garantizar que un atacante no pueda acceder a los datos protegidos, incluso si obtuvieran acceso de root a mi servidor?
Se me ocurrió la idea de que necesito cifrar / descifrar los datos del usuario en el lado del cliente. Los navegadores y el hardware modernos hacen posible que la contraseña y la clave de cifrado del usuario nunca salgan de su navegador. Todas las otras técnicas que se me ocurren tienen defectos fatales, por lo que un atacante podría leer la memoria de mi software de servidor en ejecución y encontrar la clave de cifrado.
Pero ¿cómo puedo evitar que el atacante plante un error web en mi sitio web, o simplemente cambie mi script del lado del cliente, para enviar las claves de cifrado de los usuarios?
¿Existe alguna tecnología, compatible con uno o más navegadores, en la que pueda solicitar que todos los scripts del lado del cliente de mi sitio web estén firmados con algún certificado mío? Por el bien de esta pregunta, suponga que mis usuarios confían en mí para escribir un buen software, por lo que confiarían en mi certificado.
¿Hay una extensión de navegador que haga tales comprobaciones, que podría recomendar a mis usuarios que instalen?
En caso de que no exista, ¿cómo se aborda esta amenaza en la industria? ¿La auditoría es la única solución? Por ejemplo, revisando mi sitio web periódicamente desde direcciones IP externas, para asegurarse de que los scripts del lado del cliente no hayan cambiado el hash criptográfico.
¿Debo renunciar a la idea de hacer algo como esto con tecnologías web abiertas y resolver el problema utilizando un sistema de distribución de software confiable como las tiendas de aplicaciones de Apple / Google? ¿Esto solo traslada el problema al servidor de otra persona o realmente aborda el problema subyacente?
¿Puede recomendar algún buen práctico libros / blogs / artículos sobre el tema?