aiutami a salare le password

-1

Eve ha appena scoperto e decrittografato il file che associa ogni ID utente con il suo valore salt casuale a 32 bit, e ha anche scoperto e decrittografato il file password, che contiene le password salted-and-hash per 100 persone nel suo edificio. Se lei ha un dizionario di 500.000 parole e lei lo è sicuro che tutte le 100 persone hanno password da questo dizionario, qual è la dimensione del suo spazio di ricerca per eseguire un attacco di dizionario sulle loro password?

    
posta user34221 14.11.2013 - 17:56
fonte

3 risposte

6

Supponendo che questa sia una domanda per i compiti a casa, mi concentrerò più sul perché che sul cosa. Lo scopo di un sale unico è che rende i valori che sarebbero altrimenti uguali. Il risultato netto è che questo impone ad ogni password nel database di essere attaccata in modo indipendente poiché 'abc'password non ha hash per la stessa cosa di' dcf'password.

Ciò significa che tutti i valori devono essere provati contro tutti gli input nel caso peggiore. Se sono distribuiti uniformemente, allora dovrebbe richiedere una media della metà dello spazio di ricerca ogni volta per trovare una corrispondenza. Nel mondo reale, le persone tendono a seguire schemi e quindi vanno ancora più velocemente, anche se un dizionario di 500.000 potrebbe non andare molto più velocemente poiché probabilmente è abbastanza vicino al pool comune di password quando si inseriscono frequenti sostituzioni di lettere.

    
risposta data 14.11.2013 - 19:16
fonte
3

Poiché 100 ^ 2 è molto più piccolo di 2 ^ 32, possiamo supporre che ogni sale sia unico, nonostante sia molto più piccolo di quanto raccomandato. I sali unici prevengono tutti gli attacchi multi-target, oltre al fatto che la dimensione del sale è irrilevante per la sicurezza.

Quindi il numero massimo di ipotesi è 100 * 500000 = 50 milioni poiché è necessario provare ogni valore del dizionario con ciascun utente. Il numero previsto di ipotesi è a metà che se tutti i candidati alle password sono ugualmente probabili e molto più piccoli di quelli nella pratica, dal momento che un utente razionale tenta prima i candidati più probabili.

    
risposta data 14.11.2013 - 18:11
fonte
-1

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 +.

    
risposta data 15.11.2013 - 17:29
fonte

Leggi altre domande sui tag