Digamos que tengo un sitio web que permite a los usuarios cargar archivos (como Dropbox), y necesito cifrar esos archivos para que solo los usuarios que tienen acceso a ellos puedan ver los datos del archivo. Los usuarios deben poder ver los nombres / tamaños de los archivos a través de una interfaz web (pero nadie más debería poder hacerlo) y descargar la versión sin cifrar cuando lo deseen. ¿Cuál sería la configuración de cifrado más segura?
Me parece que podría cifrar una clave de descifrado con la contraseña de los usuarios (y asociar esa clave a ese usuario solo / usarla para cifrar sus datos), pero luego para acceder a la información del archivo o permitirles para descargar los datos del archivo, el servidor tendría que tener acceso a la clave de descifrado más allá del punto de inicio de sesión. Esto requeriría persistir la contraseña del usuario en cierta capacidad (o guardar la clave de descifrado) con la sesión, ambas parecen muy inseguras. También se me ha ocurrido que podríamos (de alguna manera) almacenar de forma segura una clave maestra, pero entonces los datos del usuario están en riesgo si esa clave es robada.
¿Cómo se hace esto en la práctica? Además, si alguien por ahí tiene buenos artículos / publicaciones sobre este tema, me gustaría mucho leerlos.