Password sicura memorizzata sul client

2

Ho il compito di cambiare il metodo di accesso attuale degli utenti in uno più sicuro (al momento tutte le password sono archiviate in chiaro nel database ...).

Il problema è che tutte le password devono essere sulla rete locale del cliente (in quanto dovrebbero essere in grado di funzionare anche senza connessione a Internet), ma dovremmo comunque essere in grado di recuperarle e dirle agli utenti nel caso in cui dimentichino.

Ho provato a spingere per la soluzione standard "hashing and salting + reimpostazione password se necessario", ma è stata giudicata troppo complessa.

Stavo pensando di utilizzare la crittografia asimmetrica, in modo da poter distribuire una chiave pubblica ai clienti e crittografare tutte le password con esso (controllando la password crittografata al momento dell'accesso, come si fa normalmente con gli hash) e mantenere la chiave privata in modo da può eventualmente decrittografare la password se necessario.

Questo è effettivamente sicuro (a condizione che manteniamo la chiave privata per noi stessi) o dovremmo ricorrere a un altro metodo?

    
posta BgrWorker 14.09.2017 - 14:54
fonte

2 risposte

3

Primo: nessuna memorizzazione password.

Memorizzare le password è sbagliato. Crittografia chiara o crittografata, simmetrica o asimmetrica, non importa. Se la password può essere ripristinata, verrà ripristinata.

È necessario memorizzare la password su un modulo con hash sicuro. Usa bcrypt con una quantità ragionevole di round. Troppi giri (100.000) utilizzeranno troppe risorse, troppo pochi (100) renderanno più facile l'attacco di un dizionario o la forza bruta.

Salatura e hashing oltre al ripristino della password non è una soluzione complessa. È più semplice che distribuire una chiave pubblica sul client e proteggere adeguatamente la chiave privata.

E non recuperare le password. Genera di nuovi. Non è difficile. Assicurati solo che il proprietario della password dimenticata possa reimpostare la password. Invio di un collegamento all'e-mail dell'utente o un codice di conferma ai propri telefoni. E non modificare la password finché l'utente non fa clic sul collegamento o accede al servizio di reimpostazione della password con il nome utente corretto e il codice di ripristino.

    
risposta data 14.09.2017 - 15:08
fonte
0

Se desideri (e sei in grado) di memorizzare la tua chiave privata in modo sicuro ed è comunque responsabile della reimpostazione delle password degli utenti, ti suggerisco di fornire un meccanismo in cui puoi inviare una "password di reimpostazione" con firma e privilegi istruzioni per un utente.

Hai detto che parte del caso d'uso era che dovevano essere in grado di resettare mentre offline. Questo sarebbe simile ai meccanismi di licenza, in cui il cliente ti contatterà, verificherà chi sono, useresti la tua chiave privata per emettere un token / licenza / stringa di reset che potrebbero entrare nel software che consentirebbe una reimpostazione della password unica per utente specifico.

Nessuna memorizzazione password, funziona localmente.

    
risposta data 14.09.2017 - 19:12
fonte

Leggi altre domande sui tag