Attualmente sto lavorando a un'applicazione web con un significativo rischio per la sicurezza collegato alla sua funzione. Stiamo utilizzando Microsoft Identity Framework per gestire gli accessi degli utenti, con il sistema che impone password e registrazioni complesse con il livello aggiuntivo di conferma dell'email richiesto prima del primo utilizzo.
Abbiamo la sensazione che questo non sia del tutto sufficiente. Uno dei nostri concorrenti utilizza un sistema di login in due fasi con una password seguita dall'inserimento di tre cifre da un PIN a sei cifre da parte dell'utente. C'è un suggerimento che dovremmo copiare questo.
Personalmente, mi sento a disagio nell'implementare una simile soluzione senza una migliore comprensione dei pro e dei contro rispetto alle alternative. Mi colpisce il fatto che una voce di livello dati aggiuntiva, immune dal keylogging, non rappresenti un ulteriore elemento di sicurezza significativo. Sicuramente se un utente malintenzionato ha già una combinazione di e-mail / password, quasi tutti i modi possibili in cui potrebbero averlo ottenuto genereranno il PIN?
L'ovvia alternativa al rafforzamento della sicurezza è l'autenticazione a due fattori tramite SMS. Ciò comporta un costo, ma se la sicurezza è fondamentale, sembra che in realtà aggiunga una protezione significativa al sistema tramite un PIN, che credo aggiungerà quasi a nessuno.
Qual è il punto di avere un'autenticazione PIN extra? Ha qualche vantaggio rispetto all'autenticazione a 2 fattori?
MODIFICA: la soluzione PIN proposta emetterebbe all'utente un numero a 6 cifre generato a caso via e-mail. Quando accedono al sito, devono prima inserire una password (che può, naturalmente, essere archiviata dal browser). In caso di successo, verrebbero quindi contattati per inserire tre cifre scelte a caso tra le sei (cioè immettere il primo, il secondo e il quinto carattere dal PIN) tramite la casella a discesa.
Riflettendoci, immagino che questo almeno impedisca l'accesso non autorizzato tramite qualcuno che si basa su una password memorizzata dal browser.