quanto tempo ci vuole per generare effettivamente le tavole arcobaleno?

27

Ho letto dei tavoli arcobaleno perché penso che siano piuttosto interessanti perché in realtà sono un concetto piuttosto semplice.

Ad ogni modo, mi stavo chiedendo, qualcuno è mai stato coinvolto nella creazione di uno? Come è possibile che sia fatto? Semplicemente non vedo come sia effettivamente possibile generare ogni combinazione di ogni personaggio.

Se escludiamo caratteri speciali, ci sono queste quantità di caratteri.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890

Sembra che ci siano 26 + 26 + 10 = 62 caratteri

Ciò significa che una password di lunghezza 8 ha combinazioni 62 ^ 8.

che è uguale a 218340105584896

Questo da solo sembra che ci vorranno anni per generare. Che dire quando aumentiamo il numero di personaggi a 12 e aggiungiamo i caratteri speciali (diciamo che ce ne sono altri 10 guardando semplicemente i caratteri che ottieni premendo shift - numero)?

Otterremmo 72 ^ 12 = 19408409961765342806016

questo è un numero abbastanza grande da richiedere anni.

    
posta stickman 29.04.2011 - 09:27
fonte

4 risposte

30

Una tabella arcobaleno è "solo" una rappresentazione compatta di una tabella di valori hash precalcolati. Durante la costruzione della tabella arcobaleno, molti possibili input vengono provati e sottoposti a hash. Ogni input incontrato durante la costruzione della tabella verrà attaccato con successo con quella tabella e nessun altro. La valutazione dell'hash concentra la maggior parte del costo di costruzione della tabella.

Quindi, in sostanza, il costo di costruire una tabella arcobaleno che può invertire le password N equivale approssimativamente al costo di provare quelle password N attraverso la funzione hash - il punto della tabella arcobaleno è che lo costruisci una volta e quindi puoi usarlo per spezzare diverse password. (Per essere precisi, a causa di collisioni a catena durante la costruzione della tabella, il costo è in effetti più vicino a 1,7 * N , ma ignoriamolo per il momento.)

Una volta ho fatto alcune esperienze con SHA-1. Un semplice hash della password con SHA-1 ha il costo di elaborare un singolo "blocco" (SHA-1, come MD5, elabora i dati per blocchi da 64 byte), che richiede circa 900 operazioni logiche o aritmetiche a 32 bit. Un'implementazione ottimizzata su un processore Intel Core2 x86 può farlo in circa 500 cicli di clock. Tuttavia, gli attacchi con password (sia direttamente che per la costruzione di tabelle arcobaleno, non importa) sono un lavoro altamente parallelo, quindi è possibile utilizzare le istruzioni SSE2 che offrono registri a 128 bit e dove un singolo codice operativo può eseguire quattro Operazioni a 32 bit contemporaneamente. SSE2 ha meno tipi di operazioni disponibili (in particolare, non offre rotazioni, solo turni), quindi il conteggio delle operazioni sale a circa 1200; ma, in alcune condizioni, l'unità SSE2 eseguirà più codici opzionali contemporaneamente. Quindi finiamo con 800 cicli di clock, per quattro istanze SHA-1 in parallelo. Bottom-line: il mio PC è un Intel Core2 Q6600, con quattro core a 2,4 GHz. Ogni core può eseguire la mia implementazione SSE2, generando approssimativamente 48 milioni password hash al secondo.

Ho anche una scheda grafica Nvidia non troppo piccola e la GPU può eseguire codice arbitrario tramite CUDA . Questa è una 9800 GTX +, con 128 core a 1,84 GHz. Ogni core può eseguire un'operazione a 32 bit per ciclo (c'è una latenza elevata, ma, grazie all'elevata parallelizzazione, questo throughput one-instruction-per-cycle può essere mantenuto). I core non conoscono le rotazioni, quindi ogni codice utilizzerà 1200 cicli di clock per password hash. La performance totale è 160 milioni hashed password al secondo.

Il mio PC e la mia scheda grafica risalgono all'inizio del 2009 e non sono al top della gamma. Al giorno d'oggi si possono trovare, per poche centinaia di dollari, una GPU che avrà password hash circa tre volte più veloci della mia 9800 GTX +. Quindi supponiamo che un utente malintenzionato con un PC comune (che costa meno di 1000 $) possa disporre di mezzo miliardo di password al secondo.

