Crittografia dei file a riposo, considerazioni sulle password

1

Ho al massimo 10.000 file che voglio memorizzare crittografati con uno  password.

L'idea corrente è:

  1. Avere 1 file master contenente parametri (costosi) per scrypt.
  2. Per hash di crittografia / decrittografia una password utente con i parametri specificati e usarla come chiave per crittografia / decrittografia di cifratura simmetrica
  3. Ogni file è preceduto da un nonce casuale crittografico sicuro che è unico (usato una sola volta)

Le mie domande:

È generalmente sbagliato?

È sufficiente una password singola / derivata o

  1. Devo derivare una nuova chiave per ogni file (mi preoccupo del tempo necessario)?
  2. Devo derivare una nuova chiave per una grande quantità di file (ad esempio ogni 100)?
posta Krampenschiesser 22.04.2017 - 18:28
fonte

1 risposta

1

Is this generally wrong?

Vedo due problemi con la tua implementazione:

  1. Uso del prefisso casuale invece di IV

    Questo tecnicamente potrebbe essere fatto ma non è raccomandato o incoraggiato. Consulta questo per più dettagli. Genera un IV casuale per ogni file e salvalo insieme al testo cifrato (come prefisso o suffisso).

  2. Utilizzo della chiave derivata direttamente come chiave di crittografia.

    Nel caso in cui venga modificata una password sarà necessario decodificare e crittografare nuovamente tutti i file. Per risolvere questo problema, dovresti generare una singola chiave di crittografia casuale che verrà utilizzata per crittografare tutti i file. Quindi crittografare questa chiave con una chiave principale derivata dalla password dell'utente e salvarla in un file separato. Quando la password viene modificata (e di conseguenza chiave principale ), decifrierai e cripterai solo il file contenente la chiave di crittografia . Per un esempio di un'implementazione ben nota che utilizza uno schema simile dai un'occhiata a DPAPI e come gestisce i tasti.

Is a single password/derived key enough or

  1. Should I derive a new key for each file (I worry the time it takes)?
  2. Should I derive a new key for a bulk of files (e.g. every 100)?

Dipende da cosa stai difendendo. Considerando i miei commenti sopra, non deriverai ogni chiave di crittografia dalla password dell'utente, ma piuttosto li genererai casualmente da un CSPRNG strong. Se hai una nuova chiave di crittografia casuale per ogni file, dovrai memorizzare la chiave di crittografia crittografata con chiave principale insieme a testo cifrato e IV. Se il file chiave di crittografia è compromesso, solo quel file è compromesso. Devi pensare se è possibile che una sola chiave di crittografia venga compromessa senza compromettere la chiave principale (forza bruta?). Se questo scenario non è probabile o se scegli di non difenderti, puoi utilizzare una sola chiave di crittografia per tutti i file.

Un'altra cosa da considerare quando si utilizza la chiave singola per tutti i file è la grande quantità di dati crittografati con chiave singola prima che sia necessario cambiare la chiave. Per una risposta a questa domanda, vedi questo e questo .

    
risposta data 24.04.2017 - 11:09
fonte

Leggi altre domande sui tag