Memorizzazione del token di reimpostazione della password nel DB: quali sono le implicazioni?

2

In più sistemi che ho creato / supportato Ho visto che la gestione utenti effettua le seguenti operazioni per la reimpostazione della password: generato un token di reimpostazione della password tramite un metodo di hashing e invia tramite e-mail il collegamento con token all'utente. Di solito ci sono bit di informazione inclusi in questi token - ID utente, timbro di sicurezza dell'utente, data, nome del server o chiave del computer (ora sto andando con il framework ASP.Net Identity). Quando l'utente segue il collegamento con token, framework segue lo stesso processo per ricostruire il token e confronta il token con quello fornito dall'utente. Se i token corrispondono, consenti il ripristino della password.

Molte parti del token relative alla macchina del tempo cambiano dal momento della generazione di token al momento in cui l'utente utilizza quel token. Cioè IIS si riavvia e in alcuni casi questo può invalidare il token. Quando l'applicazione web è distribuita su più server (ad es. Web-farm), le probabilità che questo token sia non valido sono più elevate (cioè le chiavi della macchina non sono sincronizzate tra macchine, ecc.).

Ora sto considerando uno scenario in cui memorizzo il token generato nel database, aggiungo un timestamp di generazione. E quando l'utente torna con il token, io non ri-generare il token, ma piuttosto confrontare il token memorizzato, convalidare il timestamp e consentire / disabilitare il reset della password.

Dato che il token ora diventa una password (anche se limitata nel tempo), per una buona misura posso considerarlo come password e solo archivio hash.

Non riesco a pensare a difetti in questo scenario, ma sono sicuro che ce ne siano alcuni. Data l'implementazione di questo scenario è solido, quali altri problemi potrebbero sorgere dall'archiviazione dei token?

    
posta trailmax 06.12.2018 - 16:47
fonte

1 risposta

1

Store (user_id, expiration_time, hash_of_token) . Se la funzione di hash utilizzata è sicura e i token sono imprevedibili (con almeno 128 bit di entropia), non è possibile per nessun altro generare un token valido anche se l'utente malintenzionato ha accesso in sola lettura al database.

In particolare, la funzione di hash deve essere resistente agli attacchi preimage . (SHA-2 e molti altri algoritmi si qualificano.)

Se l'entropia dietro i token generati casualmente è piccola, allora qualcuno con accesso in lettura può eseguire pre-test di forza bruta e potenzialmente recuperare il token. Qualcuno potrebbe anche testare i potenziali token di forza bruta online (soggetti a limiti di velocità) con una probabilità di successo dipendente dalla quantità di entropia dei token e dal numero di token candidati che possono provare.

Gli input min-entropy alti possono essere sottoposti a hash con normali funzioni hash sicure perché è non è possibile testare ogni possibile input. Le password, tuttavia, devono essere sottoposte a hash con un algoritmo di hashing della password dedicato (Argon2) poiché la maggior parte delle password ha un'entropia molto bassa.

Quei campi database, un CSPRNG e una funzione hash resistente agli attacchi preimage sono tutto ciò che è strettamente necessario, ma vedi Ripristino dell'account sicuro reso semplice per ulteriori informazioni.

    
risposta data 06.12.2018 - 23:08
fonte

Leggi altre domande sui tag