A quella velocità, tutte le password con 8 caratteri alfanumerici (lettere maiuscole e minuscole e cifre) sono passate in circa 5 giorni . Con un PC da 1000 $. Se si utilizza MD5, le cose sono circa il 30% più veloci (MD5 usa un po 'meno operazioni di SHA-1). I buoni schemi di hashing delle password non usano una semplice invocazione hash: usano hashing iterato con, diciamo, 2000 invocazioni hash annidate: questo moltiplica il costo per l'attaccante dello stesso fattore 2000 (quindi trasforma i "5 giorni" in circa 28 anni, letteralmente "invecchia" come lo metti).

    
risposta data 29.04.2011 - 15:59
fonte
18

Quanto tempo ci vuole per generare una tabella arcobaleno per un hash molto semplice, usando solo una singola iterazione? Ci vuole un'ora! o meno, se lo desideri.

Mentre le risposte di cui sopra sono del tutto corrette, c'è uno sviluppo importante che non menzionano. Amazon EC2 e altri fornitori di servizi di cloud computing.

Oggi tutti con una carta di credito possono andare su aws.amazon.com e caricare una istanze di spot EC2 , per meno di cento dollari. Se hai un buon codice CUDA disponibile, noleggia 50 delle più costose istanze "Cluster GPU" di Amazon con due processori grafici NVIDIA Tesla M2050.

(Un po 'come le compagnie aeree, Amazon ha prezzi differenziati.Se avete bisogno di un server EC2 specifico con disponibilità garantita, il prezzo è più alto.Ad esempio, è possibile ottenere un'istanza "Hi-CPU Large" con 8 core CPU virtuali per 0,68 USD all'ora Se sei disposto ad acquistare la stessa istanza di permessi di fornitura in eccesso nelle ore di chiusura, puoi ottenerlo con il 40% -50% di sconto .)

La creazione di tabelle arcobaleno può essere eseguita in parallelo con un incremento lineare delle prestazioni, ovvero con 100 computer che lo lavorano è 100 volte più veloce di un singolo computer.

Amazon non ti addebita per istanza, addebita per istanza-ora. Pertanto, l'esecuzione di 1.000 server per un'ora costa lo stesso come un server per 1.000 ore.

La natura parallela della creazione della tabella arcobaleno, insieme a servizi come Amazon EC2, significa che non esiste più una domanda "quanto tempo impiega". C'è un "quanto sei disposto a pagare per averlo veloce , rispetto a pagare meno e farlo in pochi giorni?". La differenza di costo e amp; il tempo deriva principalmente dalla differenziazione dei prezzi di Amazon tra istanze EC2 "regolari" rispetto alle "istanze spot" più economiche.

    
risposta data 30.04.2011 - 09:47
fonte
6

Utilizzando una semplice esecuzione di test 26 ^ 5, sono stato in grado di generare una tabella esadecimale ascii in Ruby che ha generato 228488 output MD5 al secondo. Tutte le voci di 11881376 impiegano 52 secondi sul mio Core i7 di 1,5 anni. Se non avessi apportato alcun miglioramento al mio programma, mi aspetto che venga eseguito per 26 settimane per generare il tuo elenco 62 ^ 8.

Potrei probabilmente apportare miglioramenti al mio programma eseguendo otto programmi separati, uno per hyperthread, per partizionare lo spazio dei problemi. Se ogni programma salvasse l'output sul proprio disco, non competerebbero per la larghezza di banda IO. Mi aspetterei un fattore di accelerazione da quattro a sei rispetto al mio stupido programma a thread singolo per il runtime di 4-6 settimane. Se dovessi riscrivere in C, potrei aspettarmi un altro fattore di accelerazione 1.5. (Forse di più? Da una parte è un programma semplice, d'altra parte, un array C di 13 byte, modificato in fase di esecuzione, probabilmente verrà eseguito in molta meno memoria e, naturalmente, nessun garbage collection rispetto alla creazione e alla distruzione del Oggetti stringa ruby.)

Mi aspetto un lavoro pomeridiano e qualche centinaio di dollari di nuovo equipaggiamento mi permetterebbe di finire i tavoli 62 ^ 8 due settimane sull'hardware di base.

E certo, nessuno usa MD5 a esecuzione singola su password; ridimensiona i miei risultati finali per quanto sia molto più costoso il tuo hash unidirezionale rispetto a MD5. :)

    
risposta data 29.04.2011 - 10:13
fonte
1

Vedi i miei calcoli sulla velocità hash della rete di estrazione bitcoin all'indirizzo Come hash sicuro Le password? - Sicurezza IT per ciò che può determinare le persone con più moderne schede GPU in termini di hashing raw. La comunità è in esecuzione a 11 Thash / s (11 * 10 ^ 12 hash / s) all'inizio di luglio 2011 ....

    
risposta data 14.07.2011 - 02:11
fonte

Leggi altre domande sui tag