Come implementare la reimpostazione della password per un gestore di password

7

Come potrei implementare al meglio una funzionalità di reimpostazione della password per un gestore di password? Al momento sto salvando una password master hash + + salata, che è stata sottoposta a hash con PBKDF2 e crittografando le password con la password principale stessa, tuttavia se un utente ha perso la sua password principale significa che le password non possono essere decodificate.

Ho pensato di salvare una versione delle password crittografate con la password principale e una versione crittografata con l'email degli utenti + un token casuale generato quando l'utente crea il suo account, ma sarebbe sicuro? C'è qualche pratica migliore quando si fa questo?

Anche l'email dell'utente viene memorizzata come hash.

Quindi, per chiarire la mia domanda, ci sono delle best practice per il recupero dei dati crittografati con una password se quella password è persa?

Modifica

La mia idea attuale è generare una seconda chiave per crittografare tutte le password e crittografare questa chiave in un'immagine attraverso la steganografia che l'utente può memorizzare su un usb, ma tutte le password verranno salvate due volte nel database (crittografate entrambe le volte), quindi non so se questo è un rischio o meno.

EDIT 2

Versione finale, con l'aiuto della risposta di @ A.Hersean.

Creerò una chiave con cui tutte le password sono crittografate e questa chiave può essere crittografata con una password e una password di backup (che viene salvata all'interno di un'immagine) e quelle due crittografie della chiave verranno quindi salvate al database.

    
posta Dennis van Gils 07.03.2017 - 17:28
fonte

3 risposte

6

Per rispondere alla tua domanda "Quindi, per chiarire la mia domanda, ci sono delle best practice per il recupero dei dati crittografati con una password se quella password è persa?", la migliore pratica è che non si recuperano dati criptati quando si perde la password . Poiché il punto di crittografia non è in grado di decifrare senza la password, la possibilità di fare altrimenti indebolirà il tuo schema di crittografia. Quindi devi assicurarti di non perdere la password in primo luogo, ad esempio scrivendola e mettendola in una cassastrong.

Per la tua domanda "una versione crittografata con l'email degli utenti + un token casuale generato quando l'utente crea il suo account, ma sarebbe sicuro?", la risposta è no, non sarebbe sicuro. Poiché dovrai salvare il token (e l'indirizzo email o il suo hash), equivale a salvare la password in testo non crittografato.

Se hai bisogno di flessibilità, non crittografare i dati con una password. Cripta i tuoi dati con una chiave di crittografia generata a caso, quindi cripta questa chiave con una password e salva la chiave nel suo formato crittografato. È quindi possibile crittografare la chiave con altre password e salvarla anche, forse altrove (in un vault). Tieni presente che la forza risultante della crittografia sarà quella della password più debole utilizzata.

    
risposta data 09.03.2017 - 09:38
fonte
2

Quando si ricava una chiave dalla password dell'utente, non esiste un modo semplice per ripristinare la funzionalità della password. Consulta questo e questo per un esempio di un'implementazione ben nota e come viene risolto un reset della password.

Molte implementazioni hanno funzionalità di chiave di ripristino nel caso in cui la chiave master sia persa (o dimenticata nel tuo caso). BitLocker è un esempio.

Potresti prendere in considerazione la creazione di una chiave di reimpostazione della password e inviarla all'e-mail utente al momento della registrazione. Questo può essere compromesso se l'e-mail dell'utente viene hackerata.

Un'altra opzione è quella di avere la chiave di ripristino condivisa (utilizzando ad esempio l'algoritmo Sharing Secret Sharing ) tra due o più utenti / amministratori quindi, in caso di ripristino, sono necessarie più parti per reimpostare la password per un determinato utente. Qualcosa di simile è fatto in Vault .

Credo che non esistano best practice specifiche solo alcune implementazioni ben note. Tutto dipende dalle tue esigenze di progettazione.

    
risposta data 08.03.2017 - 11:01
fonte
2

Questo è essenzialmente un seguito alla risposta di @ MarkoVodopija. La logica alla base del recupero della password per la crittografia è solo per memorizzare la password o la chiave in un posto sicuro , perché solo una backdoor o un difetto importante nel software di encrytion può consentire leggi i dati senza la chiave

A seconda di ciò che accetti come sicuro porterà a soluzioni diverse. Oltre a quelli proposti da Marko hai:

  • scrivilo su un foglio e conservalo in un involucro sigillato in una cassastrong fisica. Era una buona pratica per le password di amministrazione, ed è davvero un metodo a prova di proiettile ... se puoi fidarti di tutti i possessori della chiave sicura.
  • condividerlo con qualcuno di cui ti fidi e fidarti di lui per non dimenticarlo ... Ma questo è più appropriato per i segreti condivisi, e se pensi di poterlo dimenticare, perché l'altro non potrebbe dimenticarlo anche tu?
  • in una rete aziendale Microsoft, è comune che la chiave utilizzata per le cartelle crittografate sia crittografata una volta con la chiave privata del proprietario e una volta con una chiave accessibile di amministratore di rete per consentire all'amministratore di sistema di sbloccare le cartelle se il dipendente partire senza prima dare tutto a qualcun altro - in caso di incidente, per esempio.
risposta data 09.03.2017 - 10:07
fonte

Leggi altre domande sui tag