Diciamo che abbiamo un database con nomi utente e password, in cui le password sono ingenuamente protette usando un singolo round di SHA-1 (come era una buona pratica un po 'di anni fa).
Ora, diciamo che desideriamo aggiornare la sicurezza dello spazio di archiviazione delle credenziali, ma gli utenti devono rimanere beatamente inconsapevoli del fatto che qualsiasi cambiamento si sta verificando.
Ovviamente, non abbiamo le password in chiaro, ma sto considerando di considerare lo sha1 (password) come se fosse la password in chiaro, e sicuro anche per quello.
Ecco il mio pensiero:
- Genera salt random per utente (128 bit)
- Sostituisci
"username","sha1(password)"
nel database con"username","salt","bcrypt(salt,sha1(password)),iterations=20000"
- Modificare il codice di convalida per convalidare le password eseguendo prima sha1, quindi bcrypt il risultato con il sale n volte, quindi controllare.
Ci sono errori evidenti in questa strategia?
Anche se non è perfetto, è ragionevole dire che questo migliora notevolmente la sicurezza delle password degli utenti, in caso di violazione?