Ci sono tavoli arcobaleno e c'è forza bruta ... sono due cose distinte.
Una tabella arcobaleno è un caso speciale di una grande tabella precomputed di password con hash. In quanto tale, una tabella arcobaleno può "invertire" un hash, cioè recuperare una password corrispondente, solo se, ad un certo punto durante la costruzione della tabella, tale password è stata considerata ed hash. Corrispondentemente, se una password può essere trovata con una tabella arcobaleno, allora potrebbe essere stata trovata con un semplice attacco dizionario che non sono costati più della costruzione della tabella. L'arcobaleno non cambia questo; infatti, la cosa arcobaleno rende effettivamente la tabella più costosa da costruire, di un fattore circa 1,7 (perché la costruzione della tabella tende a considerare e hash più volte le stesse password, e ciò è piuttosto inevitabile).
Una conseguenza è che nessuna tabella arcobaleno vale lo sforzo a meno che non possa essere applicata almeno due volte . Usiamo sali proprio per evitare che ciò accada. Il sale può essere visto come una variante della funzione hash, ogni nuovo sale implica una nuova variante. Una tabella precalcolata vale qualcosa solo se è stata precalcata con la stessa variante (lo stesso sale) del valore di hash che deve essere attaccato. Se non viene usato alcun valore di sale più di una volta, l'attaccante intelligente non sprecherà il suo tempo a costruire tavoli arcobaleno Kleenex; lui semplicemente scapperà
un attacco di dizionario.
Consideriamo che l'attaccante conosce il sale. Perché ? Perché il server lo sa e il modello di attacco è che l'utente malintenzionato potrebbe ottenere un dump del database del server. Qualunque cosa sappia il server, anche l'hacker sa. Pertanto, quando si attacca una password con hash, la lunghezza del sale o il contenuto non contano (l'attaccante deve includere il valore di sale nei suoi calcoli, ma nessuna lunghezza di sale renderà il suo compito più facile o più difficile).
Quindi, abbiamo solo la password come linea di difesa. Se vogliamo sapere quanto costa l'attacco, allora questo diventa economia e, come tale, sorge una certa complessità. In particolare, vogliamo sapere se stiamo parlando di un utente malintenzionato che sta cercando one una password molto preziosa (ad esempio, la password che protegge il computer principale della forza aliena che sta per obliterare la Terra), o un aggressore che si guadagna da vivere rompendo le molte password. In quest'ultimo caso, i costi dell'hardware diventano trascurabili per quanto riguarda il consumo di energia.
Se prendiamo le stime di @jimbob, l'hardware che calcola 10 9 hash al secondo utilizza 200W di potenza e la potenza arriva a $ 0,1 per kWh (nota che il costo dell'energia include il raffreddamento: ogni Watt speso per il calcolo diventa anche calore, che deve essere in qualche modo dissipato). Questo ci dà valori di hash di 1,8 * 10 14 per dollaro. Da ciò otteniamo quanto segue:
-
Con $ 10K, un utente malintenzionato può provare i valori hash 1.8 * 10 18 , che è più o meno il numero di possibili password di 10 caratteri alfanumerici (maiuscolo, minuscolo e cifre).
-
Con 683,7 miliardi di dollari (ovvero il budget militare totale degli Stati Uniti nel 2010 ), un utente malintenzionato potrebbe provare circa 1.23 * 10 26 valori di hash, corrispondenti a circa 14,5 caratteri alfanumerici. Permettetemi di aggiungere che questa cifra corrisponde alla produzione annua di circa un centinaio di centrali nucleari, quindi lo sforzo di cracking difficilmente potrebbe essere poco appariscente.
Conclusione: con 15 caratteri alfanumerici casuali, le tue password resisteranno anche a nemici non plausibili, anche se hai completamente distrutto l'hashing utilizzando una singola invocazione di SHA-1, invece di usare bcrypt o PBKDF2 con un alto conteggio iterazione, come si dovrebbe fare . Nota che questo è valido solo per i caratteri casuali , non del tutto per il tipo di personaggi che potresti trovare nella privacy del tuo cervello. I cervelli umani non sono affatto bravi a caso.