Tengo un sistema cliente-servidor, donde el cliente es una aplicación de Android. El cliente y el servidor se comunican a través de HTTP.
Si el servidor / la red no está disponible, el cliente debe almacenar los datos localmente en un archivo cifrado y debe volver a intentar iniciar la comunicación más tarde, una vez que el servidor / la red se haya recuperado.
Existe un requisito comercial de que estos archivos locales deben estar cifrados de alguna manera en el cliente, y si el cliente se daña, el administrador debe poder recuperar los datos de los archivos cifrados locales. No es necesario que los datos estén cifrados mientras se envían a través de la red.
Me gustaría saber cuál es la mejor manera de cifrar los datos. Tengo una solución potencial en mi mente, pero no estoy seguro de si es correcta / eficiente o no:
Cifraré los archivos con una clave simétrica y los compartiré con el servidor para que pueda descifrarlos. Para mantener la clave simétrica en secreto mientras se envía a través de la red, mi plan es cifrar la clave simétrica con la clave pública del servidor, de modo que solo el servidor podrá recuperar la clave simétrica.
No quiero volver a inventar la rueda, por lo que cualquiera sabe una forma mejor o más sencilla de almacenar y cifrar datos temporales en el cliente, por favor, compártelos conmigo. También estoy buscando el nombre del patrón de diseño que resuelve este problema, si existe alguno.