Qual è il modo più adatto per crittografare e decodificare i dati sensibili su un disco del server cloud pubblico senza archiviare la chiave di decrittazione sul server in testo semplice?
REQUISITI
Nella nostra app web / mobile SaaS, dopo il login dell'utente, un utente può caricare file PDF contenenti dati sensibili dei clienti su un server cloud pubblico fisicamente ospitato da un fornitore di terze parti (ad esempio Amazon / Rackspace). Vorrei proteggere i dati sul disco crittografandolo prima di scriverlo su disco e decrittografarlo quando viene letto dal disco.
Una soluzione comune è utilizzare la crittografia simmetrica, ad es. AES e per memorizzare la chiave di decodifica sul filesystem del server. Voglio evitare di memorizzare la chiave di decrittografia in chiaro insieme ai dati al fine di proteggere l'accesso ai dati su disco ovunque si trovi all'interno dell'infrastruttura di terze parti - ad es. potenzialmente su più server e dischi fisici (dischi del server, non crittografati su array di dischi di backup di immagine giornalieri) ecc.
Condizioni: Un utente dovrebbe essere in grado di scaricare i PDF che ha precedentemente caricato. Un utente amministratore dovrebbe essere in grado di visualizzare i PDF caricati da qualsiasi utente.
Sto considerando l'utilizzo della password di accesso dell'utente per proteggere le chiavi di decrittografia.
SOLUZIONE POTENZIALE
Durante ogni registrazione utente, una coppia di chiavi pubbliche / private RSA sarebbe stata generata e memorizzata sul disco del server. La chiave privata verrà archiviata AES crittografata con la password dell'utente (in realtà la chiave derivata PBKDF2 in base alla password dell'utente).
Crittografia:
- PDF in testo semplice viene caricato sul server (su SSL)
- Il server genera una stringa casuale (R) per la crittografia AES.
- RSA codifica R utilizzando la chiave pubblica dell'utente. RSA cripta R usando la chiave pubblica dell'utente Admin. # Permette all'utente amministratore di decifrare qualsiasi cosa AES cripta il PDF con R e
- Archivia queste tre parti crittografate nel filesystem.
Decodifica:
- Decrittografa la chiave privata dell'utente utilizzando la propria password di accesso (tramite PBKDF2)
- RSA Decrypt R utilizzando la chiave privata dell'utente.
- AES Decifra PDF usando R e restituiscilo all'utente
In questo modo, se qualcuno ha accesso completo ai dati completi del filesystem, non può decifrare i file PDF a meno che non conoscano anche una password.
D: Questa è una soluzione sicura? Vedi difetti in questo? Esistono alternative adatte che dovrei prendere in considerazione?