Le altre risposte sono corrette, ma per completezza mi piacerebbe contrastare un attacco dizionario con un attacco arcobaleno.
In un attacco arcobaleno, l'hacker crea una "tavola arcobaleno" basata sul dizionario.
Che cos'è un tavolo arcobaleno? Un elenco pre-calcolato degli hash associati alle parole comuni. Con la tabella arcobaleno, un hacker può eseguire una "ricerca inversa" a partire dall'hash della parola e tornare indietro per ottenere il testo chiaro-- qualcosa che è computazionalmente non fattibile senza la tabella arcobaleno (o una serie di catene hash precalcolate, se 'sta andando per il compromesso spazio / tempo, ma questa è un'altra questione). In questo caso l'hacker ha limitato l'elenco di parole comuni a 500.000.
Quindi, se non ci fosse sale, l'hacker dovrebbe fare hash di ogni parola, il che significa che il numero di voci della tabella arcobaleno (lo "spazio di ricerca") sarebbe 500.000.
Ora aggiungi il sale. Salt, come sai, è solo qualcosa che aggiungi alla parola cleartext prima di calcolare l'hash, rendendo così parole molto lunghe che sono più o meno imprevedibili. Con 2 ^ 32 valori di sale, la tabella arcobaleno esplode in dimensioni a 2 ^ 32 x 500.000, o 2,14 x 10 ^ 15, o 2.147.483.648.000.000. Ouch.
Fortunatamente non ci sono realmente 2 ^ 32 valori di sale. L'hacker conosce tutti i valori di sale in uso e ce ne sono solo 100 (1 per ogni utente). Quindi la dimensione della tabella arcobaleno necessaria è solo 100 x 500.000 = 50 milioni di voci.
Contrasta con un attacco di dizionario. Un attacco dizionario è una forma di attacco a forza bruta che limita il campo di ricerca cercando parole comuni. Questo tipo di attacco in questo caso richiede operazioni di hashing al massimo 100x500,000 = 50M.
Le parole chiave sono "al massimo". L'attacco del dizionario è in realtà considerevolmente più veloce; è piuttosto improbabile che dovrai calcolare tutti i 500.000 hash prima di trovare quello giusto. In un caso tipico dovrai calcolare 250.000, e forse anche meno, se usi il tuo dizionario in modo intelligente (le parole più comuni prima.)
Al contrario, con un attacco arcobaleno (che è un tipo di attacco "forza bruta inversa") si costruisce prima la tabella arcobaleno, e richiede tutte le operazioni di hashing 50M prima ancora di guardare un singolo record utente. Non è noto per la sua efficienza di memoria! In effetti questo è il suo lato negativo primario.
Quindi per ulteriore credito, dì al tuo professore che l'attacco del dizionario (dato il sale e il noto elenco di 500.000 parole) su ciascuna password sarebbe più efficiente di un attacco arcobaleno, nel caso specifico, assumendo che i valori del sale siano ogni unico.
Un modo eloquente per affermarlo è:
Attacco arcobaleno
- Operazioni di hashing 500.000 x (100-Q) + 100 operazioni di confronto, dove Q è il numero di valori salati che sono duplicati
- Il requisito di memoria è (500.000 x (100-Q) x dimensione hash) + (100 x dimensione password)
Attacco al dizionario
- 100 x (N x (1 operazione di hashing e 1 operazione di confronto)), dove 1 < = N < = 500.000
- Il requisito di memoria è (1 x dimensione hash) + (100 x dimensione password)
In entrambi i casi, lo "spazio di ricerca" è 50.000.000. L'attacco del dizionario è superiore in termini di spazio e tempo per i valori attesi di Q. L'attacco Rainbow vince se non c'è sale o sale è fissato (Q = 99), e probabilmente vincerebbe anche per valori alti di Q.
Per un credito extra serio, calcola Q '(dove l'attacco arcobaleno batte l'attacco del dizionario quando Q > = Q'), in termini di numero di calcoli. Sicuramente otterresti un A +.