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:
-
Quando un utente si registra generiamo per lui una chiave privata pubblica, la chiave privata è chiamata chiave principale qui.
-
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.
-
I dati caricati vengono inviati a DPU, decodificati, elaborati e crittografati di nuovo.
-
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.
-
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.
-
L'app client decodifica la chiave con la chiave privata della sessione del client e la risposta viene decodificata con la chiave dati.
Preoccupazioni:
-
Questo modello è teorico fin d'ora, è possibile?
-
Chi genera queste chiavi (chiavi di sessione, chiavi dati), gli sviluppatori (Java e Python) generano queste chiavi e dove le memorizziamo?
-
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?
-
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.