Memorizza la password in modo sicuro ma è in grado di controllare i caratteri separati in quella password

0

Sto scrivendo un sistema in cui l'utente deve accedere con due password: una password normale (salata e hash, memorizzata nel database) e una password speciale in cui l'utente deve digitare solo alcune lettere, ad es. "per favore digita la seconda, terza e ultima lettera della tua password".

Come si può progettare quel sistema per supportare la seconda password?

Idea 1: salva la password in testo semplice. Ovviamente no.

Idea 2: Memorizza ogni personaggio separatamente, salato e hash. Cattivo perché se l'attaccante conosce il sale, ci vogliono solo alcune dozzine di tentativi per rinforzare il personaggio.

C'è un altro modo?

Chiarimenti:

Le due password devono essere digitate contemporaneamente, in questo modo:

Gli scopi della seconda password sono:

  • Sconfiggi l'attaccante che guarda da dietro mentre digiti la password o un keylogger.
  • Sconfiggi il gestore della password nel tuo browser, quando qualcuno come il tuo familiare può accedere al tuo account se hai scelto di salvare la password nel browser.
  • Fornire un'alternativa semplice a 2FA quando l'utente non accede a informazioni estremamente sensibili, quindi non li infastidiamo per recuperare il generatore di password monouso hardware (che hanno anche).
posta K48 21.09.2018 - 13:25
fonte

2 risposte

3

Non puoi - almeno non nel software, per ragioni fornite da Matthew.

Se hai una password di cinque caratteri con a-z, questa è 26 * 26 * 26 * 26 * 26 o 11881376 possibilità. Tuttavia, se puoi sondare un personaggio alla volta, è 26 + 26 + 26 + 26 + 26 o 130 possibilità.

Anche per password lunghe e complesse, ciò riduce la quantità di lavoro che deve essere svolto a livelli insignificanti.

Inoltre, è una cattiva sicurezza. Le persone dovrebbero usare i gestori di password, per avere password uniche ovunque. I gestori di password non supportano questo tipo di query. E anche se si tratta di una password digitata, è difficile, dato che molte persone si affidano alla memoria muscolare per inserire le password. Non sarei in grado di darti il terzo carattere della mia password senza digitarlo e controllarlo.

    
risposta data 21.10.2018 - 15:17
fonte
0

Utilizzare un modulo di sicurezza hardware (HSM) che è effettivamente di sola scrittura per la password completa e che genera le parti richieste. Il flusso in questo caso è che l'app chiede all'HSM una fase di verifica, restituisce un insieme di lettere previste e qualche forma identificata per la richiesta, l'utente fornisce tali lettere, l'app le invia all'HSM e l'HSM restituisce "sì" o "no", a seconda che siano corretti. L'HSM dovrebbe richiedere lo stesso set di lettere per quell'account fino a quando l'utente non le fornisce, o l'account è bloccato, per evitare che un utente malintenzionato con una conoscenza parziale della password possa accedere aggiornando fino a quando non ottengono i caratteri. sapere. Questo metodo dovrebbe essere sicuro, dato un HSM affidabile, ma potrebbe anche essere costoso.

La memorizzazione della password in testo normale o dei caratteri singoli con hash consente a un utente malintenzionato di accedere alla tabella del database per trovare la password completa con una quantità di sforzo prevedibile (bassa). Allo stesso modo, l'hashing di ogni gruppo di caratteri determina un piccolo potenziale spazio di ricerca, anche se ogni gruppo è sottoposto a hash con un unico sale (forzare brutalmente tre caratteri non è difficile, anche con un lungo sale, poiché il sale è fisso per ognuno) . Crittografare la password segreta aumenta lo sforzo richiesto, ma solo leggermente: se si utilizza la password iniziale (appropriatamente allungata) come chiave, si sconfigge il concetto di bisogno di due pezzi di informazioni per accedere. Se si utilizza qualcosa che è memorizzato sul server, l'utente malintenzionato ha potenzialmente accesso alla chiave, quindi può ottenere le password.

    
risposta data 21.09.2018 - 14:12
fonte

Leggi altre domande sui tag