Questa domanda è un fork di una domanda precedente qui: È sicuro / saggio memorizzare un valore nello stesso campo della password con hash?
Supponiamo che tu esegua un portale web e memorizzi le password negli hash SHA1. Come si aggiorna questo sugli hash BCRYPT?
In genere, attendi che gli utenti effettuino l'accesso e ri-hash le loro password (dal testo in chiaro che hanno inserito) a BCRYPT. Ma potrebbe passare un po 'di tempo prima che tutti gli utenti accedano alla tua piattaforma e ci saranno sempre utenti inattivi che non torneranno mai più.
Una proposta separata (che ho sentito per la prima volta da Troy Hunt) era BCRYPT le password SHA1 esistenti nel database. Effettivamente saresti BCRYPT(SHA1(plaintext_password))
. In questo modo tutti gli utenti del sistema vengono aggiornati a BCRYPT in una sola volta, indipendentemente dalla loro attività.
In questo modo, una violazione del tuo database, non espone gli utenti che non hanno ancora effettuato l'accesso e che si trovano ancora su SHA1.
La domanda è:
- Is
BCRYPT(SHA1(plaintext_password))
è equivalente in sicurezza aBCRYPT(plaintext_password)
- Se non - Perché? E il divario è abbastanza ragionevole da considerare questa opzione?
La domanda si concentra su BCRYPT (SHA1) ma potrebbe facilmente applicarsi a qualsiasi due algoritmi di hash con uno più strong applicato per ultimo.