Raccomando di passare gradualmente ogni utente al nuovo metodo di hashing della password al successivo accesso. A quel punto, conosci la loro password in chiaro, quindi puoi re-hash con bcrypt e cambiarli in bcrypt. Ciò evita la necessità di un "flag day" o di contattare tutti i tuoi utenti. In effetti, è invisibile agli utenti: i tuoi utenti non devono mai sapere che stai passando ad un nuovo algoritmo di hash delle password.
Più in dettaglio:
-
Aggiungi un altro campo al database per indicare quale tipo di algoritmo di hash è stato utilizzato per calcolare l'hash della password. In altre parole, ci sono due campi associati a ciascun utente: uno per l'hash della password e per indicare l'algoritmo di hashing (SHA512Cng o bcrypt). Inizialmente, l'algoritmo di hash delle password per ogni utente viene inizializzato su SHA512Cng.
-
Quando un utente prova ad accedere, cerca l'algoritmo hash della password per il suo account, hash la password che hanno fornito usando quell'algoritmo e la confronta con l'hash memorizzato. Se non corrisponde, l'accesso viene rifiutato. Se corrispondono, l'accesso è accettato.
-
Inoltre, se l'accesso è stato accettato e se l'algoritmo nel database è SHA512Cng, re-hash la password utilizzando bcrypt, sovrascrive l'hash della password con il nuovo hash bcrypt e modifica l'algoritmo nel database in bcrypt.
Ciò ti consente di passare gradualmente al nuovo algoritmo di hash della password, poiché le persone accedono al tuo servizio.
Facoltativamente, dopo alcuni mesi, se ci sono utenti che non hanno effettuato l'accesso (e quindi hanno ancora hashed le loro password con SHA512Cng), puoi reimpostare la loro password o inviarli via email e richiederli di accedere nuovamente o qualcosa. Tuttavia, in molti casi questo potrebbe non essere necessario.
P.S. Oppure, è possibile utilizzare l'elegante soluzione di Ramhound semplicemente crittografando l'hash della password. Clever!