Penso che tu stia confondendo un paio di concetti e stai chiedendo in particolare l'hashing della password, corretto?
L'hashing della password, se eseguito correttamente, introduce un fattore di lavoro, il che significa che ci vuole un po 'di tempo per calcolare un hash, non strettamente come una "pausa" mentre lo descrivi, anche se ciò comporta che l'utente finale percepisca alcuni ritardo, che potrebbe essere interpretato allo stesso modo.
Un'ulteriore correzione di nota: un hash è a senso unico. Non c'è possibilità di decifrare. Quindi, se hai un hash di una password e vuoi capire quale password è stata usata per creare quell'hash, il modo in cui lo fai è usare la stessa funzione di hash e inviare le password candidate e confrontare l'hash risultante per l'hash che hai, per vedere se corrispondono. Questo è ciò che i siti web (per esempio) tipicamente fanno. In termini molto semplici, quando crei un account, ti viene chiesto di fornire una password, che viene sottoposta a hash, e l'hash è archiviato. Quando torni ad accedere di nuovo, inserisci di nuovo la tua password, il sito web ha cancellato ciò che hai dato e lo confronta con l'hash che ha memorizzato. Se corrispondono, sei autenticato. In caso contrario, ti verrà chiesto di riprovare.
Quindi, il problema con una semplice funzione di hash è che è abbastanza facile creare gli hash di molte password candidate molto velocemente. Quindi, quando l'utente malintenzionato ruba un hash di password da un database, può quindi creare hash da un dizionario di possibili password e confrontare gli hash risultanti con l'hash rubato per capire quale sia la password a un ritmo sbalorditivo. Per molte funzioni hash comuni, può provare letteralmente miliardi di possibili password ogni secondo.
La soluzione per questo, che penso tu stia alludendo alle tue domande, è il fattore di lavoro che ho menzionato, che è generalmente implementato come iterazioni. Pertanto, quando viene inoltrata una password per l'hashing, questa non viene sottoposta a hash una volta, ma 10.000 volte, o 100.000 volte o 1.000.000 di volte. Ciò significa che quando un utente malintenzionato ruba questo hash, anche lui deve eseguire il hashing di ognuna delle sue password candidate altrettante volte per capire se il candidato è effettivamente corretto. Così ora hai limitato i suoi possibili tentativi da miliardi al secondo, a miliardi divisi per 10.000, o diviso per 100.000, o per 1.000.000. Molto più costoso per lui, e molto meno probabile che otterrà abbastanza lontano nel suo elenco di possibili password per trovare la password effettiva.
In pratica è un po 'più complicato questo. Devi tenere conto di dettagli come sali, durezza computazionale rispetto alla durezza della memoria e altre variabili simili, ma in generale, ad un livello elevato,
questo è il meccanismo con cui rendere difficile l'hashing della password di attacco.