Bene, suggerirei BCrypt su PBKDF2.
Detto questo, la soluzione dovrebbe essere duplice.
-
Per proteggere immediatamente il sistema, sì la soluzione è buona. Considera MD5 come password di input, e disponi di sale per utente come suggerisci.
-
Suggerirei di migrare MD5 fuori dall'immagine. (a meno che non si tratti di un'applicazione strettamente legacy)
La prossima volta che l'utente effettua l'accesso, la tua applicazione avrà accesso alla password unshed e avrà la possibilità di aggiornare l'hash con una che salta il passo MD5. Dovrai avere un indicatore sull'account se questo è stato completato.
Vorrei anche raccomandare Pepper in sospeso alla password di input (o MD5) come ulteriore precauzione di sicurezza.
BCrypt ha una lunghezza massima per le password, quindi è meglio inserire prima la password di input combinata con Pepper in un hash SHA-256. Non sono sicuro che PBKDF2 abbia questo limite. Alla fine potresti un giorno utilizzare un hash ancora più recente che non ha nemmeno questo limite.
Sapete, in realtà, la migrazione da MD5 non è probabilmente necessaria, ma sbarazzarsi di MD5 sarebbe la soluzione ideale per la migliore resistenza alle collisioni e sembra solo un design più pulito.