Sto lavorando per migliorare un CMS in cui l'attuale implementazione della memorizzazione della password è solo sha1(password)
. Ho spiegato al mio capo che farlo in quel modo è incredibilmente insicuro e gli ho detto che dovremmo passare a bcrypt e lui ha accettato.
Il mio piano era di eseguire tutti gli hash esistenti tramite bcrypt e memorizzarli nel campo della password, e quindi usare il seguente codice psudo per verificare la password: correctPassword = bcrypt_verify(password, storedHash) or bcrypt_verify(sha1(password), storedHash)
.
In questo modo, i nuovi utenti o gli utenti che modificano le loro password otterranno "reali" hash bcrypt, mentre gli utenti esistenti non dovranno modificare le loro password. Ci sono degli svantaggi nel fare questo? Mentre sarebbe probabilmente l'ideale chiedere a tutti gli utenti di scegliere una nuova password, perdiamo molto in termini di sicurezza facendo questo?
Stavo pensando che anche se un utente malintenzionato avesse accesso sia al database che al codice, il cracking non sarebbe sostanzialmente più veloce anche se la maggior parte dell '"input" di bcrypt era una stringa esadecimale di 40 caratteri, poiché la parte lenta ( bcrypt_verify()
) deve ancora essere invocato per ogni tentativo di password su ciascun utente.