Me doy cuenta de que esto a menudo se describe como una mala idea. Así que, en primer lugar, indicaré la motivación. Siéntete libre de criticar esto.
Crear un producto para una industria que tiende a preocuparse demasiado por la seguridad. El producto necesita almacenar y devolver archivos de usuario, pero no es necesario que sean legibles por el servidor.
Siento que cifrar el lado del cliente reduciría la confianza requerida de los clientes. Sus datos confidenciales solo serían tocados por JavaScript que podrían inspeccionar y monitorear. También significa que cualquier lado del servidor de problemas de seguridad que permita el acceso a los datos almacenados no dará lugar a que los documentos del cliente estén disponibles (excepto si pueden modificar el JS servido).
Mi solución ideal sería -
- Key generated and injected to all clients users by clients IT team.
- JavaScript uses key to encrypt documents client side. These are then sent to the server and stored.
- On retrieval documents are decrypted again client side.
Parece que hay varias bibliotecas para admitir el cifrado del lado del cliente. Pero actualmente no veo ninguna manera de almacenar de forma persistente una clave para el usuario. Idealmente, esto sería similar a agregar certificados a la tienda de navegadores, es decir, se pueden inyectar una vez.
¿Alguien tiene alguna sugerencia?