Come può funzionare uno schema di autenticazione Web basato su PIN?

3

Sono interessato all'implementazione dell'autenticazione basata su PIN per un'applicazione Web, simile a quella fornita da Facebook nel loro sito Web mobile.

Ecco il flusso utente:

  1. L'utente visita il sito per la prima volta in un nuovo browser e inserisce nome utente & password al prompt.
  2. All'utente viene richiesto di creare un pin a 4 cifre.
  3. Nelle visite future al sito solo dallo stesso browser l'utente può autenticarsi semplicemente inserendo il pin a 4 cifre.

Effettuando il debug di Facebook in un browser Web, posso vedere che il server restituisce un nuovo "nonce" dopo che l'utente ha impostato il PIN e dopo ogni accesso basato su PIN riuscito. Questo nonce è memorizzato nel browser. Quando l'utente tenta un accesso basato su PIN, il nonce memorizzato e il PIN vengono inviati al server per la convalida.

Quello che non so è cosa accadrà probabilmente sul server.

  1. Che cosa potrebbe memorizzare il server? Un hash del nonce + PIN?
  2. In che modo il server può convalidare i tentativi di accesso PIN?
  3. Esistono implementazioni di riferimento per un sistema come questo che potrei esaminare?
  4. Supponendo che il contenuto memorizzato nel browser non sia stato preso da un utente malintenzionato, è possibile che questo sistema sia almeno altrettanto sicuro dell'autenticazione con nome utente / password tradizionale? In caso contrario, quale tipo di attacco sarebbe più vulnerabile a?
posta Jonathan Schoeller 29.02.2016 - 12:48
fonte

1 risposta

3

La tua domanda sembra riguardare entrambi, cosa fa Facebook e cosa potrebbe essere fatto. Non so cosa faccia l'FB, ma posso provare a fare delle buone ipotesi su ciò che rende un sistema sicuro. Spero che questo aiuti.

Fammi provare a riformulare ciò che Facebook sta facendo. I siti in genere supportano un singolo fattore di autenticazione , qualcosa che conosci (ovvero: la tua password ). I siti che supportano la funzionalità "ricordami", usano il fattore qualcosa che hai (il "qualcosa" è il cookie nel tuo browser). Questo può essere più debole dato che chiunque abbia accesso al tuo browser, anche a un utente malintenzionato remoto, può ora accedere come te. Ma non dover digitare la password ogni volta che accedi a un sito, soprattutto se hai una password complessa, è una seccatura. Quindi Facebook sta scegliendo una via di mezzo, fondamentalmente con una funzione "ricordami di due fattori" in cui ti serve il nonce ( qualcosa che hai ) e il tuo PIN ( qualcosa che conosci ).

  1. What might the server be storing? A hash of the nonce + PIN?

È molto probabile che Facebook stia memorizzando un hash del nonce + PIN. Nota che questo potrebbe essere un hash semplice e sicuro invece di qualcosa come la più complessa funzione di memorizzazione della password di bcrypt. Un hash come SHA512 è irreversibile quando viene utilizzato su stringhe di dati casuali di grandi dimensioni e crittograficamente. Il nonce è (presumibilmente) un numero casuale.

  1. How might the server be validating PIN login attempts?

Il server semplicemente ripristina l'hash e lo confronta con il campo appropriato nel database.

  1. Are there any reference implementations for a system like this that I could look at?

Non che io sappia, forse altri possono aiutarti.

  1. Assuming that the content stored in the browser is not taken by an attacker, is it possible for this system to be at least as secure as traditional username/password authentication? If not, what kind of attack would it be more vulnerable to?

Se rendiamo quell'assunzione veramente grande e infondata , questo sistema è più sicuro del normale uname / pwd in quanto ciò ha l'effetto di rendere la password la concatenazione di un numero casuale crittograficamente sicuro, il nonce e il PIN. Le password di numeri casuali crittograficamente sicure sono molto forti.

Ma, nel mondo reale, i dati del browser non possono mai essere considerati sicuri, quindi la sicurezza di questo meccanismo si riduce alla sicurezza del PIN e del nonce. È difficile da concretizzare. Questo è sicuramente più sicuro della semplice funzionalità "ricordami". Se i dati del tuo browser sono ragionevolmente sicuri, questo potrebbe essere più sicuro delle password standard. In caso contrario, le password standard potrebbero essere più sicure. In quasi tutte le situazioni, questo batte le password deboli a causa del fattore qualcosa che hai .

Alcuni punti di nota:

  • Il server deve eseguire l'hash. Se il client dovesse eseguire l'hash, una tabella di database rubata potrebbe essere utilizzata come credenziali di accesso. Questo non può accadere con il server che esegue l'hash perché l'hash è irreversibile.
  • È possibile aggiungere ulteriore sicurezza utilizzando una funzione di memorizzazione della password come bcrypt anziché un hash standard. Questo è necessario solo se usi un nonce più breve. Gli attacchi più lunghi forniranno una protezione sufficiente contro un attacco di forza bruta, anche con un semplice SHA512 (o simile) in uso.
  • Penso che abbia senso registrare i tentativi falliti di login con il PIN e, dopo aver detto 3 tentativi falliti, cancellare il login del PIN dal database e forzare l'utente ad accedere con la propria password. Ciò fornisce molta protezione contro la ricerca di un dizionario per il PIN, anche a fronte di un nonce trapelato, in quanto il PIN sarà reso inutilizzabile. Anche se l'utente riutilizza lo stesso numero di un nuovo PIN al successivo accesso, riceverà un nuovo nonce che un utente malintenzionato dovrà rubare per provare più possibilità PIN.
risposta data 29.02.2016 - 19:37
fonte

Leggi altre domande sui tag