Estoy recibiendo datos confidenciales a través de una conexión HTTPS y necesito almacenarlos en el disco, encriptados para que nadie pueda manipularlos, pero para leerlos más adelante. Cada usuario en el sistema tiene una contraseña.
La aplicación necesita almacenar la información recibida a través de HTTPS en caso de que no haya conexión a Internet disponible. Sincronice una sola vez y luego lea un archivo que contenga la información más importante. Por supuesto, una sincronización automática tendrá lugar cuando se puede hacer una conexión. La información es necesaria para garantizar que el usuario tenga permiso para realizar ciertas acciones, por lo que el usuario no debería poder manipular el archivo por sí mismo .
¿Cuál es la mejor manera de hacer esto?
1) Temas como this , this y this sugieren usar una contraseña y algo como PBKDF2 para generar una clave, la cual se puede utilizar para cifrar la clave que cifra los datos . ¿Tengo razón al entender esto?
2) Si es así, ¿ la clave que encripta los datos también debe derivarse de la contraseña del usuario? Para mí esto suena sombrío, por decir lo menos.
3) No sé lo suficiente sobre el desmontaje, pero temo la posibilidad de que un adversario pueda secuestrar el binario y manipular los datos recibidos de HTTPS antes de que se cifre. ¿Es este un riesgo sustancial? ¿Debería realizarse el cifrado en el servidor y, de ser así, cómo cambia esto el protocolo?
El producto se ejecuta en OSX, Windows y posiblemente Linux en el futuro.