Crittoanalisi

Brute Force

 

 

Il metodo di attacco Brute-Force (forza bruta), consiste nell'effettuazione di una ricerca esaustiva della chiave di decifrazione.

 

Questo tipo di attacco è possibile solo oggi, grazie ai computers: sfruttando le loro caratteristiche di velocità nell'effettuazione di operazioni quali la composizione di stringhe alfanumeriche e la velocità di test dei risultati, è possibile provare milioni di combinazioni in qualche minuto e con  macchine potenti ed ancora meglio con macchine specializzate (la NSA stessa costruisce processori), anche in frazioni di secondo.

 

Come si realizza

L'occorrente per un attacco di questo tipo, consiste in:

  1. Programma che il destinatario deve usare per decifrare (generalmente lo stesso programma utilizzato dal mittente per cifrare).

  2. Generatore di password.

  3. Programma pilota del programma decifrante.

  4. Programma di test con dizionario.

Il punto 1 è facile da realizzare: dall'estensione dei files o da altre caratteristiche è facile capire con quale dei programmi in commercio è stato realizzato un determinato file cifrato e procurarselo. Se non fosse possibile le cose si complicano notevolmente. Basandosi però sul fatto che anche il governo americano utilizza un programma un algoritmo pubblico, si presume che sia quasi sempre possibile entrare in possesso del programma cifrante/decifrante.

I punti 2, 3 e 4, saranno funzioni di un unico programma che devono essere realizzati da un programmatore. 

Nello specifico, il generatore di password può tentare 2 strade:

  1. La generazione di tutte le parole di un dato dizionario, se si presume che la password possa avere a che fare con qualche parola di senso compiuto (sebbene l'autore dovrebbe essere andato contro le regole del buon senso nella scelta della password).

  2. La generazione di password seguendo un ordine stabilito (es. a, b,...z, aa, ab... az, aaa,aab...aaz, ecc.)

Le password generate saranno introdotte nel programma di decrittazione (o decifrante, ovvero quello del punto 1), dal programma pilota, che si occupa di passargli la stringa di caratteri generalmente chiamata password, come se venisse inserita manualmente. L'operazione è semplicissima: sotto Windows, basta sfruttare l'automation, se fornita dal programma decifratore, oppure l'emulazione di tastiera che è sempre effettuabile, via software, o nel peggiore dei casi, via hardware attraverso altre macchine.

 

Prima di tentare una nuova password, è necessario avere un feedback dei risultati, realizzabile dal programma del punto 4, il quale analizzerà il file decifrato per vederne i risultati e ricercare almeno alcune parole nel dizionario per vedere se sono di senso compiuto. Dato che la maggior parte dei programmi di crittografia non eseguono la decrittazione se la password inserita non è corretta, il programma di test dovrà dare il consenso ad un nuovo tentativo di inserimento password qualora non trovi nessun file decifrato in output. Qualora sia stato creato dal programma di decifratura, dopo averlo analizzato dovrà prendere 2 scelte:

  1. Se viene trovata una o più parole di senso compiuto, deve interrompere tutte le operazioni e mostrare l'ultima pass provata.

  2. Se non viene trovata alcuna parola di senso compiuto, deve cancellare il file appena esaminato ed avviare un nuovo tentativo di inserimento password da parte del programma (o funzione) pilota.

Il dizionario che viene sfruttato dal programma di test (quello che genera quindi il feedback per il programma pilota), dovrà contenere le parole più comuni della lingua che si presume sia stata utilizzata, e sarà realizzato con un database indicizzato, oppure da un file di testo da caricare completamente in memoria per una più veloce operazione di ricerca. Tenere presente che tale dizionario potrebbe comunque essere composto anche solo da quelle congiunzioni, preposizioni, verbi ecc., onnipresenti in un testo. Può quindi essere sufficiente utilizzare un piccolo dizionario contenente parole formate da un minimo 3 caratteri (per evitare interpretazioni di successo errate, dovute al caso), come "dal", "che", "degli", "gli", "anche", "per", "non", "essere", "avere", "fare", ecc.

 

Il sistema sopra esposto è specifico per i testi, ma può andare bene anche per la decrittazione di programmi eseguibili (software), dato che le interfacce utente dei programmi, contengono sempre parole del linguaggio parlato. 

Per la decrittazione di programmi eseguibili possono tuttavia essere utilizzati particolari accorgimenti, tanto per citarne uno, controllare solo i primi due byte del file decifrato, verificando che contengano il valore esadecimale 4D-5A, velocizzando le operazioni che in questo modo non necessitano neanche più del dizionario.