La generazione di tabelle arcobaleno è mai il modo migliore per attaccare una singola istanza. Le tabelle Rainbow sono tabelle precomputed : fai molti calcoli in anticipo, con la speranza che sarai in grado di applicare questi calcoli a diverse istanze di attacco.
Le tabelle precalcolate (arcobaleno o non arcobaleno, qui non cambia nulla) seguono tutte lo stesso schema:
-
Durante le precomputazioni, "provi" N possibili password e, per ognuna di esse, applichi la funzione crittografica pertinente (nel tuo caso, una sorta di hash per password-to- derivazione delle chiavi, quindi crittografia simmetrica) e memorizza il risultato (per una tabella arcobaleno i costi di archiviazione vengono ridotti, ma il costo della CPU è invariato - in effetti è un po 'ingrandito a causa delle specifiche del arcobaleno).
-
Al momento dell'attacco, cerchi l'hash / testo cifrato osservato nella tua tabella. Se la password era effettivamente uno dei N che hai elaborato durante la costruzione della tabella, allora l'attacco funziona. Altrimenti no.
Quindi generare la tabella costa tanto quanto il caso peggiore di un semplice attacco di forza bruta: si paga ancora per l'hashing di tutte le N password possibili. Se hai solo un'istanza da attaccare, allora la forza bruta diretta è più economica.
Nel tuo caso , hai uno schema di derivazione h (non specificato) da password a chiave, e con cui devi lavorare è
f ( p , IV , m ) = IV xor AES h ( p ) ( m )
dove p è la password, IV è la IV e m è il primo blocco del testo in chiaro (i primi 16 byte) . Se vuoi costruire una tabella precalcolata, allora quella funzione f è ciò che devi valutare per ciascuna password. La tabella risultante sarà applicabile solo ai casi che utilizzano esattamente lo stesso IV e esattamente lo stesso primo blocco di testo in chiaro noto. Se la IV o il testo in chiaro noto sono diversi, non solo la tabella è una pessima idea per rompere una singola istanza, ma diventa anche una cattiva idea in tutta la generalità poiché la tabella sarà utilizzabile una sola volta.
Un punto critico è la funzione h : il processo mediante il quale una password viene trasformata in una chiave di crittografia. Se la funzione h è corretta hashing della password funzione , ha un salt, che viene generato un nuovo per ogni password, e questo sconfigge completamente le tabelle precalcolate, anche se la IV e il messaggio vengono riutilizzati esattamente.
Anche se h è una funzione di hash di base, veloce e non salta (ad esempio, una singola chiamata di SHA-256), non puoi ancora riutilizzare le tabelle (arcobaleno) esistenti, perché non hai accesso all'output dell'hash; hai solo il testo cifrato. Il passo di crittografia è sufficiente per mettere il contesto al di fuori dei contesti per cui esistono già le tabelle arcobaleno.
Pertanto, se vuoi mettere in atto i tuoi tentativi di rottura, dovrai implementare un meccanismo di forza bruta . Naviga sul Web per raccogliere le implementazioni di AES e della funzione h , qualunque sia la funzione di hash. Mettili insieme in un codice che cerca potenziali password. Compilati, corri, sii paziente.
In ogni caso, tale forza bruta funziona solo nella misura in cui la password utilizzata è una delle password che puoi provare plausibilmente entro i limiti della tua pazienza. Se la chiave AES non è realmente derivata da una password, ma è stata generata in modo casuale da un PRNG crittograficamente protetto , quindi dimenticarlo. Non lo forzerai a forza.
Ciò che puoi fare dipende dal contesto. Ad esempio, se hai accesso a un dispositivo o sistema che esegue la crittografia con la chiave che non conosci, ma sui dati che puoi scegliere (a selected-plaintext attack ), quindi la prevedibilità della IV (è sempre la stessa, nella tua descrizione) ti permette di eseguire una forza bruta sui dati (non la chiave), che, a seconda dei dati, potrebbe essere molto efficiente.