¿Cuál es la mejor práctica para cifrar y almacenar datos temporales en el cliente?

1

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.

    
pregunta SaWo 13.02.2018 - 17:04
fuente

2 respuestas

0

Si el cliente solo tiene que cifrar los datos y no es necesario descifrarlos en el lado del cliente, simplemente puede usar cifrado asimétrico de clave y cifrarlo en el cliente usando una clave pública y descifrarlo en el servidor usando privado llave.

Si el cliente también necesita descifrar los datos (por ejemplo, para procesamiento / presentación, etc.), puede usar cifrado de clave simétrica .

  • Derivación de claves : puede usar PBKDF2 para obtener la clave de contraseña del usuario

  • Administración de claves : puede derivar esta clave dinámicamente siempre que sea necesaria usando la contraseña del usuario. Alternativamente, puede almacenarlo en Android keystore .

Nota: tenga en cuenta que el cifrado de clave asimétrico es un proceso costoso en comparación con el cifrado de clave simétrica. El cifrado de archivos de gran tamaño utilizando el cifrado de clave asimétrico puede llevar una buena cantidad de tiempo que puede afectar el rendimiento de la aplicación.

    
respondido por el Shiv Sahni 23.02.2018 - 03:41
fuente
0

Modelado de amenazas.

¿De quién estás tratando de ocultar los datos? ¿El usuario del dispositivo móvil? Si el administrador necesita recuperar los datos, ¿por qué no mantenerlos en el servidor?

Si no le importa el cifrado a través de la red, no le importa la privacidad de los datos, por lo que debemos entender a qué propósito comercial se dedica el cifrado en el dispositivo, si queremos proporcionarle una información útil. respuesta.

Cuando hablas de una clave simétrica protegida por una clave pública, básicamente estás reinventando https (TLS), en cuyo caso, solo usa eso en lugar de http y enrolla el tuyo.

Si el cliente elige la clave simétrica, podría descifrar los archivos localmente, por lo que no obtiene protección allí, y como los archivos no se cifran cuando se envían originalmente a través de la red, no entiendo el valor / requisito del negocio para almacenarlos cifrados en el dispositivo final. Un usuario final hostil podría simplemente capturar los archivos sin cifrar a medida que se envían.

Si OP puede completar la pregunta con la razón del requisito, podríamos darle un mejor consejo.

En lo más abstracto, lo que describas "funcionaría" pero en realidad no protegería nada de manera significativa.

    
respondido por el JesseM 13.02.2018 - 19:40
fuente

Lea otras preguntas en las etiquetas