Come sostituire un vecchio metodo di hashing della password con uno più recente nel software? [duplicare]

21

Il software sviluppato dalla nostra azienda ha appena superato un controllo di sicurezza. Gli auditor hanno segnalato il nostro uso di MD5 per le password di hashing che gli utenti possono impostare se desiderano una password sui loro file. Avendo guardato dentro, sembra che dovrei sostituirlo con PBKDF2.

Ma per rimuovere tutti i metodi di hashing MD5 dal software, questo significherà che gli utenti dovranno perdere temporaneamente tutte le loro password? In questo modo, dovremo comunicare ai clienti che se si aggiornano, tutti i loro file non saranno protetti da password? Voglio dire, posso verificare che un vecchio hash esiste e costringerli a impostare manualmente una nuova password, ma la password potrebbe essere impostata da chiunque sembrasse una specie di grosso difetto. Se un utente malintenzionato ha accesso al proprio file e alla nuova versione del nostro software, otterrà l'accesso al file senza password.

    
posta robertkroll 01.06.2015 - 09:47
fonte

3 risposte

33

Questo è un problema comune.

La solita risposta è duplice:

  • Per gli utenti che non hanno effettuato l'accesso dopo la modifica: utilizza il vecchio valore di hash come input per il nuovo schema di hashing.
  • Ogni volta che qualcuno accede dopo la modifica: utilizza la nuova password direttamente come input per il nuovo schema di hashing.

Utilizza una colonna aggiuntiva nella nuova tabella per indicare come è stato calcolato il nuovo hash.

Ulteriori letture

risposta data 01.06.2015 - 10:12
fonte
8

Perché non eseguire un PBKDF2 sull'output dell'hash MD5? L'hash risultante dovrebbe essere ancora valido e può essere utilizzato per convertire i vecchi hash in una nuova volta senza richiedere reimpostazioni di password dagli utenti o compromettere gli utenti precedenti.

Si noti che il resing hash è sicuro almeno quanto il PBKDF2 e non dovrebbe essere significativamente più costoso del semplice PBKDF2 (essendo MD5 facile da cacolarlo perché è una cattiva idea usarlo). Dovresti essere in grado di spiegare / segnalare che questo è un modo sicuro di gestire le cose nel codice se hai paura che riceverai avvertimenti su di esso in futuro.

Si noti che è possibile combinare questo metodo con il metodo StackzOfZtuff come un modo per mantenere le password utente che non sono state ancora aggiornate, salvando la password di un utente quando si connettono a PBKDF2 ma per ora cambiandole in PBKDF2 (MD5) come un modo per mantenere le password degli utenti al sicuro per ora.

    
risposta data 01.06.2015 - 11:50
fonte
1

L'abbiamo appena implementato - passando da hash salati md5 a blowfish (tramite l'API di password PHP ).

Abbiamo gestito la migrazione inserendo un flag nel database - se il flag non è impostato, quel record sta ancora usando il md5 salato. Autentichiamo con il vecchio metodo, quindi eseguiamo nuovamente il nuovo metodo. Stiamo implementando una politica in cui, dopo una correzione dalla versione di produzione di questo nuovo metodo, gli account che utilizzano il vecchio algoritmo avranno svuotato il campo della password, richiedendo l'impostazione di una nuova password e bloccando l'accesso finché non verrà ripristinato.

Una cosa carina del modo in cui l'API della password PHP funziona è che la stringa restituita dalle funzioni di hashing contiene informazioni su come è stato sottoposto a hashing (quale metodo crittografico, parametri per il metodo e un salt), insieme all'hash tutto in una stringa. Questa strategia significa che possiamo cambiare il metodo e i parametri di crittografia in un file di configurazione, e l'API fornisce una funzione che confronta la configurazione con i parametri nel valore corrente memorizzato, informandoti se è necessario un rehash ai nuovi parametri.

    
risposta data 02.06.2015 - 01:25
fonte

Leggi altre domande sui tag