Come gestire la crittografia end-to-end [chiusa]

1

Sto lavorando su un'app in cui l'obiettivo è caricare i dati utente, archiviarli, elaborarli su tali dati e presentarli all'utente quando richiesto. Vogliamo seguire il modello di crittografia end-to-end in cui il sistema non ha modo di decrittografare i dati caricati da un utente. Non ho affrontato la sicurezza in questo modo prima e nell'architettura presentata ho alcune domande / dubbi che voglio condividere con tutti voi.

Metodi:

  1. Quando un utente si registra generiamo per lui una chiave privata pubblica, la chiave privata è chiamata chiave principale qui.

  2. Quando un utente aggiunge informazioni, lo crittografiamo utilizzando la chiave di sessione. Solo l'unità di elaborazione dati (DPU) del nostro sistema dovrebbe essere in grado di decodificare questi dati. Poiché la dimensione dei dati potrebbe essere maggiore di RSA-3072, i dati vengono prima crittografati utilizzando AES-256 e quindi crittografati con la chiave di sessione RSA.

  3. I dati caricati vengono inviati a DPU, decodificati, elaborati e crittografati di nuovo.

  4. Quando l'utente vuole accedere a queste informazioni, crittografare la chiave master con la chiave di sessione e inviarla a DPU per decrittografare tali dati.

  5. Post decryption DPU raccoglie tutti i dati richiesti, genera una nuova chiave dati, crittografa la risposta utilizzando questa chiave dati, crittografa la chiave dati con la chiave pubblica della sessione del client e assembla sia la chiave crittografata che la risposta e la restituisce.

  6. L'app client decodifica la chiave con la chiave privata della sessione del client e la risposta viene decodificata con la chiave dati.

Preoccupazioni:

  1. Questo modello è teorico fin d'ora, è possibile?

  2. Chi genera queste chiavi (chiavi di sessione, chiavi dati), gli sviluppatori (Java e Python) generano queste chiavi e dove le memorizziamo?

  3. C'è una biblioteca che possiamo usare per semplificarci la vita? Ancora una volta, non vogliamo che il nostro sistema sia in grado di accedere ai dati dell'utente senza la chiave master dell'utente che si trova sul suo dispositivo. Prevediamo di utilizzare AWS Cognito per l'autenticazione e l'autorizzazione e, per quanto ne so, non fornisce alcuna chiave di sessione, quindi come possiamo ottenere ciò che è menzionato?

  4. L'invio di una chiave privata via cavo per decrittografare i dati è una buona idea?

So che ci sono molte informazioni per favore fatemi sapere se avete altre domande, in attesa di suggerimenti / commenti.

    
posta APZ 20.09.2018 - 14:47
fonte

2 risposte

2

La crittografia End to End si ha quando 2 sistemi comunicano attraverso una terza parte e questa terza parte non può decodificare il contenuto. Come l'app di chat Signal, o Whatsapp, o quando si cripta la tua e-mail con la chiave pubblica del destinatario prima di inviarla. In questo caso, il messaggio lascia il tuo sistema crittografato e nessuno ma il destinatario può decrittografarlo e leggerlo.

Il tuo caso può essere risolto utilizzando i certificati TLS e lato client. Quando l'utente si registra, lascia che crei i propri certificati (sulla tua app) o invii un server sul lato creato e utilizza questo certificato su ogni comunicazione. Creare un certificato per DPU e crittografare i dati lato client utilizzandolo. In questo modo solo la DPU e il client possono accedere ai dati.

    
risposta data 20.09.2018 - 16:50
fonte
0

Quello che stai descrivendo non è la crittografia end-to-end (e2ee). In effetti, e2ee non è generalmente possibile quando i dati vengono elaborati, poiché i tuoi server non avrebbero accesso ai dati.

Ciò che descrivi è difficile da seguire e sembra inutile. Se l'attaccante compromette uno dei due server, può accedere ai dati. Se sei preoccupato per il transito tra i server, puoi utilizzare TLS standard. Se sei preoccupato per i dati a riposo, puoi utilizzare FDE o uno schema di crittografia a cricchetto (se desideri che il client sia in grado di decrittografarlo solo dopo l'elaborazione).

In ogni caso, non ha senso eseguire la crittografia mentre la descrivi prima che i dati vengano elaborati.

    
risposta data 20.09.2018 - 16:38
fonte

Leggi altre domande sui tag