Dove conservare una chiave per la crittografia / decrittografia a livello di sistema?

3

Ho un'applicazione web in cui (tra le altre cose) i clienti possono caricare file e gli amministratori possono quindi scaricare quei file. I file caricati sono memorizzati su ServerA e l'applicazione web utilizzata per caricare / scaricare quei file viene eseguita su ServerB .

Mi piacerebbe farlo in modo che mentre i file sono memorizzati su ServerA siano crittografati e che solo l'applicazione web possa crittografare / decodificare, ma la mia preoccupazione è che potrebbe non esserci un modo efficace per archiviare una crittografia chiave, che renderebbe la crittografia dei file principalmente per show.

Mi sono imbattuto in questa domanda / risposta che ha suggerito alcuni buoni modi per archiviare in modo sicuro una chiave, ma penso che quelli più sicuri non si applichino poiché ho bisogno di persone diverse per poter decifrare il file.

Ad esempio, non posso creare una chiave in base alle credenziali dell'utente, perché i clienti devono essere in grado di crittografare tutti gli utenti amministratori devono essere in grado di decifrare (giusto?).

Da quello che posso dire, la mia migliore opzione è quella di memorizzare i file crittografati su un server e memorizzare la chiave di crittografia nel codice sul mio server web, ma questo non sembra particolarmente sicuro. Sembra probabile che se un utente malintenzionato ottiene l'accesso a un server, probabilmente avrà accesso ad entrambi.

La mia domanda - vale la pena di implementare "file crittografati su ServerA" e "chiave di crittografia su ServerB", o mi prenderei in giro per pensare che sia più sicuro? Esiste un modo efficace per crittografare i file in base alle condizioni che ho esposto sopra?

    
posta Abe Miessler 28.05.2014 - 23:11
fonte

4 risposte

3

Il metodo più efficace consiste nell'utilizzare hardware sicuro per archiviare la chiave. È possibile ottenere acceleratori SSL che memorizzeranno ed elaboreranno in modo sicuro le chiavi a bordo in modo da non lasciare mai il modulo hardware sicuro. Relativamente costoso e richiede l'accesso fisico all'hardware (quindi niente VPS o soluzioni cloud).

    
risposta data 29.05.2014 - 22:19
fonte
1

È possibile utilizzare la crittografia a chiave pubblica / asimmetrica, ad esempio utilizzando il programma gnupg. L'amministratore genera una coppia di chiavi pubblica / privata e memorizza la chiave privata da qualche parte in modo sicuro (probabilmente su ServerA ne ServerB). È possibile memorizzare la chiave pubblica ovunque, e in particolare sul server Web, dove verrà utilizzata per crittografare i file caricati. Una volta crittografato, è possibile memorizzare la (versione crittografata dei) file caricati su ServerA o ServerB; in entrambi i casi, senza la chiave privata, non sarà possibile leggerli. Per visualizzare i file, l'amministratore può copiare un file caricato su un computer fidato e quindi utilizzare la chiave privata per decodificare.

    
risposta data 28.05.2014 - 23:40
fonte
0

Un modo per legare le credenziali dell'utente alla chiave è avere una chiave per il file crittografato e crittografare quella chiave più volte con la chiave in base alle credenziali di ciascun utente. Avrai un sacco di piccoli file chiave (uno per utente) e ogni utente che ha accesso può decrittografare la chiave da utilizzare per decifrare il file finale.

    
risposta data 27.07.2016 - 07:20
fonte
0

Supponiamo che gli utenti A, B, C e D vogliano condividere file tra loro su una postazione remota.

Ogni utente genera una coppia di chiavi pubbliche e private (diciamo RSA1024 / 2048 bit).

Ogni utente pubblica la sua chiave pubblica sul server remoto.

Ora diciamo che A vuole condividere un file con B e C, ma non con D.

A creerà una chiave di crittografia simmetrica (diciamo AES-256, simmetrica perché è più veloce). A quindi continuare a crittografare il file con la chiave simmetrica che ha appena creato per quello scopo. Quindi crittografa la chiave 3 volte separate: una volta con la propria chiave pubblica, una volta con la chiave pubblica di B e una volta con la chiave pubblica di C.

A quindi carica il file crittografato e tutte le diverse crittografie della chiave simmetrica sul server remoto.

Il server remoto non sa come aprire questi file e non è necessario.

Quando B chiede il file, riceve il file crittografato e la chiave simmetrica crittografata con la chiave pubblica di B. B ora può andare avanti e aprire il file.

Tieni presente che abbiamo bisogno di una chiave simmetrica diversa per ogni file perché vogliamo controllare la condivisione in base al file.

L'unico problema con questo metodo è che ora A, B, C e D devono mantenere una chiave privata da qualche parte. Se non si desidera che memorizzino la chiave privata, crittografare la chiave privata con una crittografia protetta da password (diversa dalla propria password di accesso) e memorizzare la chiave privata protetta da password sullo stesso server (o diverso). Ora, ogni volta che un utente si collega, dovrà prima scaricare la sua chiave privata protetta da password e aprirla con un'altra richiesta di password.

    
risposta data 21.09.2016 - 20:20
fonte

Leggi altre domande sui tag