Necesito desarrollar un sistema donde un usuario pueda cargar un archivo a través del navegador que encripta el archivo y lo almacena en mi servidor. Después de cargar el archivo, otro usuario puede descargarlo con una aplicación iOS o Android y descifrarlo para verlo. El problema es que no debería poder descifrar el archivo en mi servidor, porque los archivos son potencialmente muy sensibles. Ahora, no tengo ningún conocimiento real sobre el cifrado y no sé por dónde empezar. ¿Tiene alguna pista sobre cuál es la mejor práctica para este tipo de encriptación de extremo a extremo?
Se me ha ocurrido una idea de cómo debería ser mi esquema de seguridad.
- El cliente CMS inicia sesión y su contraseña se usa a partir de ahora como clave de carga (más tarde se usa)
- En el lado del CMS, se crea un usuario posterior de la aplicación (posible receptor de archivos), con una contraseña de inicio de sesión (para la aplicación) y una clave de descarga (que luego se usa) para descifrar los archivos descargados.
- El cliente CMS envía a los usuarios de la aplicación su contraseña de inicio de sesión y la clave de descarga en un correo separado (sin correo electrónico)
- El cliente CMS carga un archivo que se encripta con una clave aleatoria (más tarde se usa) en el navegador y se almacena en el servidor 1. La clave aleatoria y la referencia al archivo se cifran con la clave de carga y se almacenan en el servidor 2 .
- El cliente CMS selecciona el usuario de la aplicación (uno o más) para ver los archivos cargados. En este momento, la clave aleatoria y la referencia del archivo (del paso 3.) se descifran con la clave de carga. Este paquete descifrado se duplica y se encripta con la clave de descarga del usuario de la aplicación seleccionada (este paso se realiza para cada usuario de la aplicación seleccionada, por lo tanto, tendremos múltiples paquetes para cada usuario de la aplicación)
¿Se acerca este enfoque o me dirijo en la dirección incorrecta?