Quando ho fatto questo ho spostato del tutto la crittografia dal server web. Fondamentalmente ho avuto il seguente scenario
- Un server di database che memorizza il file
dati crittografati
- Un server web che
esegue l'applicazione e
memorizza / recupera i dati crittografati
- Un server crittografico che esegue il
crittografia e decrittografia e quali
è bloccato
Fondamentalmente il server Web chiama un servizio Web sul server crittografico, che è disponibile solo su una rete interna e dice "Ecco alcuni dati e il tipo di dati". Il server crittografico prende una decisione sulla dimensione della chiave, sulla scadenza della chiave ecc. In base al tipo di dati, lo crittografa con una nuova chiave simmetrica e salta e restituisce un blob binario più un identificatore di chiave. Il server crittografico memorizza quindi la chiave nel proprio database SQL, ma lo protegge prima con un certificato X509, a cui ha accesso solo il servizio crittografico, quindi se si riesce ad accedere al database da remoto è inutile in quanto sarà comunque necessario l'accesso al sistema operativo. per ottenere il certificato X509 per decifrare le chiavi, e in ogni caso i dati sono conservati altrove.
Le password dell'amministratore del server crittografico sono conservate in una "break box" dove servono due persone separate per combinare le loro parti per ottenere la password.
Questo significa che gli sviluppatori non devono preoccuparsi di quali algoritmi utilizzare, o proteggere l'archiviazione delle chiavi poiché sono prese in carico dal server crittografico, e puoi aggiornare gli algoritmi usati come modifiche al processo o nuove regole senza dover per aggiornare qualcosa di diverso dal server crittografico. Solo il processo che esegue l'applicazione Web può chiamare il server crittografico, i normali account utente o persino gli account dell'amministratore non possono. Gli amministratori di database che possono vedere il database Web vedono solo i dati crittografati e non possono accedere neanche alle chiavi.
Anche se il server Web è compromesso, è ancora limitato in ciò che può fare, chiama il server crittografico per ottenere le chiavi, quindi chiama il database di archiviazione dei dati per ottenere i dati a cui i tasti fanno riferimento. Difficile da fare se il compromesso è solo la possibilità di eseguire codice arbitrario, senza sapere come avvengono queste cose o dove si trovano i server sulla rete interna.
Ovviamente se il compromesso è un rooting e l'attaccante può prendere il tuo codice e impersonare i processi, beh, tutte le scommesse sono andate via - ma sarà sempre così.