Archiviazione sicura della chiave AES con crittografia a chiave pubblica

1

Newbie sicurezza qui

Ho uno script bash che enumera ricorsivamente tutti i file e le directory da un determinato percorso (ad esempio /home/user ) e crittografa i singoli file e li memorizza in un'altra directory (ad esempio /media/backup ) mantenendo la struttura delle directory. Sto usando la crittografia GPG simmetrica chiave (AES 128) per lo scopo.

Ora il problema è che GPG mi chiede di inserire una password per ogni file che deve essere crittografato. Poiché ci sono più file, questo non è fattibile. Quindi le soluzioni che potrei pensare sono -

  1. Chiedi all'utente di inserire la chiave e memorizzarla in una variabile e utilizzare tale variabile nello script per la password (con l'opzione echo $password | gpg ... --passphrase-fd 0 --batch ). L'utente deve memorizzare la password.
  2. Crea una nuova identità chiave pubblica / privata con GPG. Creare un nuovo file di testo contenente la password e crittografarlo con la chiave pubblica di questa nuova identità e memorizzarlo localmente. Ora nello script, decrittografare questo file di password e utilizzare la password così decrittografata. Anche in questo caso, l'utente immette la password della chiave privata (memorizzata) una volta.

Per me, entrambe le soluzioni sembrano simili (l'utente ha il pezzo finale richiesto per decifrare i file). Vorrei sapere se una soluzione è migliore dell'altra, o anche se entrambe sono insicure; e in tal caso quale dovrebbe essere la soluzione ideale.

Il modello di minaccia qui è, se i miei file crittografati e amp; il mio sistema è compromesso e un avversario ottiene l'accesso utente / root al mio sistema, non dovrebbero essere in grado di decifrare i file senza la password memorizzata.

Modifica : la persona che pubblica questa domanda ( link ) afferma che la crittografia simmetrica dei file e quindi la crittografia asimmetrica della chiave è il modo corretto per farlo. Questo implica il # 2 è il modo preferito?

    
posta Abhishek Nagekar 02.09.2017 - 15:57
fonte

1 risposta

1

Nel complesso, la soluzione migliore è 2, ma non solo per le sue proprietà di sicurezza. Ancora di più grazie alla praticità dell'utente. Andiamo oltre perché.

Opzione 1: la password dell'utente (potenzialmente debole) è memorizzata in una variabile e utilizzata n volte, dove n è il numero di file con cui hai a che fare. Archiviandolo in memoria per così tanto tempo potrebbe potenzialmente aumentare il rischio di essere trapelato o compromesso.

Opzione 2: Supponendo di utilizzare un algoritmo di crittografia asimmetrica relativamente veloce (ECC), non ci dovrebbe essere alcuna penalità di tempo per l'utilizzo di questa opzione. Per la crittografia, l'input dell'utente non è necessario in quanto viene utilizzata la chiave pubblica. La chiave privata viene archiviata crittografata, quindi per la decrittografia, l'utente inserisce una chiave una volta per sbloccare la chiave privata. Naturalmente, in questo caso, la chiave privata ha il potenziale di essere compromessa dalla memoria, ma il rischio esiste solo durante la decrittografia.

La domanda principale è questa. Vuoi che il tuo utente inserisca più o meno la sua chiave? Ovviamente la risposta ovvia è meno, e quindi lo schema # 2 è l'opzione migliore.

( Inoltre, considera di eseguire la password dell'utente tramite una funzione di derivazione della chiave (ad es. scrypt o argon2) prima di utilizzarla come chiave di crittografia. )

EDIT:

Apparentemente, ho letto male la tua seconda opzione e ho pensato che stavi usando la crittografia asimmetrica per crittografare i file. In tal caso, consiglierei di usare quello che pensavo avessi voluto dire.

  1. Genera una coppia di chiavi pubblica-privata a curva ellittica.
  2. Cripta la chiave privata (simmetricamente) con una password definita dall'utente che è stata eseguita tramite una funzione di derivazione della chiave.
  3. Sulla crittografia, utilizzare la chiave pubblica per crittografare automaticamente i file utente senza richiedere l'intervento dell'utente.
  4. Sulla decrittografia, la password utente è necessaria per derivare la chiave per decrittografare la chiave privata che sarebbe successivamente utilizzata per decrittografare i dati.

Per garantire la massima riservatezza, autenticità e integrità, utilizzerei qualcosa come crypto_box di NaCl per implementare la mia crittografia.

    
risposta data 02.09.2017 - 16:15
fonte

Leggi altre domande sui tag