Come posso rendere illeggibili i dati memorizzati localmente a meno che non sia connesso (connesso) al server?

0

Ho un'applicazione di chat costruita in Java. L'app di chat memorizza un registro delle chat dell'utente Jimmy localmente sulla sua macchina.

Voglio che questo registro della chat sia crittografato, quindi se qualcuno usa il computer (autorizzato o non autorizzato) non può semplicemente leggere tutte le chat di Jimmy. Vorrei che le chat di Jimmy fossero leggibili solo quando Jimmy ha effettuato l'accesso. Non appena si disconnette, le chat dovrebbero essere crittografate e illeggibili.

Qualche idea su come questo tipo di schema potrebbe essere implementato?

    
posta Curious1 07.12.2015 - 22:31
fonte

2 risposte

2

Ok, non sono esperto in questo. Forse altri possono aggiungere. Ma dalla tua descrizione, questo è quello che posso inventare.

  1. login.
  2. server emette una chiave, K.
  3. Il client
  4. tiene in memoria K per crittografare il disco di log e decrittografare qualsiasi registro letto in memoria per la visualizzazione.
  5. quando il client tenta di disconnettersi o disconnette, la chiave K viene cancellata dalla memoria.

In questo modo, il client non avrebbe alcuna chiave per decrittografare nulla in assenza di una sessione attiva, come la disconnessione accidentale oltre al logout. Qui, presumo che la chiave K venga inviata in modo sicuro attraverso qualcosa come TLS.

Tuttavia, lo schema di crittografia è sempre difficile da ottenere. Vediamo cosa dicono gli altri.

    
risposta data 07.12.2015 - 22:45
fonte
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.
    
risposta data 08.12.2015 - 04:30
fonte

Leggi altre domande sui tag