Perché un attacco con tavolo arcobaleno non può identificare e spazzare il sale?

2

Ecco la mia comprensione di uno schema di autenticazione salato / con hash:

string plaintextPass = Request.Form["password"];
string salt = UserRecordFromDb.Salt;
string toHash = salt + plaintextPass;

string hash = bcrypt(toHash);

return(hash == UserRecordFromDb.HashedPassword);

Il problema è che l'algoritmo aggiunge il di sale in modo prevedibile . Se potessi usare una tabella arcobaleno per ottenere il testo in chiaro incluso il sale , potrei trovare e buttare via il sale. Ci sono abbastanza utenti che usano comunque password sbagliate per rendere più facile riconoscere il modello di aggiunta di sale 1 .

Ad esempio, se ho recuperato questi elementi in chiaro dal mio attacco della tabella arcobaleno:

1: passwordW0fkvE
2: secretJEn3cx
3: t4k3nVdksE12
4: purplehorse1593vE1r

# 3 non mi dice molto. È una buona password, quindi il sale è irriconoscibile. Ma da # 1 e # 2 posso vedere che il sale è probabilmente 6 caratteri aggiunti alla fine. Posso usare quell'informazione per # 4 per capire che la password è purplehorse15 .

1 Nota: se memorizzi il salt e il nome utente / hash pass nello stesso DB, non ho nemmeno bisogno di indovinare cosa sia il sale. È proprio lì davanti a me. Il passo extra di indovinare il sale è necessario solo se il sale è memorizzato in qualche altro DB.

    
posta just.another.programmer 10.09.2015 - 09:13
fonte

2 risposte

3

Un paio di elementi da considerare:

  1. È importante notare che una tabella arcobaleno funziona in modo diverso rispetto a una tabella di hash precompilata diretta. (anche se una tabella arcobaleno con una catena di lunghezza pari a 1 è essenzialmente la stessa cosa di una tabella di hash precalcolata - la maggior parte delle tabelle arcobaleno hanno molte catene però)

  2. Le catene arcobaleno hanno problemi con le password con i LARGE sali. Un breve sale (6 caratteri) potrebbe non essere un problema enorme per loro da affrontare. (ma di nuovo, esponenzialmente più lungo per ogni carattere aggiuntivo)

Il problema con le tabelle hash precomputed è che ottengono ENORME. Anche generando una tabella precompuita di sole cifre, la lunghezza da 0 a 8 si trasforma in molti gigabyte. Se inizi ad aggiungere in alfa / simboli diventa gigantesco. Quindi l'aggiunta di anche 6 caratteri di sale aumenterà notevolmente la dimensione della tua tabella di ricerca.

Una tabella arcobaleno offre un mix tra l'archiviazione su disco e il calcolo utilizzando le catene. Dovresti usare meno spazio di una tabella di hash precalcolata, e probabilmente andrebbe bene per i sali corti, ma trattare con sali di grandi dimensioni richiederebbe MOLTO spazio.

Ecco un sito eccellente che descrive i passaggi effettivi e fornisce esempi su come funziona:

link

Questo altro post spiega un po 'di più sulle tabelle arcobaleno: Quali sono le tabelle arcobaleno e come vengono utilizzate?

Per riassumere: è plausibile che sia possibile utilizzare una tabella arcobaleno o una tabella hash precalcolata per risolvere le password. I sali aggiungono più entropia aggiungendo caratteri alla lunghezza. Rende PIÙ strong come se tu fossi essenzialmente bruto-costringendo una password casuale di n-char + sale.

Infine - per affrontare il problema che se già conosci il sale: non credo che questo ti farebbe bene, dato che gli hash sono a senso unico e per il funzionamento delle tabelle arcobaleno devi avere un'abitudine funzione di riduzione nella tabella arcobaleno che generava i testi in chiaro che terminavano nel sale. Diversamente, poiché le tabelle arcobaleno generano il loro successivo testo in chiaro sulla riduzione della catena precedente, se non si fosse utilizzata una funzione di riduzione personalizzata sarebbe impossibile incorporare il sale alla fine del testo in chiaro risultante. Probabilmente sarebbe più semplice usare una semplice tabella hash precalcolata in quell'istanza, ma di nuovo avresti bisogno di una per ogni salt.

    
risposta data 10.09.2015 - 10:34
fonte
0

Vorrei fare diversi punti sul problema. I sali sono stati progettati per prevenire gli attacchi dei tavoli arcobaleno. Le tabelle arcobaleno offrono un compromesso tra velocità e spazio, fondamentalmente si velocizza il processo di cracking cercando nelle voci della tabella precomputed. Nel tuo caso per ogni parola, dovresti generare fino a 2 ** 48 voci, la quantità di spazio che ti serve è enorme! Il prossimo punto che vorrei fare è che l'algoritmo di hash utilizzato sia bcrypt. bcrypt può essere molto lento, specialmente se il costo impostato è elevato, la generazione di tabelle arcobaleno richiederebbe settimane, mesi o anni a seconda dell'hardware. Le tabelle Rainbow non sono la soluzione qui.

    
risposta data 13.09.2015 - 13:36
fonte

Leggi altre domande sui tag