¿Cómo puedo hacer que los datos almacenados localmente sean ilegibles a menos que esté conectado (conectado) al servidor?

0

Tengo una aplicación de chat incorporada en Java. La aplicación de chat almacena un registro de los chats de Jimmy en su máquina.

Quiero que este registro de chat esté encriptado, por lo que si alguien usa la computadora (autorizada o no autorizada) no puede simplemente leer todas las conversaciones de Jimmy. Me gustaría que los chats de Jimmy solo sean legibles cuando Jimmy está conectado. Tan pronto como se desconecta, los chats deben estar encriptados e ilegibles.

¿Alguna idea sobre cómo se podría implementar este tipo de esquema?

    
pregunta Curious1 07.12.2015 - 22:31
fuente

2 respuestas

2

Ok, no soy un experto en esto. Tal vez otros pueden agregar. Pero a partir de su descripción, esto es lo que se me ocurre.

  1. el cliente inicia sesión.
  2. el servidor emite una clave, K.
  3. el cliente mantiene K en la memoria para cifrar el registro en el disco, así como descifrar cualquier registro leído en la memoria para su visualización.
  4. cuando el cliente intenta cerrar sesión o desconectarse, la tecla K se borra de la memoria.

De esa manera, el cliente no tendría una clave para descifrar nada en ausencia de una sesión activa, como la desconexión accidental además del cierre de sesión. Aquí, asumo que la clave K se envía de forma segura a través de algo como TLS.

Sin embargo, el esquema de cifrado siempre es difícil de hacer bien. Veamos lo que otros dicen.

    
respondido por el wei 07.12.2015 - 22:45
fuente
2
Solution 1.
don't keep logs.
this is the only 100% secure option.

    Problems with this approach 
    1. there are no logs

Solution 2.
Encrypt the data with the user's password as he logs in to the application, 
it decrypts the chat logs and on logout it encrypts and stores the logs again this requires nothing to be passed to the server. 

Problems with this approach 
    1. If the user's password is lost the logs will be unrecoverable.
    2. If the attacker is competent in cryptography he could decrypt the file.
    3. this will not stop the user from copying the data while it is decrypted. 

Solution 3. 
Assuming a field in the database can be created using solution 2 but also have it create a random string, 
then transmit the string to the server on logout encrypt the user's password with the random string, 
then use the encrypted password to encrypt the logs and clear the random string after transmission 
on login read the string decrypts the file generates a new key and overwrite the string on the database.

Problems with this approach 
    1. If the user's password is lost the logs will be unrecoverable.
    2. If the attacker is competent in cryptography and has the resources he could decrypt the file.
    3. this will not stop the user from copying the data while it is decrypted.


Storing something locally, you don't want someone to have access to at some point is inherently risky.

At the end of the day the decision on what solution you want to use comes down to the value of the data 
that is being transmitted someone isn't going to spend time or money trying to decrypt something worth 
only $10 but if its worth say $10,000+ it may be worthwhile and if thats the case investing in storage 
may be the best option.
    
respondido por el Dillon Wright 08.12.2015 - 04:30
fuente

Lea otras preguntas en las etiquetas