come gestire le password

0

Quando si implementa un meccanismo di controllo login / password, si dovrebbe verificare se una determinata password è già in uso (sono consapevole che sapere che una data password è già in uso presenta un rischio di tentativi di forza bruta) o forse dovremmo avvisare l'amministratore che una particolare password debole viene utilizzata spesso dagli utenti?

    
posta adam86 26.04.2017 - 20:57
fonte

1 risposta

1

When implementing a login / password checking mechanism, should one check if a given password is already in use

No. In realtà si dovrebbe seguire una regola leggermente diversa: quando si implementa un meccanismo di controllo login / password, si dovrebbe non essere in grado di recuperare le password, solo verificarle.

Per ottenere ciò, ecco cosa devi fare:

  1. Scegli una funzione di hashing della password lenta. Argon2 sarebbe l'ideale, se non puoi usare questo (o desideri fare una scelta più prudente), scegli uno dei seguenti bcrypt o PBKDF2 .
  2. Genera un salt casuale, unico per utente (dovrebbe essere univoco per utente , questo è importante).
  3. Applica la funzione di hash che hai scelto per la password + sale, come descritto nella relativa documentazione. Solitamente questo sarà semplicemente H (sale || password) o H (password || salt), ma segui la documentazione per la funzione scelta.
  4. Salva il risultato e il sale nel tuo database, insieme all'identificatore dell'utente.

Pepper è appena stato menzionato nei commenti. Puoi anche generare un carico globale di spazzatura casuale per il tuo sito e cancellare le tue password in questo modo: H (pepe || sale || password). Conservare sia il pepe che il sale. Pepper ti offre un'ulteriore resistenza contro ogni tipo di attacco da tavolo arcobaleno e un'ulteriore resistenza contro ogni tipo di attacco di forza bruta. Vedi Password Hash aggiungendo sale + pepe o sale abbastanza?

Per verificare qualsiasi password, basta ripetere questo processo con la password inviata. Alla fine, il risultato dovrebbe essere lo stesso, se non lo è, fallire il login.

Che cosa ti compra:

  1. Se il tuo database viene rubato, le tabelle arcobaleno non funzioneranno (grazie al sale).
  2. Se il tuo database viene rubato, la bruteforcing impiegherà molto tempo (grazie alla lenta funzione hash).
  3. Se il tuo database viene rubato, non c'è modo più semplice della forza bruta, grazie al fatto che stai utilizzando una funzione di hash e non una crittografia a chiave segreta. dovresti presumere che se il tuo database può essere rubato, anche la tua chiave segreta può essere utilizzata per decrittografare le tue password.

Per migliorare la qualità della password, è possibile rifiutare determinate password. Ad esempio:

  1. Imposta una lunghezza minima della password di un importo accettabile. Alcuni diranno 8 caratteri; personalmente vorrei sbagliare sul lato della cautela e dire 12 caratteri.
  2. Fai non imposta un limite superiore o imposta uno ragionevole, ad esempio 63 caratteri. Gli utenti che utilizzano password di 32 caratteri di ascii stampabili generati casualmente si stanno aiutando in modo massiccio e non dovresti arrestarli arbitrariamente o intralciare l'utilizzo del gestore di password.
  3. Richiede alcune combinazioni ragionevoli di lettere, numeri e segni di punteggiatura. Quando si impostano requisiti di complessità, prima leggi questa risposta .
  4. Non impostare una scadenza regolare della password. Ciò incoraggerà tutti i tipi di comportamenti scorretti negli utenti, con un beneficio molto limitato.
  5. Incoraggiare le password migliori con un indicatore di "qualità della password".

Per migliorare la sicurezza generale del sistema, prendere in considerazione l'implementazione dell'autenticazione a due fattori per gli account. Yubikeys (U2F) sono poco costosi e semplici per gli utenti di Google Chrome (e forse presto Firefox); Anche il TOTP è buono. L'autenticazione via SMS è considerata dubbia a causa della vulnerabilità delle reti mobili alla manomissione e intercettazione della consegna di SMS.

    
risposta data 26.04.2017 - 21:38
fonte

Leggi altre domande sui tag