Recentemente ho trovato un codice password che ha cancellato la password e poi l'ho confrontata con l'hash salvato in modo ingenuo: un personaggio alla volta, cortocircuitando non appena è stata trovata una non corrispondenza. Abbiamo convenuto che si trattava di un bug di sicurezza e l'abbiamo risolto.
Tuttavia, questo codice ha stuzzicato la mia curiosità: supponiamo che un utente malintenzionato sia in grado di scoprire i tempi della password controllando il numero di cifre hash corrispondenti. In che modo questo bug può essere sfruttato nella pratica? Capisco che la sicurezza dovrebbe essere profonda e non è necessario trovare un exploit pratico per prendere una misura di sicurezza - sto chiedendo solo per curiosità.
Ad esempio, l'utente malintenzionato potrebbe provare a estendere progressivamente l'hash un carattere alla volta. Ma se l'hash è composto da n cifre, l'hacker deve eventualmente estendersi da n-1 cifre a n cifre. Supponendo una buona funzione di hash, questo sembra richiedere un attacco pre-immagine completo. Supponendo che l'attaccante possa calcolare l'hash, che richiede che l'attaccante abbia il sale se ce n'è uno, questo attacco potrebbe essere eseguito principalmente lato client (date n cifre in base b, sono richieste al massimo n * b richieste al server ). Ma le funzioni hash sono scelte per resistere agli attacchi pre-immagine, quindi questo exploit è pratico?