Salva la lunghezza della password dopo l'hash per ridurre al minimo il calcolo

3

Leggendo questo argomento Quanto è critico mantenere la lunghezza della password segreta? mi viene in mente lo scenario seguente:

Supponiamo di avere un'applicazione web (PHP scritto usando password_hash() ) usando gli hash delle password salate per salvare le password degli utenti. Un utente prova ora ad accedere. Il server ora deve svolgere alcune attività:

  1. Calcola l'hash della password fornita (ovviamente con i fattori di costo)
  2. Confronta hash con hash salvato

Supponendo di poter salvare la lunghezza di una password senza problemi di sicurezza, potrei cambiare il flusso di lavoro:

  1. Confronta la lunghezza della password fornita con la lunghezza salvata (non corrisponde a > return)
  2. Se la corrispondenza calcola l'hash della password fornita (ovviamente con i fattori di costo)
  3. Confronta hash con hash salvato

Che ne pensi? Sarebbe "economico" perché risparmio tempo / risorse di calcolo (o rallenta il processo in generale, perché farebbe risparmiare tempo se non fosse stata fornita una password valida)? O sarebbe un problema di sicurezza?

    
posta Danny. 26.06.2015 - 11:53
fonte

1 risposta

7

Sì, c'è un problema di sicurezza. Rischia il rischio di divulgare inavvertitamente la lunghezza delle password utilizzando questo approccio.

Un utente malintenzionato potrebbe abusare di questo per determinare la lunghezza di una password utilizzando un tipo di attacco di cronometraggio.

Poiché il calcolo dell'hash è più dispendioso dal punto di vista computazionale rispetto al confronto della lunghezza della password fornita con la lunghezza memorizzata, possiamo supporre che il confronto della lunghezza sarà eseguito molto più velocemente del calcolo e del confronto dell'hash e quindi restituirà all'utente un risultato molto più veloce (stiamo parlando di millisecondi qui - ma ciò che è importante, è che è misurabile)

Ora, l'attaccante può semplicemente iniziare a inviare password di diversa lunghezza e misurare il tempo necessario per ottenere una risposta (aggiustando la latenza di rete e altri fattori) e misurare i tempi di risposta. Poiché il server impiegherà più tempo a rispondere quando confrontando l'hash, l'hacker saprà che la lunghezza della password è corretta quando la risposta è relativamente più lenta rispetto alle ipotesi precedenti. Avere la lunghezza della password rende quindi molto più facile per l'attaccante iniziare a indovinare con la password corretta.

Se il calcolo sul server è davvero un problema per te, puoi mitigare questo rischio assicurandoti che la risposta venga restituita solo dopo un periodo di tempo prestabilito. In questo modo il tempo in cui la risposta non perde informazioni all'attaccante in quanto non ha alcuna relazione con il calcolo eseguito in background.

Tutto considerato direi che i rischi di fare qualcosa di simile superano di certo i premi.

    
risposta data 26.06.2015 - 12:18
fonte

Leggi altre domande sui tag