Password utente come chiave di crittografia offline

3

Desidero memorizzare un file crittografato sul dispositivo dell'utente per l'accesso offline. Dal momento che non hanno una connessione internet, non possono accedere con il loro nome utente / password e ricevere una chiave segreta, quindi il mio pensiero è che potrei ricavare una chiave direttamente dalla loro password. Stanno usando un dispositivo non Windows, quindi non può usare qualcosa come DPAPI.

Lo schema è essenzialmente: la password dell'utente viene eseguita attraverso una funzione di derivazione della chiave come pbkdf2 per ottenere una chiave di forza accettabile. Questa chiave viene utilizzata per crittografare il file localmente e può essere generato al volo quando offline, inserendo l'utente nella sua password.

Domande:

1) Puoi eseguire un miliardo di iterazioni di pbkdf2, ma se la loro password è un singolo carattere non sarà di grande aiuto. Questo cambia se esiste un criterio password obbligatorio che garantisce almeno password relativamente corrette?

2) Tecniche di generazione di chiavi alternative?

3) Pensieri / suggerimenti generali?

4) Fornisce un metodo di attacco offline per ottenere la propria password per il servizio che ha accesso a molto più del semplice file. Sembra che questo aggiunga un rischio sostanziale. Pensieri?

    
posta Gerald Oswald 06.11.2015 - 22:51
fonte

1 risposta

1

Mi sembra giusto. Risponderò alle tue domande e aggiungo alcuni pensieri:

1) You can run a billion iterations of pbkdf2, but if their password is a single character it won't help much. Does this change if there is a mandatory password policy that ensures at least relatively sane passwords?

Personalmente odio le norme sulle password, ma non sono il tuo utente medio. Potresti considerare di avvertirli (dicendo che 8 caratteri non-dizionario è una password ragionevole), ma altrimenti lasciali liberi di fare quello che vogliono. Forse quando provano a usare una password di 3 caratteri o meno, dai un pop-up in corso "quello che fa schifo, vuoi forse lasciare il file non cifrato invece? [Y / n]";)

2) Alternative key generation techniques?

Per alcune idee, vedi Come password di hash sicure? . Non sono strettamente funzioni di derivazione chiave, ma penso che puoi usare cose come scrypt e bcrypt allo stesso modo.

4) This gives an offline attack method to get their password for the service which has access to a whole lot more than just this file. Seems like this adds substantial risk. Thoughts?

Buon punto! Dà via cracking offline, ma solo per un utente. Nel caso in cui il file della password venga rubato, l'autore dell'attacco potrebbe probabilmente modificare il dispositivo per includere comunque un keylogger.

3) Overall thoughts/suggestions?

  • Oltre a una funzione di derivazione chiave, guarda anche come crittografare il file. Ti consigliamo di utilizzare la crittografia autenticata o, per lo meno, una modalità di crittografia a blocchi (ad esempio, non utilizzare ECB).

  • È anche possibile crittografare il file con una chiave generata a caso (utilizzando un CSPRNG) e quindi crittografare quella chiave con la password dell'utente. Se l'utente vuole cambiare la password, può farlo senza ricodificare tutti i dati. Devi solo crittografare nuovamente la chiave.

  • Agli utenti non piace quando non c'è l'opzione "Ho dimenticato la password". Sono favorevole a dire "questo è il modo in cui ogni servizio di archiviazione di file dovrebbe funzionare comunque, quindi smettila di lamentarti", ma questo è semplicemente inaccettabile per molte aziende. Puoi cifrare la chiave (vedi il mio punto precedente) non solo con la password dell'utente, ma anche separatamente con la tua chiave pubblica. Quindi la funzione di reimpostazione della password può utilizzare la chiave privata (memorizzata solo sul server) per decodificare la chiave e consentire la reimpostazione della password. Ciò significa anche che hai accesso ai dati dell'utente,

risposta data 06.11.2015 - 23:10
fonte

Leggi altre domande sui tag