Sto lavorando su un sistema che deve mantenere i dati sicuri e non accessibili alle persone senza accesso autorizzato. Il client è un'app Web che comunica con i server tramite API. Questo è quello che ho finora:
__________ _____________ __________
| Server | | Server | | Server |
| (Keys) | | (Web Files) | | (Data) |
|__________| |_____________| |__________|
| | |
SSL SSL SSL
| V |
| __________ |
---------------> | Client | <---------------
|__________|
- Server (file Web) server i file statici
- Server (dati) si collega a DB (dati) e server i dati crittografati
- Server (Chiavi) si connette a DB (Chiavi) e serve la chiave dati dell'utente
Il processo sarebbe:
- Il client riceve i file statici dal server (file Web) tramite SSL
- Il client si autentica usando Username / Password con Server (Chiavi) e ottiene la loro chiave di dati tramite SSL
- Il client si connette al server (dati) e ottiene i dati crittografati tramite SSL
- Il client decodifica i dati utilizzando il codice dati acquisito
- Il cliente modifica i dati
- Il client crittografa i dati utilizzando la chiave dati acquisita
- Il client invia i dati modificati crittografati al server (dati) tramite SSL
In questo modo ogni server è isolato, ma se qualcuno ottiene l'accesso al Server (Chiavi), può lavorare per decifrare i dati in Server (Dati). C'è un modo per rendere questo più stretto, così come se uno dei server o dei DB è compromesso, non comprometterebbe la sicurezza dei dati? La configurazione corrente è comoda ma non impostata in pietra.
Modifica
- La libreria personalizzata e offuscata di crittografia / decrittografia è fuori dalla finestra.
- I dati sarebbero informazioni private e la loro sicurezza è imposta dal governo con la molto ampia e vaga "Le informazioni private dovrebbero essere protette contro la fuoriuscita e l'accesso non autorizzato".
- Fino ad ora, il sistema era isolato ed era gestito all'interno di una rete chiusa, localmente (con lo stesso design). Ora dobbiamo consentire un ampio accesso remoto.
- Se consegniamo la chiave di crittografia agli utenti del client, diventano responsabili della sua sicurezza e se la perdono, i dati diventano inaccessibili. Se è necessario essere in grado di recuperare i dati, è necessario salvare la chiave anche sui nostri server (magari crittografandola con una chiave master e rendere il processo manuale di recupero, anziché automatico).
- È tornato al tavolo da disegno.