Qual è la migliore pratica per la crittografia e la memorizzazione dei dati temporanei sul client?

1

Ho un sistema client-server, in cui il client è un'app Android. Il client e il server comunicano su HTTP.

Se il server / rete non è disponibile, il client deve memorizzare i dati localmente in un file crittografato e deve riprovare per avviare la comunicazione in un secondo momento, una volta che il server / rete è stato ripristinato.

Esiste un requisito aziendale che questi file locali debbano essere crittografati in qualche modo sul client e, se il client viene danneggiato, l'amministratore deve essere in grado di recuperare i dati dai file crittografati locali. I dati non devono essere crittografati durante l'invio sulla rete.

Mi piacerebbe sapere qual è il modo migliore per crittografare i dati? Ho una soluzione potenziale nella mia mente, ma non sono sicuro, che sia corretto / efficiente o meno:

Cifrò i file con una chiave simmetrica e li condividerò con il server, in modo che possa decrittografarli. Per mantenere la chiave simmetrica in segreto mentre la invio sulla rete, il mio piano è quello di crittografare la chiave simmetrica con la chiave pubblica del server, quindi solo il server sarà in grado di recuperare la chiave simmetrica.

Non voglio re-inventare la ruota, quindi chiunque conosce il modo migliore o più semplice per archiviare e crittografare i dati temporanei sul client, quindi, per favore, condividilo con me. Sto anche cercando il nome del modello di progettazione che risolve un problema del genere se ce n'è uno.

    
posta SaWo 13.02.2018 - 17:04
fonte

2 risposte

0

Se il client deve solo crittografare i dati e la decrittografia non è richiesta sul lato client, puoi semplicemente utilizzare crittografia a chiave asimmetrica e crittografarla al client utilizzando la chiave pubblica e decrittografarla sul server utilizzando il privato chiave.

Se il client ha bisogno di decrittografare i dati (ad es. per elaborazione / presentazione ecc.), allora puoi usare crittografia a chiave simmetrica .

  • Derivazione chiave : puoi utilizzare PBKDF2 per ricavare la chiave dalla password dell'utente

  • Gestione chiave : è possibile derivare dinamicamente questa chiave ogni volta che è richiesta utilizzando la password dell'utente. In alternativa puoi salvarlo in keystore Android .

Nota: tenere presente che la crittografia a chiave asimmetrica è un processo costoso rispetto alla crittografia a chiave simmetrica. La crittografia di file di grandi dimensioni utilizzando la crittografia a chiave asimmetrica potrebbe richiedere una buona quantità di tempo che potrebbe influire sulle prestazioni dell'applicazione.

    
risposta data 23.02.2018 - 03:41
fonte
0

Modellazione delle minacce.

Da chi stai tentando di nascondere i dati? L'utente del dispositivo mobile? Se l'amministratore deve recuperare i dati, perché non tenerli solo sul server?

Se non ti interessa crittografare in rete, non ti interessa la riservatezza dei dati, quindi dobbiamo capire quale scopo commerciale è servito dalla crittografia sul dispositivo, se vogliamo fornire un utile risposta.

Quando parli di una chiave simmetrica protetta da una chiave pubblica, in pratica stai reinventando il codice https (TLS), nel qual caso, basta usarlo al posto di http e lanciare il tuo.

Se il client sceglie la chiave simmetrica, potrebbe decifrare i file localmente, quindi in questo modo non ottieni alcuna protezione e dato che i file non sono crittografati quando originariamente sono inviati in rete, non capisco il valore / requisito aziendale per memorizzarli crittografati sul dispositivo finale. Un utente finale ostile potrebbe semplicemente catturare i file non crittografati così come sono stati inviati.

Se l'OP può approfondire la domanda con il motivo del requisito, potremmo essere in grado di dare un consiglio migliore.

Nel modo più astratto, ciò che descrivi "funzionerebbe", ma in realtà non proteggerebbe nulla in alcun modo significativo.

    
risposta data 13.02.2018 - 19:40
fonte

Leggi altre domande sui tag