Perché dovresti scegliere di rallentare il calcolo dell'hash della password?
Perché dovresti scegliere di rallentare il calcolo dell'hash della password?
Il calcolo viene intenzionalmente rallentato per rendere più difficile a un utente malintenzionato la forzatura delle password dell'utente nel caso in cui il database delle password venga rubato, ad esempio.
Poiché una funzione di hash funziona solo "a senso unico", per ottenere la password per un hash è necessario eseguire l'hash delle password casuali finché non ne trovi una con un hash corrispondente. ( Le tavole arcobaleno offrono comunque un compromesso).
Utilizzando le GPU è possibile forza bruta miliardi di ad es. Hash MD5 al secondo.
Ecco perché hash funziona come bcrypt o scrypt sono stati sviluppati per mitigare questo problema eseguendo lentamente e in caso di scrypt che richiede molta memoria, quindi non è possibile calcolare l'hash utilizzando le GPU.
Per la tua "normale" applicazione, molto probabilmente sarà ancora abbastanza veloce, perché stai calcolando solo un singolo hash, quindi l'impatto sulle prestazioni sarà trascurabile.
Forse ciò che ti rende sconcertante è che non è più chiaro che ... il calcolo non è rallentato affatto!
Cioè: non esiste un modo "più veloce" che sia intenzionalmente ignorato (non che noi sappiamo); non c'è "attesa" artificiale nell'altezza dell'algoritmo.
Piuttosto, il calcolo è progettato per essere lento . O intensivo della memoria. O meglio ancora, entrambi. Non c'è nessuna strada tranne quella lunga e tortuosa per ottenere il risultato.
In questo modo, il calcolo one (quello della password corretta) è ancora molto veloce. Per gli utenti onesti, nulla cambia in modo percettibile. Un decimo di secondo o un miliardesimo di secondo non sembrano differire troppo.
Ma calcoli un miliardo (quelli per trovare quale sia la password giusta tra un miliardo di candidati - e in realtà ce ne sono molti, molti altri) saranno dolorosamente lenti, garantendo che una "forza bruta" il controllo di tutte le password possibili è destinato a fallire.
Quindi, se abbiamo un algoritmo di hashing troppo veloce, non richiediamo la sua prima iterazione, ma il suo (diciamo) milionesimo. Se sicuro . Speriamo che non ci sia modo (che sappiamo di) di saltare direttamente al milionesimo risultato; devi calcolarli tutti . E se questo non può essere fatto - diciamo che l'algoritmo non è sicuro (abbastanza).
Gli hash delle password sono pensati per essere un calcolo computazionalmente lento perché nel caso in cui gli hash delle password siano mai trapelati può rallentare in modo significativo un utente malintenzionato che cerca di trovare la password in chiaro.
Se l'hash della password è lento da calcolare, rende la forzatura bruta di una password molto, molto più lentamente, che andrà a sommarsi su un grande set di dati o un numero di ipotesi. Se impiega molto più tempo, guadagni molto più tempo per affrontare la violazione.
Con esso, puoi aggiungere una durezza lineare agli attacchi del dizionario. Cioè applicando un algoritmo di salatura complesso, è possibile rendere il bisogno del calcolo del dizionario attacchi n volte più grande. Ad esempio, puoi renderlo 1000 volte più grande.
In senso algoritmico, non è molto utile, perché come possiamo vedere, la potenza di calcolo cresce principalmente in modo esponenziale con il tempo. Ma è ancora un ulteriore livello di sicurezza.